Php mümkün değil soyut Fabrikalar <

0 Cevap php

Ben sınıfları bir çift için bazı kod kaydetmek için soyut bir sınıf üzerinde çalışıyordu. Bu sınıflar farklı statik çağrıları yoluyla kendilerini örneğini tüm fabrikalar vardır. Ben soyut bir sınıftaki tüm bu yöntemleri koyarak bazı kod kurtarabilir.

Ancak, ben bir late static binding sorun koştu ... bizim web barındırma 5.3 kullanarak değil ya da geç, ben get_called_class erişimi yok çünkü. Ben varsa

$class = __CLASS__;
return new $class();

soyut sınıfta, __CLASS__ Ben aslında denilen sınıfını kullanmak istiyorsanız soyut sınıfın adıdır.

Ben çocuk sınıflar kendi örnekleme yöntemleri var, ve bunun için soyut üst güvenmeyin web soyut fabrikaların örneklerini gördüm. Ancak, bu durumda, soyut sınıf için tek nedeni kodu kaydetmek için, o yüzden oraya yapamam eğer, bunun değerini büyük ölçüde azalır.

Php bir çözüm var mı < 5.3? debug_backtrace()?


Edit:

Ben bir test yaptım ve debug_backtrace() çalışmaz olacak gibi görünüyor! Sanırım late static binding ihtiyaç budur sanırım.

<?

abstract class abstractFactory {
    public function create() {
            print_r(debug_backtrace());
            $class = __CLASS__;
            return new $class();
    }
}

class concreteFactory extends abstractFactory {}

$chimborazo = concreteFactory::create();

ve sonuç:

$ php test.php
Array
(
    [0] => Array
        (
            [file] => /var/www/test.php
            [line] => 13
            [function] => create
            [class] => abstractFactory
            [type] => ::
            [args] => Array
                (
                )

        )

)

Fatal error: Cannot instantiate abstract class abstractFactory in /var/www/test.php on line 7

0 Cevap