Ответ 1
Похоже, это мой ответ: is_subclass_of
Он может принимать оба параметра в виде строк
Лучше всего объяснить на примере. Я ищу функцию "theFunctionILookFor", которая заставит код работать.
$myClassName = "someName";
$parentOrInterfaceName = "someParent";
if ( theFunctionILookFor ($myClassName)) echo "is parrent";
edit: Я пытаюсь избежать создания экземпляра класса только для выполнения этой проверки. Я хотел бы иметь возможность передавать 2 строковых параметра в функцию проверки
Похоже, это мой ответ: is_subclass_of
Он может принимать оба параметра в виде строк
Ну, во-первых: 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% уверенным)
Попробуйте is_subclass_of()
. Он может принимать оба параметра как строки. http://php.net/manual/en/function.is-subclass-of.php
Используя Reflection API, вы можете построить объект ReflectionClass используя имя класса, а также объект.
Вы можете использовать это?
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 ] )
Получает родительский имя класса для объекта или класса.
Это старый поток, но для дальнейшего использования вы можете использовать функции 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
instanceof()
обычно считается плохой практикой. См. этот раздел форума для объяснения (написанный для Java, но не определенный для него).
Таким образом, эквивалент PHP этой функции является оператором instanceof
, как в:
$a = new MyClass;
if($a instanceof MyClass) {
CODE
}
Смотрите документацию.