Вопрос

Noticed something about PHP's classes and I don't know if it's a bug or why it works, this is the code:

<?php
class A {
    private $prop = 'value';

    public function fun()
    {
        $obj = new A;
        $obj->echoProp();
    }

    private function echoProp()
    {
        echo 'Prop has value: '.$this->prop;
    }
}

$obj = new A;
$obj->fun();

And the result isn't an error as I was expecting since I'm calling a private method (tested on PHP 5.3.10-1ubuntu3.7 with Suhosin-Patch). The result is "Prop has value: value"

Это было полезно?

Решение

At the php documentation http://www.php.net/manual/en/language.oop5.visibility.php#language.oop5.visibility-other-objects it says:

Visibility from other objects

Objects of the same type will have access to each others private and protected members even though they are not the same instances. This is because the implementation specific details are already known when inside those objects.

So this isn't a bug but a wanted feature of php.

Другие советы

As long as you're in the class, you can call your class' private methods on any instance.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top