sınıfları ve statik yöntemlerle garip php davranış

0 Cevap

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?

0 Cevap