Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Ошибка при передаче класса в параметре метода
в методе __construct Site воспринимается как костанта.
На php 5.3.10 все работает отлично, на php 5.6.2 отказывается работать вызывая ошибку (ошибка на скриншоте в аттаче). Прикреплено изображение (Нажмите для увеличения)
Мелкий
Отправлено: 21 Ноября, 2014 - 10:32:38
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
melkij@php-sandbox:~$ php -v
PHP 5.3.10 (cli) (built: Nov 21 2014 11:25:11)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
melkij@php-sandbox:~$ php -f test.php
string(25) "SelectorBase::__construct"
string(9) "siteconst"
melkij@php-sandbox:~$ switch-phpfarm 5.6.2
Setting active PHP version to 5.6.2
PHP 5.6.2 (cli) (built: Nov 7 2014 10:49:55)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
melkij@php-sandbox:~$ php -f test.php
string(25) "SelectorBase::__construct"
string(9) "siteconst"
Версия PHP значения не имеет.
Уберём объявление константы:
Цитата:
melkij@php-sandbox:~$ switch-phpfarm 5.3.10
Setting active PHP version to 5.3.10
PHP 5.3.10 (cli) (built: Nov 21 2014 11:25:11)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
melkij@php-sandbox:~$ php -f test.php
PHP Notice: Use of undefined constant Site - assumed 'Site' in /home/melkij/test.php on line 10
Notice: Use of undefined constant Site - assumed 'Site' in /home/melkij/test.php on line 10
string(25) "SelectorBase::__construct"
string(4) "Site"
melkij@php-sandbox:~$ switch-phpfarm 5.6.2
Setting active PHP version to 5.6.2
PHP 5.6.2 (cli) (built: Nov 7 2014 10:49:55)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
melkij@php-sandbox:~$ php -f test.php
PHP Notice: Use of undefined constant Site - assumed 'Site' in /home/melkij/test.php on line 10
Notice: Use of undefined constant Site - assumed 'Site' in /home/melkij/test.php on line 10
string(25) "SelectorBase::__construct"
string(4) "Site"
Вновь без изменений.
Итог: не там ищите. Проверяйте, где ваша константа и почему она больше не объявляется.
----- PostgreSQL DBA
Bio man
Отправлено: 21 Ноября, 2014 - 11:21:48
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
Классы не передают, передают объекты. И да, ошибка к версии пхп отношения не имеет.
vlom
Отправлено: 21 Ноября, 2014 - 11:28:24
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
Мелкий пишет:
Итог: не там ищите. Проверяйте, где ваша константа и почему она больше не объявляется.
Возможно я немного не правильно объяснил. Если я правильно поял логику программиста который делал этот сайта то таким образом передается имя класса лежащего в той же папке с названием Site.php, данный файл существует.
Только что проделал следующую вещь. подключил файл Site.php явно перед объявлеием класса SelectorBase, далее возникла ошибка в подобном случае, заничт почему-то е работает автозагрузка классов
Bio man
Отправлено: 21 Ноября, 2014 - 12:06:19
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
А с чего работать автозагрузчику? пхп не понимает, что от него хотят, и думает, что это константа.
Так мы указываем, какого типа переменная, по умолчанию можно присвоить только скалярное значение
vlom
Отправлено: 21 Ноября, 2014 - 12:23:30
Частый посетитель
Покинул форум
Сообщений всего: 681
Дата рег-ции: Окт. 2010 Откуда: Екатеринбург
Помог: 4 раз(а)
Bio man пишет:
А с чего работать автозагрузчику?
Дак суть в том что на рабочем сервере с 5.3 все работатет
На локальном с 5,6 не запускается
Sail
Отправлено: 21 Ноября, 2014 - 12:32:22
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
vlom пишет:
Bio man пишет:
А с чего работать автозагрузчику?
Дак суть в том что на рабочем сервере с 5.3 все работатет
На локальном с 5,6 не запускается
Так обрамите Site кавычками... Пусть будет не неопределённая константа, а строка, представляющая собой имя класса.
Показали-б сразу конструктор родителя, было-б понятно...
MiksIr
Отправлено: 21 Ноября, 2014 - 12:50:03
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
vlom пишет:
Дак суть в том что на рабочем сервере с 5.3 все работатет
На локальном с 5,6 не запускается
Суть в том, что у вас ошибка, что для 5.3, что для 5.6. Причины "работает" - "не работают" - это уже второе, не влияющее на наличие ошибки.
Исправьте ее
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
vlom пишет:
Дак суть в том что на рабочем сервере с 5.3 все работатет
На локальном с 5,6 не запускается
Включи все ошибки и увидишь, что не работает.
А то что "работает" это лишь иллюзия, на самом деле тут огромная дырка в архитектуре.
Что на 5.3 что на 5.6 поведение одинаковое, если передать несуществующую константу, то будет выброшен Notice а переменная примет имя константы.
Так что единственный путь это исправить ошибки, ну или, если тебе пофиг, что приложение будет работать неправильно, то просто заглуши ошибки.
Dastor
Отправлено: 21 Ноября, 2014 - 14:35:55
Гость
Покинул форум
Сообщений всего: 66
Дата рег-ции: Окт. 2014
Помог: 3 раз(а)
vlom пишет:
Дак суть в том что на рабочем сервере с 5.3 все работатет
На локальном с 5,6 не запускается
У Вас разный error_reporting видимо. Поэтому на одном сервер видите ошибку, а на другом нет.
Мелкий
Отправлено: 21 Ноября, 2014 - 14:38:24
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Господа, хочу ещё раз обратить внимание: ошибку ловит Yii. Т.е., это set_error_handler, который ловит все ошибки вне зависимости от error_reporting.
Поэтому, если код идентичен, то в окружении 5.3 эта константа действительно существует.
Следовательно, в первую очередь проверять идентичность кода и всех файлов проекта. Наиболее вероятно, что они различаются.
Если файлы идентичны и все на своих местах - то ищите, где константа объявляться должна и, самое важное, когда. Возможен банально неверный порядок загрузки, например, полагающийся на readdir. (Добавление)
vlom пишет:
почему-то е работает автозагрузка классов
Константы (не константы классов, у вас именно обычная глобальная константа) не имеют никакого отношения к автозагрузке классов.
----- PostgreSQL DBA
MiksIr
Отправлено: 21 Ноября, 2014 - 15:03:45
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
Мелкий в Yii1
set_error_handler(array($this,'handleError'),error_reporting());
т.е. уровень ошибок как раз рассматривается.
Сообщение об ошибке на скриншоте тоже не Yii-шное.
----- self-banned
Мелкий
Отправлено: 21 Ноября, 2014 - 15:25:01
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
MiksIr пишет:
set_error_handler(array($this,'handleError'),error_reporting());
т.е. уровень ошибок как раз рассматривается.
Честно говоря, с удивлением узнал о существовании второго параметра
Значит сначала проверять error_reporting. Если на 5.3 E_NOTICE был выключен, то это и будет причиной.
----- PostgreSQL DBA
Sail
Отправлено: 21 Ноября, 2014 - 15:27:52
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.