/ / Krótsza droga do instancji klasy PHP - php, class

Krótszy sposób tworzenia klasy PHP - php, class

Powiedz, że mam zajęcia Core() gdzie da mi instancję różnych klas w zależności od jakiejś inicjalizacji. Powiedz, że po jego zainicjowaniu dostaję lekcje, a potem chcę to zrobić. Tym się właśnie zajmuję:

$core = new Core();
// $core is further initiated
$api = $core->getClass(); // This returns, for instance class Library_MyClass
$class = new $api();

Czy istnieje sposób na połączenie dwóch ostatnich kroków w jeden? Na przykład mówię coś takiego $class = new $core->getClass()()? Oczywiście to, co napisałem, jest złe, ale tego właśnie chciałem! Czy to jest możliwe?

Odpowiedzi:

1 dla odpowiedzi № 1

Jeśli jest to jakaś fabryka, możesz zrobić coś takiego:

class Core
{
public function getClass()
{
return new Library_MyClass();
}
}

$core = new Core();
$class = $core->getClass();

Jednak biorąc pod uwagę nazwę klasy Core Podejrzewam, że niektóre naruszasz Zasady SOLID tutaj.


0 dla odpowiedzi nr 2

Możesz skorzystać z korzystania z iniekcja zależności (biorąc pod uwagę niewielką aktualizację zastosowaną w przykładzie PeeHaa)

class Core
{
public function getClass($api)
{
return new $api();
}
}

$core = new Core();
$apiInstance = $core->getClass("Library_MyClass");

W ten sposób nie będziesz musiał aktualizować Core klasa, ilekroć chcesz, aby zapewnić wystąpienie innej klasy biblioteki.