class Fruit { protected $blend; public function WillItBlend() { return $this->blend; } public static function MakeFruit() { $objF = new Fruit(); $objF->blend = true; return $objF; } } $fruit = Fruit::MakeFruit(); echo $fruit->WillItBlend();
为什么这条线工作
$objF->blend = true;而不是抛出致命错误?
答案 0 :(得分:2)
可见性修饰符在类级别工作,而不是在对象级别。这也意味着同一类的对象可以访问彼此的私有位。
PHP交互式提示示例:
php > class Foo {
private $bar;
public function __construct() { $this->bar = rand(1, 100); }
public function baz($another_foo) { echo $another_foo->bar, '-', $this->bar; }
}
php > $a = new Foo();
php > $b = new Foo();
php > $a->baz($b);
86-70
答案 1 :(得分:1)
$objF
是类Fruit
的实例。
$objF->blend
正在课堂上使用。 Protected
属性可以在类本身中使用。
如果您在课外使用$fruit->blend;
所以允许这样做。
答案 2 :(得分:0)
因为你是从班级内部访问的,如果你要从班级外面打电话
$fruit = Fruit::MakeFruit();
echo $fruit->WillItBlend();
echo $fruit->blend;
它会引发致命的错误。