class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo "This is Myclass".PHP_EOL;
echo $this->public.PHP_EOL;
echo $this->protected,PHP_EOL;
echo $this->private,PHP_EOL;
}
}
class MyClass2 extends MyClass
{
public $public = 'Publi2c';
protected $protected = 'Protected2';
function printHello2()
{
echo $this->public.PHP_EOL;
echo $this->protected,PHP_EOL;
echo parent::$public,PHP_EOL; //这里报错了。Uncaught Error: Access to undeclared static
//property: MyClass::$public
}
}
$obj2 = new MyClass2();
$obj2->printHello2();
请问我注释这里为什么出错了?
子类继承了父类,所以那个属性就是子类的对象实例的属性了。
没错,非静态属性是属于对象实例的,不是属于类的,所以不分子类父类。
静态属性才是属于类的,才能通过
parent::
、static::
、self::
这些关键字来访问。方法也是类似的。