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 :: Не вызывается метод класса

 PHP.SU

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


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

> Описание: Класс обозначен через переменную
Devoll
Отправлено: 27 Мая, 2009 - 23:14:52
Post Id



Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Июль 2007  


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




Доброй ночи! Столкнулся со следующей ситуацией:

Работает:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $class = 'Core';
  5. $obj = new $class;
  6. $obj->Init();
  7.  


А так не работает, выводя ошибку

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $class = 'Core';
  5. $class::Init();
  6.  


Есть ли решение данной проблемы?

P.S. Класс инициализировать не нужно!
 
 Top
vitaliy_mad
Отправлено: 27 Мая, 2009 - 23:30:01
Post Id


Участник


Покинул форум
Сообщений всего: 1107
Дата рег-ции: Окт. 2008  
Откуда: Украина, Мариуполь


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




Devoll пишет:
$class = 'Core';
$obj = new $class;
$obj->Init();

ЧТО ЭТО??? Не понял Не понял Не понял
(Добавление)
http://php.su/learnphp/phpoo/
 
 Top
valenok Модератор
Отправлено: 27 Мая, 2009 - 23:49:11
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




eval($class.'::Init();');


-----
Truly yours, Sasha.
 
My status
 Top
Devoll
Отправлено: 28 Мая, 2009 - 07:19:13
Post Id



Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Июль 2007  


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




Не, ну eval это извращение Радость
(Добавление)
vitaliy_mad пишет:
Devoll пишет:
$class = 'Core';
$obj = new $class;
$obj->Init();

ЧТО ЭТО???


Это php-код в упрощенном виде. Задача - в __autoload проверяется, есть ли файл с классом. Если есть - подключается, дальше идет проверка на существование метода Init() - если есть - выполняется. Только нужно выполнить его желательно не инициализировав сам класс.
 
 Top
Гость
Отправлено: 28 Мая, 2009 - 10:19:13
Post Id


УДАЛЁН










Не инициализировав это чтоли не создав экземпляра класса?
Ну вообще раз метод статический вызывайте eval() ибо он для этого и предназначен
 
 Top
Stierus Супермодератор
Отправлено: 28 Мая, 2009 - 11:27:17
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




Наличие класса class_exists
Наличие метода get_class_methods
По поводу вызова метода, я бы к call_user_func присмотрелся (не знаю точно, есть ли такая возможность, но, по идее, должна быть)
... вобщем листаем мануал Улыбка
(Добавление)
JustUserR, забудь про Eval , его не существует. Это САМЫЙ КРАЙНИЙ случай, когда нет другого выбора ... случай совсем поганый, очень ....

ps
навеяно тем, что в каждом втором топике мелькает JustUserR c подобными советами.

(Отредактировано автором: 28 Мая, 2009 - 11:34:08)

 
My status
 Top
Devoll
Отправлено: 28 Мая, 2009 - 11:38:04
Post Id



Новичок


Покинул форум
Сообщений всего: 59
Дата рег-ции: Июль 2007  


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




Stierus ты прав!

Ответ на собственный вопрос:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $class = 'Core';
  4. call_user_func(array($class, 'Init'));
  5.  


Спасибо за активную помощь в решении проблемы
 
 Top
EuGen Администратор
Отправлено: 28 Мая, 2009 - 12:16:27
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Нам надо в подпись ставить ссылку на Урок номер 4


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Ch_chov
Отправлено: 28 Мая, 2009 - 15:05:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Цитата:
JustUserR, забудь про Eval , его не существует. Это САМЫЙ КРАЙНИЙ случай, когда нет другого выбора ... случай совсем поганый, очень ....

Интересно почему не стоит использовать буферизацию? Влияет на производительность?
 
 Top
Stierus Супермодератор
Отправлено: 28 Мая, 2009 - 15:51:55
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




Цитата:
Интересно почему не стоит использовать буферизацию?
Как связаны Eval и буферизация ?
 
My status
 Top
Ch_chov
Отправлено: 28 Мая, 2009 - 18:38:28
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




Цитата:
Как связаны Eval и буферизация ?

Никак.
Просто хотелось узнать про буферизацию.
Ну и про eval заодно. Почему его нельзя использовать?
Чём его заменить, если php код находится в базе данных?
 
 Top
Stierus Супермодератор
Отправлено: 29 Мая, 2009 - 00:56:35
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




Цитата:
Чём его заменить, если php код находится в базе данных?
Возникает вопрос, что он там делает? (кто-то подсказал, что его лучше хранить в базе данных или сами додумались?)
 
My status
 Top
Ch_chov
Отправлено: 29 Мая, 2009 - 17:36:26
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008  
Откуда: из города


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




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

Конкретный пример:
Сейчас делаю модуль для Drupal – продажа ссылок через биржы купли-продажи ссылок (mainLink.ru setlinks.ru и т.д.). Все биржи предоставляют небольшой php-код (несколько строчек), который нужно установить у себя на сайте. Я хочу сделать модуль с административным интерфейсом, что бы можно было добавлять/удалять/редактировать этот код для каждой из бирж.
Разумеется встаёт вопрос, где хранить код?
Имхо самый удобный способ это БД, так как это полностью соответствует концепции Drupal. К тому же можно будет использовать уже готовый механизм создания собственных типов данных.
Кроме этого, не будет необходимости возится с правами доступа к файлам при инсталяции модуля.
 
 Top
Гость
Отправлено: 29 Мая, 2009 - 17:44:22
Post Id


УДАЛЁН










Stierus Я конечно уважаю ваше мнение но по мне eval() очеь удобная функция
Вопервых временем фазы компиляции кода можно пренебречь ведь по сути PHP это же интерпретатор и ему почти все равно когда и что компилировать и как следствие на производительнсоть не меняет
Вовторых* зачем запонимать сотни функций одна из которых вызывает метод другая своство третья чтото еще - ведь есть универсальный и понятный способ который помимо прочего не меняется от версии к версии
Втретьих код действительно может храниться в базе данных что и сделано в некоторых CMS

* Да и чем по смыслу отличаются обе вещи а именно ваша функция get_чтототам() и eval() - да ничем - и та и та берет параметр во время выполения программы и интерпретатор PHP делает одни и те же вещи (В отличие например от статического вызова метода просто по идентирикатору)
 
 Top
Stierus Супермодератор
Отправлено: 01 Июня, 2009 - 12:25:26
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


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




JustUseR
Цитата:
и как следствие на производительнсоть не меняет
Попробуй сам замерить разницу между Eval и Include Улыбка
Цитата:
* Да и чем по смыслу отличаются обе вещи а именно ваша функция get_чтототам() и eval() - да ничем
Тем, что параметры передавать можно Улыбка
Цитата:
Втретьих код действительно может храниться в базе данных что и сделано в некоторых CMS
В некоторых CMS много что сделано, сомнительный аргумент Улыбка

Ch_chov

Цитата:
Конкретный пример:
Сейчас делаю модуль для Drupal – продажа ссылок
Совсем недавно мы тоже конкретный пример кода из друпала рассматривали где-то в соседних ветках Улыбка))
 
My status
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB