public function test() { $foo = new Test(); $this->assertTrue($foo->bar()); $this->assertFalse($foo->baz()); }
// Foo::testPublic /** Объекты одного типа имеют доступ к элементам с модификаторами private и protected друг друга, даже если не являются одним и тем же экземпляром. Это объясняется тем, что реализация видимости элементов известна внутри этих объектов. Пример #3 Доступ к элементам с модификатором private из объектов одного типа */ class Test { private $foo; public function __construct($foo) { $this->foo = $foo; } private function bar() { echo 'Доступ к закрытому методу.'; } public function baz(Test $other) { // Мы можем изменить закрытое свойство: $other->foo = 'hello'; var_dump($other->foo); // Мы также можем вызвать закрытый метод: $other->bar(); } } $test = new Test('test'); $test->baz(new Test('other'));
private $foo; private function setfoo() { $this->foo = 0; } public function baz($other) { $other->foo = 2; var_dump($other); $other->setfoo(); var_dump($other); } } $t = new Test(); $tt = new Test(); $tt->baz($t); /*** object(Test)#2 (1) { ["foo":"Test":private]=> int(2) } object(Test)#2 (1) { ["foo":"Test":private]=> int(0) } 同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员。这是由于在这些对象的内部具体实现的细节都是已知的 ***/ //子类继承来的,只能放松或者维持权限,不能缩小。 class F { public function __construct()