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 :: Возможно ли добавлять функции к классу?
Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2009
Помог: 0 раз(а)
Возникла проблема, мне нужно что бы в класс functionbot были добавлены функции из файла.
Вот до чего я дошел сам, добавить то добавил а как вызвать из другого класса не знаю:
или я не прав?
напишите пример пожалуйста, если не сложно. (Добавление)
fuoco пишет:
Ну можно считать из файла функцию и evalом ее прогнать
А внутри класса можно добавить ссылку на этоу фунцию
а вот это очень интересно, а не покажите?
Гость
Отправлено: 20 Мая, 2009 - 15:51:21
УДАЛЁН
fuoco Ну к примеру както так
Сначала считываете нужную функцию из файла и загоняете ее в переменную (Разумеется нужно чтобы функция была правильной - как будто бы она уже встроена в класс то есть она должна использовать нужные глобальные переменные и тд и тп) например мы считалди функцию в переменную $func_txt
ВАЖНО - функция должна быть пседоанонимной (function() {}) то есть без имени
Потом делаете чтото типа eval("$fnc=".$func_txt) и в результате в $fnc находится скомпилированная функция
Потом внутри класса (Гденить в конструкторе) делаете $this->ИМЯФУНКЦИИ=$fnc
Нормально задачу опиши, а то сидим и гадаем, что же ты хочешь изобразить столь извратным способом (Добавление)
JustUserR, а теперь объясни, чем твой способ лучше простого инклуда и выполнения функции напрямую ?
Stierus Видите ли хоть вы оставили свой первый ответ на сообщение формально на 2 минуты раньше НО когда я начинал писать свой первый ответ вашего еще не было то есть мы писали параллельно
Ну а потом раз уж человеку стало интересно я довел идею до конца
Stierus
Отправлено: 20 Мая, 2009 - 16:39:46
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Нет, мне интересен сам способ, как он вообще в голову пришёл ? копировать текст в файл, прогонять через евал и прочее. Сразу возникают вопросы, каким образом ты переменной присваиваешь функцию, которую запускаешь, как передаешь параметры в функцию и прочее
Гость
Отправлено: 20 Мая, 2009 - 17:07:52
УДАЛЁН
Stierus Эээ способ в голову мне пришел не просто так а потому что автор так буквально и просил - в зависимости от каких-то переданных параметров надо динамически добавить в класс новую функцию, как же по другому это сделать на ходу (К примеру пользователь класса в кавычках передеает имя функции и оно цепляется к классу)
Помимо прочего в PHP после 5.3 этот пример (Вероятно с какимто доделками) будет работать ибо наконецто ввели замыкания (А что касается параметров функции по их всегда можно взят через массив аргументов)
Еще я не зря дал ссылку ибо в версиях до 5.3 надо пошаманить с лямбда-функциями и там есть аналогичные примеры с калассами и добавленем на ходу
Stierus
Отправлено: 20 Мая, 2009 - 17:26:02
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Добавление на ходу уже давно есть ( __call + include ) Задач, которые требовали бы большее, я придумать так и не смог (даже абстрактные, не говорю о жизненных, которым в 99.9% случаев и этого не надо)
Гость
Отправлено: 20 Мая, 2009 - 17:38:24
УДАЛЁН
Stierus Ну про __call я и так прекрасно знаю тут имелось в виду подключение именно за счет считывания тела функции из строки - те динамические функции
Stierus
Отправлено: 20 Мая, 2009 - 18:16:11
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Чем не то, что ты описал, "динамичнее" этого варианта ?
Гость
Отправлено: 20 Мая, 2009 - 20:05:20
УДАЛЁН
Stierus Ладно проехали это ПРОСТО ДРУГОЙ ВАРИАНТ и все
fuoco
Отправлено: 20 Мая, 2009 - 21:55:42
Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Май 2009
Помог: 0 раз(а)
Спасибо за ответы и внимание.. Буду побывать (=. На самом деле то что вы написали не очень понял, но разбираемся как нить. возможно даже скоро (Добавление)
Так ни чего и не вышло из моей задумки. Функции добавляться но вызвать я их не могу, фатальная ошибка вызов неизвестной функции.((( Ну и ладно, Stierus и JustUserR огромное спасибо что уделили своё время для меня. JustUserR вам отдельное, ваш метод помог мне в решении другой проблемы, жалко что этот метод не может предусмотреть в себе еще и ввод в функцию необходимых переменных.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.