每天学习PHP 进步一点点,文章不是技术讲解类文章,只是我学习PHP的纪录,不喜勿喷,各位转载请标明出处。
PHP 类中属性和方法的看见性,也就是我们平所说的访问控制。
通过public protected private 对类内的方法和属性 设置不同可见性。
首先 在对类内的属性和方法设置 可见性时,public protected private 只能三选其一。
那么public protected private 有什么不同的? 其实很简单,public protected private 是控制 我们在本类访问方法属性或是子类访问方法属性以及类外访问方法或属性时使用的。
下面我们就一起来看看 在使用时 public protected private 的具体区别。
直接上代码
<?php
header('content-Tpye:text/html;charset=utf-8');
//先声明一下字符集,这样不会出现乱码。
//我们直接创建一个 classa这样一个类
class classa{
//在这里我们 用 public protected private 分别创建 属性
public $public='我是一个公共的关键字';
protected $protected='我是一个受保护的关键字';
private $private='我是一个私有的关键字';
public $blog='我是一个博客 dir321.com';
}
//现在我们 在类的外面调用一下 $public $protected $private 这三个属性 看看 分别显示 什么样的结果。
//我们new 一下 classa这个类
$classa=new classa();
echo "$classa->public";//结果:成功输出:我是一个公共的关键字
echo "$classa->protected";//结果:报错 致命错误
echo "$classa->private"; //结果:报错 致命错误
// 通过这种语法 我们发现 在类外 我们只能调用 设置为 public的属性,而设置为 protected和private的属性均出现了报错,这就代表 protected和private在类外是无法调用的,只有public支持类外调用。
?>
好,我们继续来看 public protected和private的区别。
<?php
header('content-Tpye:text/html;charset=utf-8');
class classa{
public $public='我是一个公共的关键字';
protected $protected='我是一个受保护的关键字';
private $private='我是一个私有的关键字';
//这里我们创建一个方法,注意方法 可以不设置可见性,因为方法默认的可见性时“public”公共的。
public function print(){
echo "$this->public<br/>";
echo "$this->protected<br/>";
echo "$this->private<br/>";
}
}
$classa=new classa();
$classa->print();
//成功输出:我是一个公共的关键字 我是一个受保护的关键字 我是一个私有的关键字
//我们在类外调用这个 方法,发现方法在类内不仅可以调用 public的属性 还可以调用 protected和private的属性
//证明 public protected private 都是支持 本类调用的。
?>
好 我们继续试验 看看 子类中 可以调用哪些属性
<?php
header('content-Tpye:text/html;charset=utf-8');
class classa{
public $public='我是一个公共的关键字';
protected $protected='我是一个受保护的关键字';
private $private='我是一个私有的关键字';
public function print(){
echo "$this->public<br/>";
echo "$this->protected<br/>";
echo "$this->private<br/>";
}
}
// 好我们继续创建子类
class classb extends classa{
public function print(){
echo "我是子类:$this->public<br/>";
echo "我是子类:$this->protected<br/>";
echo "我是子类:$this->private<br/>";
}
}
$classa=new classb();
$classa->print();
//这里我们运行看看结果,我是一个公共的关键字 输出成功 public
//我是一个受保护的关键字 输出成功 protected
//我是一个私有的 private 访问失败
?>
// 这里我发现 如果在子类中重写方法 private 是无法访问的,如果只是继承父类,但是不重写方法,private属性是可以调用访问的。原因 我还不清楚 哈哈哈 懂得大佬 指点一下。