为什么 PHP 私有变量在扩展 class 上工作?
Why is PHP private variables working on extended class?
当我尝试从扩展 class 而不是基础 class 设置 属性 的值时,它不应该产生错误吗?
<?php
class first{
public $id = 22;
private $name;
protected $email;
public function __construct(){
echo "Base function constructor<br />";
}
public function printit(){
echo "Hello World<br />";
}
public function __destruct(){
echo "Base function destructor!<br />";
}
}
class second extends first{
public function __construct($myName, $myEmail){
$this->name = $myName;
$this->email = $myEmail;
$this->reveal();
}
public function reveal(){
echo $this->name.'<br />';
echo $this->email.'<br />';
}
}
$object = new second('sth','aaa@bbb.com');
?>
私有变量在子类中不可访问。这就是访问修饰符 protected
的用途。这里发生的事情是,当您访问一个不存在的变量时,它会为您创建一个默认访问修饰符 public
.
这是向您展示状态的 UML:
请注意:子类仍然可以访问其超类中的所有 public
和 protected
方法和变量 - 但不在 UML 图中!
当我尝试从扩展 class 而不是基础 class 设置 属性 的值时,它不应该产生错误吗?
<?php
class first{
public $id = 22;
private $name;
protected $email;
public function __construct(){
echo "Base function constructor<br />";
}
public function printit(){
echo "Hello World<br />";
}
public function __destruct(){
echo "Base function destructor!<br />";
}
}
class second extends first{
public function __construct($myName, $myEmail){
$this->name = $myName;
$this->email = $myEmail;
$this->reveal();
}
public function reveal(){
echo $this->name.'<br />';
echo $this->email.'<br />';
}
}
$object = new second('sth','aaa@bbb.com');
?>
私有变量在子类中不可访问。这就是访问修饰符 protected
的用途。这里发生的事情是,当您访问一个不存在的变量时,它会为您创建一个默认访问修饰符 public
.
这是向您展示状态的 UML:
请注意:子类仍然可以访问其超类中的所有 public
和 protected
方法和变量 - 但不在 UML 图中!