PHP get_ called_class
get_ called_class — Име на клас, получено с помощта на късно статично свързване
Връща името на класа, от който е извикан статичният метод.
Върнати стойности
Връща името на класа. ВръщаFALSE, ако се извика извън класа.
Пример #1 Пример за използванеget_ called_class()
class foo статична публична функция test() var_dump(get_ called_class()); > >
лентата на класа разширява foo >
foo::test(); лента::тест();
Резултатът от изпълнението на този пример:
Вижте също
- get_parent_class() – Връща името на родителския клас на обект или клас
- get_class() - Връща името на класа, към който принадлежи обектът
- is_subclass_of() - Проверява дали даден обект съдържа посочения клас в дървото на предците си или директно го имплементира
Допринесени от потребителя бележки 8 бележки
От PHP 5.5 можете също да използвате "static::class", за да получите името на извикания клас.
class Bar публична статична функция test() var_dump(static::class); > >
клас Foo разширява Bar
string(3) "Foo" string(3) "Bar"
get_ called_class() в обхвати на затваряне:
АБСТРАКТЕН КЛАС Base protected static $stub = [ 'baz' ];
//окончателна публична функция boot() статична публична функция boot() печат __METHOD__. '-> ' . get_ called_class(). PHP_EOL ;
array_walk (static:: $stub, function() print __METHOD__. '-> '. get_ called_class (). PHP_EOL; >); >
публична функция __construct() self::boot(); отпечатайте __METHOD__. '-> ' . get_ called_class(). PHP_EOL ;
array_walk(статичен::$stub, функция() отпечатайте __METHOD__. '-> ' . get_ called_class (). PHP_EOL ; >); > >
КЛАС Sub EXTENDS Base >
// статично зареждане База :: зареждане (); печат PHP_EOL; // Base::boot -> Основа // Основа:: -> База
Sub :: boot (); печат PHP_EOL; // Base::boot -> Sub // Основа:: -> База
нов суб; // Base::boot -> Sub // Основа:: -> Base // Base->__construct -> Sub // Base-> -> Под
// зареждане на екземпляр нов под; // Base->boot -> Sub // Base-> -> Sub // Base->__construct -> Sub // Base-> -> Под ?>
Възможно е да се напише напълно самостоятелен базов клас Singleton в PHP 5.3 с помощта на get_ called_class.
абстрактен клас Singleton
защитена функция __construct () < >
крайна публична статична функция getInstance () < статичен $aoInstance = array();
if (! isset ( $aoInstance [ $ calledClassName ])) < $aoInstance [ $ calledClassName ] = нов $ calledClassName (); >
връща $aoInstance [ $ calledClassName ]; >
крайна частна функция __clone () < > >
клас DatabaseConnection разширява Singleton
защитена функция __construct () < // @todo Свързване към базата данни >
публична функция __destruct () < // @todo Прекъснете връзката към базата данни > >
$oDbConn = нова DatabaseConnection (); // Фатална грешка
$oDbConn = DatabaseConnection :: getInstance (); // Връща единичен екземпляр ?>
Ако извикате статична функция getInstance(), за да създадете екземпляр на клас от друг клас, тази функция трябва да е статична, ако не е статична, оригиналното име на извикващия клас, а не на текущияклас се връща.
клас a функция getXName() return x::getClassName(); > функция getXStaticName() връща x :: getStaticClassName(); >
клас b разширява a >
клас x публична функция getClassName() връща get_ called_class(); > публична статична функция getStaticClassName() връща get_ called_class(); > >
ехо $a -> getXName(); // ще върне "a" echo $b -> getXName(); // ще върне "b"
ехо $a -> getXStaticName(); // ще върне "x" echo $b -> getXStaticName(); // ще върне "x"