0

Эквивалент instanceof для строки, представляющей имя класса

12

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

$myClassName = "someName";
$parentOrInterfaceName = "someParent";
if (theFunctionILookFor($myClassName)) {
    echo "это родитель";
}

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

5 ответ(ов)

0

Похоже, это мой ответ: is_subclass_of

Эта функция может принимать оба параметра в виде строк.

Документация: is_subclass_of

0

Попробуйте использовать is_subclass_of(). Эта функция может принимать оба параметра в виде строк. Более подробно вы можете ознакомиться с её документацией по следующей ссылке: http://php.net/manual/ru/function.is-subclass-of.php.

0

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

if (is_subclass_of($myObject, 'SomeClass')) // is_a(...)
  echo "да, \$myObject является подклассом SomeClass\n";
else
  echo "нет, \$myObject не является подклассом SomeClass\n";

Документация PHP:

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

Вы можете использовать следующую функцию:

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

На этой странице вы найдете информацию о функции get_parent_class, которая доступна в PHP 4, 5 и 7.

Эта функция выполняет следующее:

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

Описание:

string get_parent_class ([ mixed $object ] )

Функция возвращает имя родительского класса для указанного объекта или класса. Если объект или класс не имеют родительского класса, функция вернет пустую строку. Это может быть полезно, если вам нужно проверить, каким образом классы наследуются в вашей иерархии.

0

Может, это старая проблема, но она все еще актуальна. Вот лучшее решение, которое я нашел:

class ProductAttributeCaster
{
    public function cast(mixed $value): mixed
    {
        if ($value instanceof ($this->castTo())) {
            // выполняем необходимые действия
        }

        return $value;
    }

    function castTo(): string
    {
        return ProductAttribute::class;
    }
}

В этом коде мы определяем класс ProductAttributeCaster, который содержит метод cast(), предназначенный для приведения значения к определенному типу. Метод castTo() возвращает строку с полным именем класса ProductAttribute, что позволяет использовать instanceof для проверки, соответствует ли переданное значение ожидаемому типу. Если оно соответствует, вы можете добавить необходимую логику в секции // выполняем необходимые действия.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь