Есть код: PHP: <?php class A { public function foo() { var_dump($this); } public static function bar() { var_dump($this); } } class B { public function test() { A::foo(); A::bar(); } } $b = new B(); $b->test(); ?> Кто может сказать каков будет результат. Меня например поведение PHP ввело в легкий ступор
Статический метод ничего не знает о $this. Он может обратиться только к статической переменной класса. А результатом работы будет E_STRICT и E_NOTICE. Сначала ты вызываешь не статический метод статически, а потом обращаешься из статического метода к $this.
ПХП 5.2.1 Статичесткая функция класса не имеет доступа к экземпляру($this), а класс A, видимо, получает доступ к глобальной переменной $this...
результат... В первом случае $this рассматривается как объект B, во втором как NULL Смущает первый случай
Тут кстати еще надо учесть, что если Zend Engine будет работать в режиме совместимости с 1 версией, то он будет делать так: http://php.net/static#language.variable ... references
Неожиданное поведение программы заставило найти меня метод, который я забыл прописать как статический Ошибок кстати не выдал: php5.2.0, error_reporting(E_ALL)
Да, функция, вызваная из метода не имеет доступа к $this, значит это баг конкретной реализации ООП...
Присоединяюсь, хотя разработчики php решили что так оно и должно быть. Как никак в документации пример этой конструкции есть, и поведение это описано
Да в плане реализации ООП php ваще далековат от идеала... Я лично ООП никогда бы не начал изучать по PHP. Вернее, PHP я начал изучать раньше чем VB.NET, но в вб я стал использовать хоть что-то из ООП раньше, чем в PHP.