Portál AbcLinuxu, 9. května 2025 00:12
... public function selClass(){ return 'Home()'; } ... new $foo->selClass();zkoušel jsem i return string('Home()'); ale výsledek stejný. poradí někdo? Díky
<?php class Foo { public function selClass() { return 'Home'; } } $foo = new Foo(); $class = $foo->selClass(); $home = new $class();
<?php class Foo { public function selClass(){ return new Home(); } } $foo = new Foo(); $home = $foo->selClass();
new $class();Tohle se hodí, pokud to má být napevno zadrátované v kódu:
return new Home();Oba případy mají své oprávněné užití. Výhodo druhého řešení je fungující autocompletion v editoru kódu. To v prvním případě nebude fungovat, protože editor neví, co bude obsahem proměnné.
false && $oIntance = new BaseImplementation(); $oIntance = Factory::getInstance('TuhleImplementaciChci');a on si pak Eclipse myslí, že $oIntance je typu BaseImplementation, ale je to jen takový hack.
/* @var $oIntance TuhleImplementaciChci*/ $oIntance = Factory::getInstance('TuhleImplementaciChci');
/** * @return Vozidlo */ public function getInstance(string $className){ return new $className(); }...ale takto nefunguje (bez ohledu na verzi Eclipse či PDT):
/** @return Vozidlo */ public function getInstance(string $className){ return new $className(); }Je to tak normální?
$object = (new ReflectionClass($foo->selClass()))->newInstance()
chceš-li vytvořit proměnnou s názvem, a ten název vrací instance, imho máš to špatně vymyšlenýNikoli - to on nechce. Nejde o název ale o typ proměnné. On chce vytvořit proměnnou daného (předem neznámého) typu. Pokud by šlo o název, musel by tam být ten dolar zdvojený:
$$var = 'x';
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.