0
Ich versuche initialize()
Methode für jede Klasse auszuführen, die von einer Basisklasse erweitert, unter Verwendung late static bindings:für jedes Kind Klasse
class BaseClass
{
protected static $initialized = false;
public static function find()
{
static::initialize();
//TODO search entries and return as instances...
}
protected static function initialize()
{
if (static::$initialized)
return;
echo 'Initializing ', static::class, '<br/>';
//do important stuff
static::$initialized = true;
}
}
class Child1 extends BaseClass {}
class Child2 extends BaseClass {}
$initialized
Eigenschaft wird über die Verlängerung Klassen geteilt.
Child1::find(); //Outputs 'Initializing Child1', as expected
Child2::find(); //Doesn't execute 'initialize()' because
//$initialized property was set to true by Child1
//Expected: 'Initializing Child2'
Gibt es einen einfachen Weg, um es zu erreichen?
Änderung '$ initialized' auf ein Array, in dem Sie initialisierten Klassen hinzufügen und überprüfen Sie die Existenz von die (Child-) Klasse mit 'in_array()' – dognose