PHP get_called_class () alternatif

0 Cevap php

Ben altında çalışan alt sınıf olduğunu bilmek gerekiyor kodunu içeren bir Özet PHP, süper, var.

class Foo {
    static function _get_class_name() {
        return get_called_class();
        //works in PHP 5.3.*, but not in PHP 5.2.*
    }

    static function other_code() {
        //needs to know
        echo self::_get_class_name();
    }
}

class Bar extends Foo {
}

class FooBar extends Foo {
}

Bar::other_code(); // i need 'Bar'
FooBar::other_code(); // i need 'FooBar'

Ben function get_called_class() denilen eğer bu işe -. Ancak, bu kod PHP sürüm 5.2 çalıştırmak olacak * o işlevi kullanılamaz değil yani.

Orada get_called_class() Orada bazı özel PHP uygulamaları var, ama hepsi, debug_backtrack() geçiyor bir dosya adı ayrıştırma & güveniyor satır numarası ve (kodlayıcı PHP 5.2 yansıması olduğunu farkında değil gibi) sınıf adını bulmak için bir regex çalışıyor. Bu kod, yani php ile çalıştırmak için mümkün olmalıdır. değil sadece. php dosyasından. (Bu bir php -a kabuk, ya da bir eval() açıklamaya çalışmak gerekiyor.)

İdeal olarak, bir çözüm alt sınıflar eklenecek herhangi bir kod gerektirmeden işe ... Ama görebiliyorum sadece potansiyel çözüm açıkça iğrenç kesmek her alt sınıfı, aşağıdaki kodu ekliyor:

class FooBar extends Foo {
    static function _get_class_name() {
        return 'FooBar';
    }
}

EDIT: Bu bile işe görünmüyor, bekleyin. Bu benim son çare olurdu. Herkes bana gerekli işlevselliği almak istiyorum bu çözüm için benzer bir şey düşünebilirsiniz. Yani., Ben onun sınıf adı ne onu söylüyorum her altsınıfa one fonksiyon ya da değişkeni eklemek için beni gerektiren bir çözümü kabul etmeye hazırım. Ne yazık ki, o self::_get_class_name() üst sınıftan çağıran alt sınıf bunu geçersiz olsa bile, üst sınıf 'uygulaması çağırır gibi görünüyor.

0 Cevap