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 :: Unexpected T_PAAMAYIM_NEKUDOTAYIM на php 5.2.17

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
Xts
Отправлено: 19 Февраля, 2015 - 11:38:58
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Привет всем.
при переносе с локалки (php 5.3) на хостинг (php 5.2)
вылезла эта ошибка
Цитата:
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

знаю что связана она с ::, но как исправить не знаю.
вот строка на которую ругается
PHP:
скопировать код в буфер обмена
  1. array_push($this->modules, new ModuleInfo($name, $name::getUrl()));

вот функция целиком
PHP:
скопировать код в буфер обмена
  1. public function registerModule($name)
  2.         {
  3.             array_push($this->modules, new ModuleInfo($name, $name::getUrl()));
  4.             $this->log->debug("Registering module $name");
  5.         }

пробовал делать так

тогда ошибки нет, но ничего не работает, цепляется только один модуль, стоящий первый в списке.
Тогда я сделал так на серве с php 5.3

и получил вот такие ошибки
Цитата:
Notice: Undefined property: ModuleManager::$url in /www/classes/ModuleInfo.php on line 20

вот что на 20 строке этого файла

а именно вызываемая функция
PHP:
скопировать код в буфер обмена
  1. public function getUrl()
  2.                 {
  3.                         return $this->url;
  4.                 }
 
 Top
Sail
Отправлено: 19 Февраля, 2015 - 11:57:05
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Xts пишет:
при переносе с локалки (php 5.3) на хостинг (php 5.2)
...
знаю что связана она с ::, но как исправить не знаю.

Всё просто: Оператор разрешения области видимости ( :: )
Цитата:
Начиная с версии PHP 5.3.0, стало возможным обратиться к классу с помощью переменной. Значение переменной не должно быть ключевым словом (например, self, parent или static).

(Добавление)
Насчёт "исправить" (там-же, речь о статических методах, константах....):
Цитата:
При обращении к этим элементам извне класса, необходимо использовать имя этого класса

(Добавление)
Ну, или хостинг по-современнее найти... Улыбка
 
 Top
Xts
Отправлено: 19 Февраля, 2015 - 12:02:02
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Sail
в чем причина то я знаю, что в 5.3 добавили это.
дак а как под 5.2 то заставить работать? вот это я чет не могу
(Добавление)
да и я же написал, что если заменить переменную на имя класса, то ошибки нет, но и не работает ничего нормально
 
 Top
Sail
Отправлено: 19 Февраля, 2015 - 12:09:36
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Xts, смотрю на описание функции: public function getUrl(), и не понимаю, для чего используете оператор :: ?
Попробуйте просто
 
 Top
Xts
Отправлено: 19 Февраля, 2015 - 12:14:36
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Sail пишет:
Xts, смотрю на описание функции: public function getUrl(), и не понимаю, для чего используете оператор :: ?
Попробуйте просто

если сделать так, то вот что получаем
Fatal error: Call to a member function getUrl() on a non-object in /www/classes/ModuleManager.php on line 17

хороший вопрос, не я это писал
 
 Top
Sail
Отправлено: 19 Февраля, 2015 - 12:23:44
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Xts, а в функцию registerModule() передаётся просто строка, представляющая собой название класса? Улыбка
 
 Top
Xts
Отправлено: 19 Февраля, 2015 - 12:25:53
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Sail
туда передаются названия классов модулей

PHP:
скопировать код в буфер обмена
  1. $moduleManager = new ModuleManager();
  2.  
  3.         $moduleManager->registerModule('Admin');
  4.         $moduleManager->registerModule('MainPage');
  5.         $moduleManager->registerModule('Pages');
  6.         $moduleManager->registerModule('Feedback');
  7.         $moduleManager->registerModule('News');

(Отредактировано автором: 19 Февраля, 2015 - 12:26:31)

 
 Top
Sail
Отправлено: 19 Февраля, 2015 - 12:34:22
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Xts, в базовом классе, от которых наследуются перечисленные при регистрации модули, есть функция getUrl()? (ну или в самих этих классах)
И объявлена ли она статической?
 
 Top
Xts
Отправлено: 19 Февраля, 2015 - 12:40:39
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Sail, она объявлена статической в каждом модуле и вот еще такой кусок есть

PHP:
скопировать код в буфер обмена
  1.         interface Module
  2.         {
  3.                 public function exec($url);
  4.                 public function getTemplateName();
  5.                 static public function getUrl();
  6.         }

(Отредактировано автором: 19 Февраля, 2015 - 12:40:59)

 
 Top
Sail
Отправлено: 19 Февраля, 2015 - 13:32:37
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Xts пишет:
Sail, она объявлена статической в каждом модуле и вот еще такой кусок есть

PHP:
скопировать код в буфер обмена
  1.         interface Module
  2.         {
  3.                 public function exec($url);
  4.                 public function getTemplateName();
  5.                 static public function getUrl();
  6.         }

"Такой кусок" - это интерфейс, который должен быть реализован в тех самых классах.
"Объявлена статической в каждом модуле" - тогда логично.
Но (всё в той-же справке):
PHP:
скопировать код в буфер обмена
  1. $classname = 'MyClass';
  2. echo $classname::CONST_VALUE; // Начиная с версии PHP 5.3.0

Следовательно, нужно как-то иначе определять второй параметр для конструктора ModuleInfo....
 
 Top
Xts
Отправлено: 19 Февраля, 2015 - 13:34:51
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Sail пишет:
"Такой кусок" - это интерфейс, который должен быть реализован в тех самых классах.

знаю что интерфейс

Sail пишет:
Следовательно, нужно как-то иначе определять второй параметр для конструктора ModuleInfo....

знать бы как Меланхолия
 
 Top
Sail
Отправлено: 19 Февраля, 2015 - 13:36:48
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Кстати, вот:
PHP:
скопировать код в буфер обмена
  1. Ура! Есть решение и для PHP 5.2!
  2.  
  3. $addition = calc_user_func($className . '::staticF');
 
 Top
Xts
Отправлено: 19 Февраля, 2015 - 13:41:12
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Sail, пробовал подобное городить, но чет не понимаю как его туда всунуть правильно
 
 Top
Sail
Отправлено: 19 Февраля, 2015 - 13:44:19
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Xts,
PHP:
скопировать код в буфер обмена
  1. array_push($this->modules, new ModuleInfo($name, $name::getUrl()));
  2. /* превращается в: */
  3. array_push($this->modules, new ModuleInfo($name, call_user_func($name . '::getUrl')));
  4.  

(Отредактировано автором: 19 Февраля, 2015 - 13:55:25)

 
 Top
Xts
Отправлено: 19 Февраля, 2015 - 13:49:47
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Sail пишет:
Xts,
PHP:
скопировать код в буфер обмена
  1. array_push($this->modules, new ModuleInfo($name, $name::getUrl()));
  2. /* превращается в: */
  3. array_push($this->modules, new ModuleInfo($name, call_user_func($name . '::getUrl')));
  4.  

оу, понял в чем косяк, спасибо

и да, поправьте название функции, не calc_user_func, а call_user_func
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB