Гм а что вы ожидаете от этого кода? и что значит строка:
Вы ничего в ней не упустили?
Подписаться на тему Уведомление на 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 — не могу понять, в чём проблема.
wind
Да, но 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 используется для определения того, является ли текущий объект экземпляром указанного класса.
Хотя 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 .