Portál AbcLinuxu, 5. listopadu 2025 01:47
...
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.