php проверить принадлежность к классу

Оператор проверки типа

Оператор instanceof используется для определения того, является ли текущий объект экземпляром указанного класса.

Пример #1 Использование instanceof с классами

class NotMyClass
<
>
$a = new MyClass ;

Результат выполнения данного примера:

Оператор instanceof также может быть использован для определения, наследует ли определенный объект какому-либо классу:

Пример #2 Использование instanceof с наследуемыми классами

class MyClass extends ParentClass
<
>

Результат выполнения данного примера:

Для проверки непринадлежности объекта некоторому классу, используйте логический оператор not.

Пример #3 Использование instanceof для проверки того, что объект не является экземпляром класса

Результат выполнения данного примера:

Ну и наконец, instanceof может быть также использован для проверки реализации объектом некоторого интерфейса:

Пример #4 Использование instanceof для класса

class MyClass implements MyInterface
<
>

Результат выполнения данного примера:

Хотя instanceof обычно используется с прямо указанным именем класса, он также может быть использован с другим объектом или строковой переменной:

Пример #5 Использование instanceof с другими переменными

class MyClass implements MyInterface
<
>

$a = new MyClass ;
$b = new MyClass ;
$c = ‘MyClass’ ;
$d = ‘NotMyClass’ ;

Результат выполнения данного примера:

Пример #6 Пример использования оператора instanceof для проверки других переменных

Результат выполнения данного примера:

Есть несколько подводных камней, которых следует остерегаться. До версии PHP 5.1.0, instanceof вызывал __autoload() если имя класса не существовало. Вдобавок, если класс не был загружен, происходила фатальная ошибка. Это можно было обойти с помощью динамической ссылки на класс или использования строковой переменной с именем класса:

Пример #7 Избежание поиска класса и фатальных ошибок с instanceof в PHP 5.0

Результат выполнения данного примера:

Источник

Php проверить принадлежность к классу

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

is_a — Проверяет, принадлежит ли объект к данному классу или является ли этот класс одним из его родителей

Описание

Проверяет, принадлежит ли объект object_or_class к данному классу или является ли этот класс одним из его родителей.

Список параметров

Имя класса или объект

Возвращаемые значения

Примеры

Пример #1 Пример использования is_a()

// создание нового объекта
$WF = new WidgetFactory ();

Пример #2 Использование оператора instanceof

Смотрите также

User Contributed Notes 7 notes

Please note that you have to fully qualify the class name in the second parameter.

A use statement will not resolve namespace dependencies in that is_a() function.

namespace foo \ bar ;

class A <>;
class B extends A <>;
?>

namespace har \var;

use foo \ bar \ A ;
$foo = new foo \ bar \ B ();

Be careful! Starting in PHP 5.3.7 the behavior of is_a() has changed slightly: when calling is_a() with a first argument that is not an object, __autoload() is triggered!

In practice, this means that calling is_a(’23’, ‘User’); will trigger __autoload() on «23». Previously, the above statement simply returned ‘false’.

Whether this change is considered a bug and whether it will be reverted or kept in future versions is yet to be determined, but nevertheless it is how it is, for now.

At least in PHP 5.1.6 this works as well with Interfaces.

interface test <
public function A ();
>

class TestImplementor implements test <
public function A () <
print «A» ;
>
>

$testImpl = new TestImplementor ();

is_a returns TRUE for instances of children of the class.

class Dog extends Animal
<>

In this example is_a($test, «Animal») would evaluate to TRUE as well as is_a($test, «Dog»).

This seemed intuitive to me, but did not seem to be documented.

It took some time to find out how the last parameter should be used. Please consider the following example

I just want to point out that you can replace «is_a()» function with the «instanceof» operator, BUT you must use a variable to pass the class name string.

This will work:
= new \ stdClass ();
$class_name = ‘\stdClass’ ;

Источник

Артём Санников

Языки программирования
Базы данных
Программное обеспечение
Операционные системы
Мобильная разработка
Менеджеры пакетов
Сетевые технологии
CMS системы
Математика
SEO продвижение
Социальные сети
Психология
Хостинг провайдер
Смартфоны

Оператор проверки типа в PHP

Оператор instanceof используется для определения того, является ли текущий объект экземпляром указанного класса.

Пример #1 Использование instanceof с классами

Результат выполнения данного примера:

Оператор instanceof также может быть использован для определения, наследует ли определенный объект какому-либо классу:

Пример #2 Использование instanceof с наследуемыми классами

Результат выполнения данного примера:

Для проверки непринадлежности объекта некоторому классу, используйте логический оператор not.

Пример #3 Использование instanceof для проверки того, что объект не является экземпляром класса

Результат выполнения данного примера:

Ну и наконец, instanceof может быть также использован для проверки реализации объектом некоторого интерфейса:

Пример #4 Использование instanceof для класса

Результат выполнения данного примера:

Хотя instanceof обычно используется с прямо указанным именем класса, он также может быть использован с другим объектом или строковой переменной:

Пример #5 Использование instanceof с другими переменными

Результат выполнения данного примера:

Оператор instanceof не генерирует никаких ошибок, если проверяемая переменная не является объектом. В этом случае он просто возвращает FALSE. Константы, тем не менее, не допускаются.

Пример #6 Пример использования оператора instanceof для проверки других переменных

Результат выполнения данного примера:

Есть несколько подводных камней, которых следует остерегаться. До версии PHP 5.1.0, instanceof вызывал __autoload() если имя класса не существовало. Вдобавок, если класс не был загружен, происходила фатальная ошибка. Это можно было обойти с помощью динамической ссылки на класс или использования строковой переменной с именем класса:

Пример #7 Избежание поиска класса и фатальных ошибок с instanceof в PHP 5.0

Результат выполнения данного примера:

Оператор instanceof был добавлен в PHP 5. До этого времени использовалась функция is_a(), но позже is_a() была помечена устаревшей в пользу instanceof. Учтите, что с версии PHP 5.3.0, is_a() больше не является устаревшей.

Источник

Php проверить принадлежность к классу

Ознакомьтесь также с описанием функций get_class() и is_a().

Коментарии

use this for cross-version development.

Negated instanceof doesn’t seem to be documented. When I read instanceof I think of it as a compairson operator (which I suppose it’s not).

instanceof is a binary operator, and so used in binary terms like this

terma instanceof termb

And a term never consists of an operator, only! There is no such construct in any language (please correct me!). However, instanceof doesn’t finally support nested terms in every operand position («terma» or «termb» above) as negation does:

So back again, did you ever write

to test equivalence?

Cross version function even if you are working in php4
(instanceof is an undefined operator for php4)

Response to vinyanov at poczta dot onet dot pl:

You mentionned «the instanceof operator will not accept a string as its first operand». However, this behavior is absolutely right and therefore, you’re misleading the meaning of an instance.

I believe asking if «a ClassA belongs to a ClassB» (or «a ClassA is a class of (type) ClassB») or even «a ClassA is (also) a ClassB» is more appropriate. But the first is not implemented and the second only works with objects, just like the instanceof operator.

Finally, here is a fast (to me) sample function code to verify if an object or class:

The PHP parser generates a parse error on either of the two lines that are commented out here.
Apparently the ‘instanceof’ construct will take a string variable in the second spot, but it will NOT take a string. lame

Example #5 could also be extended to include.

var_dump($a instanceof MyInterface);

The new result would be

You can use «self» to reference to the current class:

It seems like instanceOf is using a string comparison. Longer class names take longer to check in conditional statements

if ($f instanceOf HelloWorldTestClass)

is much slower than

if ($f instanceOf HWT)

Sometimes you want to typehint objects INSIDE an array, but I think you can’t.

Instead, you can use this function to check the classes inside this array:

If you want to test if a classname is an instance of a class, the instanceof operator won’t work.

I don’t see any mention of «namespaces» on this page so I thought I would chime in. The instanceof operator takes FQCN as second operator when you pass it as string and not a simple class name. It will not resolve it even if you have a `use MyNamespace\Bar;` at the top level. Here is what I am trying to say:

SIMPLE, CLEAN, CLEAR use of the instanceof OPERATOR

?>

Now instantiate a few instances of these types. Note, I will put them in an array (collection) so we can iterate through them quickly.

?>

$myCollection[0] = 123
$myCollection[1] = abc
$myCollection[2] = Hello World!
$myCollection[3] = Circle [radius=3]
$myCollection[4] = Circle [radius=4]
$myCollection[5] = Circle [radius=5]
$myCollection[6] = Point [x=6, y=6]
$myCollection[7] = Point [x=7, y=7]
$myCollection[8] = Point [x=8, y=8]

Checking an object is not an instance of a class, example #3 uses extraneous parentheses.

You are also able to compare 2 objects using instanceOf. In that case, instanceOf will compare the types of both objects. That is sometimes very useful:

$a = new A ;
$b = new B ;
$a2 = new A ;

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *