Php instanceof не работает

Форум PHP программистов ► PHP практикум ► PHP для начинающих

Пользователь

Профиль
Группа: Форумчанин

Сообщений: 96
Пользователь №: 28856
На форуме:
Карма:

Не хочет выводить ничего, что делать?

Гм а что вы ожидаете от этого кода? и что значит строка:

Вы ничего в ней не упустили?

Подписаться на тему
Уведомление на e-mail об ответах в тему, во время Вашего отсутствия на форуме.

Подписка на этот форум
Уведомление на e-mail о новых темах на форуме, во время Вашего отсутствия на форуме.

Скачать/Распечатать тему
Скачивание темы в различных форматах или просмотр версии для печати этой темы.

Источник

PHP InstanceOf работает локально, но не на хост-сервере

У меня проблема с оператором PHP 7 instanceof, который происходит только при определенных условиях.

Кажется, что instanceof работает локально на моей машине dev (MAMP Pro под управлением PHP 7.0.13), но не на моем Hosted Server (HostEurope, PHP 7).

Я пробовал следующее:

понижение до PHP 5.6 вместо использования is_a Использование полного имени, например \Site\Ad

но все они проявляют одинаковое поведение.

Я пробовал Googling «PHP instanceof not working» и его варианты, но я не нашел ничего подходящего.

Мне было интересно, если кто-нибудь испытал что-то похожее или возможные решения, чтобы попробовать?

Обновление: это код, который вызывает вышеуказанный класс AdFactory

Оказывается, была ошибка в 1 из вызовов API, которые я делал на CMS Processwire.

И мой локальный и серверный экземпляр Processwire был не той же версией, которая была для меня новостью. Обычно я синхронизирован, включая любые модули, которые я использую.

Я также подозреваю, что моя нулевая проверка неверна PHP, чтобы добавить к проблеме.

instanceof — это языковая конструкция, которая настолько важна для PHP, что де-факто невозможно не работать должным образом.

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

Скорее всего, у вас есть папка, которая не читается на вашем онлайн-сервере и просто получает null значение вместо ожидаемого объекта вдоль вашего кода. Спросите себя: «Если это не тот объект, который я ожидаю, что еще?»

Читайте также:  Меня вчера сломался телевизор

Используйте var_dump() или printf() чтобы выяснить, что на самом деле содержат ваши переменные, и вы скоро найдете ошибку.

Для вашего кода тесты PHPUnit будут полезны или, по крайней мере, использования assert() здесь и там в вашем коде.

Источник

Php instanceof не работает

у меня возник ещё один вопрос. Судя по всему, у меня по какой то причине не совсем верно работает instanceof — не могу понять, в чём проблема.

Да, но Toy определён как объект интерфейса Present

Добавлено 27.10.07, 19:39
поэтому выборка по ифу должна вызывать метод интерфейса Present. Но не вызывает почему то.

I’m a shoe!
Name of Corp: My Corp
To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567
Each item costs $5
I’m a book!
Name of Corp: My Corp
To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567
Each item costs $20
I’m a toy!
Name of Corp: My Corp
To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567
Each item costs $150

Добавлено 27.10.07, 19:40
а должен быть

I’m a shoe!
Name of Corp: My Corp
To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567
Each item costs $5
I’m a book!
Name of Corp: My Corp
To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567
Each item costs $20
I’m a toy!
Name of Corp: My Corp
To order from My Corp send mail to NArodnaya str, 5, 334 or call 555-123-4567
Each item costs $150
Prodused 20.01.05

Источник

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

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

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

class NotMyClass
<
>
$a = new MyClass ;

var_dump ( $a instanceof MyClass );
var_dump ( $a instanceof NotMyClass );
?>

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

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

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

class MyClass extends ParentClass
<
>

var_dump ( $a instanceof MyClass );
var_dump ( $a instanceof ParentClass );
?>

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

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

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

$a = new MyClass ;
var_dump (!( $a instanceof stdClass ));
?>

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

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

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

class MyClass implements MyInterface
<
>

var_dump ( $a instanceof MyClass );
var_dump ( $a instanceof MyInterface );
?>

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

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

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

class MyClass implements MyInterface
<
>

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

var_dump ( $a instanceof $b ); // $b это объект класса MyClass
var_dump ( $a instanceof $c ); // $c это строка ‘MyClass’
var_dump ( $a instanceof $d ); // $d это строка ‘NotMyClass’
?>

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

Оператор 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() больше не является устаревшей.

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

Источник

PHP ‘instanceof’ не работает с константой класса

Я работаю над фреймворком, который стараюсь набирать как можно сильнее. (Я работаю в PHP и беру некоторые идеи, которые мне нравятся из C #, и пытаюсь использовать их в этой структуре.) Я создаю класс Collection, который представляет собой набор сущностей / объектов предметной области. Он как бы смоделирован по образцу объекта List в .Net.

Я столкнулся с препятствием, которое не позволяет мне набрать этот класс. Если у меня есть UserCollection, он должен разрешать только объекты User. Если у меня есть PostCollection, он должен разрешать только объекты Post.

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

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

Когда я пытаюсь запустить этот код, я получаю syntax error, unexpected T_STRING, expecting T_VARIABLE or ‘$’ в операторе instanceof . Небольшое исследование проблемы, и похоже, что корень причины в том, что $obj instanceof self действителен для тестирования класса. Похоже, что PHP не обрабатывает весь оператор константы self::type в выражении. Добавление круглых скобок вокруг переменной self::type вызывало ошибку, касающуюся непредвиденного ‘(‘.

Очевидный обходной путь — не делать переменную type константой. Выражение $obj instanceof $this->type работает нормально (если, конечно, $type объявлен как переменная).

Я надеюсь, что есть способ избежать этого, поскольку я хотел бы определить значение как константу, чтобы избежать возможных изменений в переменной позже. Есть ли какие-либо мысли о том, как я могу этого добиться, или нужно ли мне довести PHP до предела в этом отношении? Есть ли способ «экранировать» или инкапсулировать self::this , чтобы PHP не умер при его обработке?

ОБНОВЛЕНИЕ . На основании отзывов ниже я подумал, что можно попробовать — приведенный ниже код работает! Может ли кто-нибудь придумать 1) причину не делать этого, 2) причину, по которой это в конечном итоге не сработает, или 3) лучший способ сделать это?

ОБНОВЛЕНИЕ №2: после ввода приведенного выше кода в рабочую среду выясняется, что он не работает. Я понятия не имел, как это работало, когда я его тестировал, но он вообще не работает. Думаю, я застрял с использованием переменной protected .

Источник

Оцените статью
wind