PHP nesne tipi argümanlar varsayılan bir değer vermek

1 Cevap php

Aklımda testability ile bir PHP uygulama yazıyorum, bu yüzden benim sınıflar hep Bağımlılık Enjeksiyon desen bakımından bağlı oldukları "işbirlikçi nesneler", onların kurucular sormak.

Bu şekilde, benim birim testleri mocks veya test uygulamaları geçmek mümkün.

Ne elde etmek istiyorum rağmen, her işbirlikçisi için varsayılan bir uygulama sınıfını başlatır bir geri dönüş mekanizmasını tetiklemek amacıyla, yapıcı argümanlar geçirilen null değerleri ile bir sınıf örneğini muktedir olmaktır.

Nesne tipi parametreleri PHP varsayılan bir değer verilemez, çünkü kurucusu içine yapmak zorunda. Aşağıdaki kod Şu anda kullanıyorum yaklaşımın bir örneğidir:

class Engine
{
    private $loader;
    private $logger;

    public function __construct(ResourceLoader $loader = null, Logger $logger = null)
    {
        if ($loader == null) $loader = new DefaultResourceLoader;
        if ($logger == null) $logger = new DefaultLogger;

        $this->loader = $loader;
        $this->logger = $logger;
    }
}

Buna ne diyorsun? Ben bunun yerine bir IoC kapsayıcı kullanmak veya nesne-tipi argümanlar varsayılan bir değeri veren başka bir yolu var mıdır?

1 Cevap

Tabii ki daha iyi iş yapmak için bir IoC / DIP konteyner kullanmak istiyorum. Yukarıdaki kodu (ifadeler varsa) sınıfların bağlanmasını artırır. Client sınıf (Motor) yükleyici ve logger rolleri uygulanması ne umurumda değil gerekir. İşte bunu bilmek fabrika ya da DIP konteyner iş. Kodunuzu bir beton sınıfı adını koyarak ve, (çevik) daha az yeniden kullanılabilir ve böylece daha az sıçramalı kodunuzu daha az esnek hale birlikte sınıfları bağlamak tarafından.