【发布时间】:2014-10-25 09:41:09
【问题描述】:
我最近开始使用 PHP 进行 OOP,并且我正在研究可见性概念(公共、受保护、私有)。在这里,我对受保护的可见性感到困惑。受保护的成员只能在声明类或子类或子类中访问。我在 PHP 的网站上有这个例子:
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
class MyClass2 extends MyClass
{
// We can redeclare the public and protected method, but not private
protected $protected = 'Protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj2->public; // Works
echo $obj2->protected; // Fatal Error
echo $obj2->private; // Undefined
$obj2->printHello(); // Shows Public, Protected2, Undefined
在此代码的倒数第三行 (echo $obj2->protected; // Fatal Error) 中,它给出了致命错误。但是在这种情况下,受保护的变量不是继承到 MyClass2 的子类中吗?那么为什么会出现这个致命错误呢?有人可以请教我吗?
【问题讨论】:
-
您正在尝试访问两个类范围之外的
protected成员。 -
echo $obj2->protected; // Fatal Error这一行在两个类之外。那它应该如何工作?它只能以这种方式与公众一起使用 -
并且您已经在
printHello方法中证明了您的孩子可以访问父母的受保护财产。 -
@Hanky웃Panky 他只是直接从 PHP 手册中复制粘贴
-
好的,我知道了。谢谢。受保护的变量成为继承类的成员,我们不能直接在其中回显它,而是借助它在 MyClass2 类的 printHello() 函数中执行的函数。再次感谢。