Подтвердить что ты не робот

PHP: instanceof эквивалент для строкового представления classname

Лучше всего объяснить на примере. Я ищу функцию "theFunctionILookFor", которая заставит код работать.

$myClassName = "someName";
$parentOrInterfaceName = "someParent";
if ( theFunctionILookFor ($myClassName))  echo "is parrent";

edit: Я пытаюсь избежать создания экземпляра класса только для выполнения этой проверки. Я хотел бы иметь возможность передавать 2 строковых параметра в функцию проверки

4b9b3361

Ответ 2

Ну, во-первых: instanceof - хорошая практика, в первую очередь это намного быстрее, во-вторых, это просто посмотреть, и больше OOP.. второй: сделав этот образец, должно быть ясно, что существует причина, по которой "instanceof" не работает с строками, потому что он может использоваться как "идентификатор" для класса.

 $temp ="tester";
 $object  = new sub();
 var_dump($object instanceof $temp); //prints "true" on php 5.3.8

 class tester{}

 class sub extends \tester{

 }

также пробовали в большем масштабе, чем этот простой случай. и причины, он работает на интерфейсах. Вам просто нужна переменная, чтобы содержать абсолютное имя класса (включая пространство имен.. если вы хотите быть на 100% уверенным)

Ответ 5

Вы можете использовать это?

http://www.php.net/manual/en/function.get-parent-class.php

На странице:

get_parent_class

(PHP 4, PHP 5, PHP 7)
get_parent_class - Извлекает родительский класс имя для объекта или класса

Описание

string get_parent_class ([ mixed $object ] )

Получает родительский имя класса для объекта или класса.

Ответ 6

Это старый поток, но для дальнейшего использования вы можете использовать функции is_a и is_subclass_of, чтобы сделать это более эффективным способом. Нет необходимости создавать что-либо, вы можете просто передать свою строку, как:

if (is_subclass_of($myObject, 'SomeClass')) // is_a(...)
  echo "yes, \$myObject is a subclass of SomeClass\n";
else
  echo "no, \$myObject is not a subclass of SomeClass\n";

Документы PHP:

http://www.php.net/manual/en/function.is-a.php
http://www.php.net/manual/en/function.is-subclass-of.php

Ответ 7

instanceof() обычно считается плохой практикой. См. этот раздел форума для объяснения (написанный для Java, но не определенный для него).

Таким образом, эквивалент PHP этой функции является оператором instanceof, как в:

$a = new MyClass;

if($a instanceof MyClass) {
  CODE
}

Смотрите документацию.