PHP get_called_class
get_called_class - Ім'я класу, отримане за допомогою пізнього статичного зв'язування
Повертає ім'я класу, з якого викликано статичний метод.
Значення, що повертаються
Повертає ім'я класу. ПовертаєFALSE, якщо було викликано поза класом.
Приклад #1 Приклад використанняget_called_class()
class foo static public function test() var_dump(get_called_class()); > >
class bar extends foo >
foo::test(); bar :: test();
Результат виконання цього прикладу:
Дивіться також
- get_parent_class() - Повертає ім'я батьківського класу для об'єкта чи класу
- get_class() - Повертає ім'я класу, до якого належить об'єкт
- is_subclass_of() - Перевіряє, чи містить об'єкт у своєму дереві предків зазначений клас або прямо реалізує його
User Contributed Notes 8 notes
Як PHP 5.5 ви можете також використовувати "статичний :: class" для того, щоб отримати назву з названої категорії.
class Bar public static function test () var_dump (static::class); > >
class Foo extends Bar
string(3) "Foo" string(3) "Bar"
get_called_class() in closure-scopes:
ABSTRACT CLASS Base protected static $stub = ['baz'];
//final public function boot() static public function boot() print __METHOD__ . '-> '. get_called_class(). PHP_EOL;
array_walk (static:: $stub , function() print __METHOD__ . '-> ' . get_called_class (). PHP_EOL ; >); >
public function __construct() self::boot(); print __METHOD__ . '-> '. get_called_class(). PHP_EOL;
array_walk (static: $stub , function() print __METHOD__ . '-> '. get_ called_class (). PHP_EOL ; >); > >
CLASS Sub EXTENDS Base >
// статичне завантаження Base :: boot (); надрукувати 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-> -> Sub ?>
У PHP 5.3 можна написати повністю самостійний базовий клас Singleton за допомогою get_ called_class.
абстрактний клас Singleton
захищена функція __construct () < >
кінцева публічна статична функція getInstance () < static $aoInstance = array();
if (! isset ( $aoInstance [ $ calledClassName ])) < $aoInstance [ $ calledClassName ] = новий $ calledClassName (); >
return $aoInstance [ $ calledClassName ]; >
кінцева приватна функція __clone () < > >
клас DatabaseConnection розширює Singleton
захищена функція __construct () < // @todo Підключення до бази даних >
публічна функція __destruct () < // @todo Розірвати підключення до бази даних > >
$oDbConn = нове підключення до бази даних (); // Критична помилка
$oDbConn = DatabaseConnection :: getInstance (); // Повертає один екземпляр ?>
Якщо ви викликаєте статичну функцію getInstance(), щоб створити екземпляр класу з іншого класу, ця функція має бути статичною, якщо вона не є статичною, оригінальне ім’я класу, що викликає, а не поточне ім’я.class get returned.
class a function getXName() return x::getClassName(); > function getXStaticName() return x::getStaticClassName(); >
class b extends a >
class x public function getClassName() return get_called_class(); > public static function getStaticClassName() return get_called_class(); > >
echo $a -> getXName(); // will return "a" echo $b -> getXName(); // will return "b"
echo $a -> getXStaticName(); // will return "x" echo $b -> getXStaticName(); // will return "x"