Ben (benim için) şaşırtıcı PHP cilvesi / hata / özelliğini kullanan bir uygulama korumak. Bu kodu düşünün:
<?php
class Bar {
// called statically
public function doStuff() {
print_r($this);
}
}
class Foo {
public function main() {
Bar::doStuff();
}
}
$foo = new Foo();
$foo->main();
PHP 5.2.x Koşu, çıktı:
Foo Object ( )
Bar::doStuff() statik denir rağmen bu araçlar, hala erişimi olan $this burada $this Bar::doStuff() denilen nesneye bir referanstır . Yakın zamana kadar bu davranışı karşısında gelmedi. Bana sorarsanız üretim kodunda bu güvenmek oldukça kötü.
Bir static eklemek ve yöntem imzası değiştirirseniz public static function doStuff() o atar, bir E_NOTICE: Undefined variable: this - bana doğru gibi görünüyor.
Herkes bu davranışı için bir açıklama var?