我正在用 PHP 修改我的 OOP 概念。我在这里有一个简单的 php 代码来练习可见性。
当我在 Big_Animal 中将 $name 声明为私有时,
1)为什么当我尝试从类外部为 $name 分配不同的值(即 $lion->name="King")时它不会引发错误?
2)为什么当我尝试在 Lion 类中重新分配 $name 时它不会引发错误(即 $this->name="John")。
据我所知,我很困惑,私有属性只能在定义属性的类中访问。
我不清楚的另一件事是受保护的属性。据我了解,受保护的属性只能在类本身及其子类中访问。它的孙子类可以访问它吗?
谢谢你。
<?php
abstract class Big_Animal{
private $name="Mary";
abstract public function Greet();
public function Describe(){
return "name: ".$this->name;
}
public function __set($name,$value){
$this->name=$value;
}
public function __get($name){
return $this->name;
}
}
class Lion extends Big_Animal{
public function Greet(){
$this->name="John"; //no error for this
return " roar!";
}
public function Describe(){
return parent::Describe()." I'm a Lion!";
}
}
$lion = new Lion();
$lion->name="King"; //no error for this
echo $lion->Describe();
echo $lion->Greet();
?>