|
|
|
| Только вот начал разбираться подробней с ООП.
подскажите пожалуйста, возможно ли както к классу подключить метод?
т.е. чтото похожее на extends только наоборот, наследовать будет родитель.
например:
есть класс
к нему нужно подключить метод, скажем
function sayHello(){ echo 'hi' }
|
тобишь:
$plugins = new Plugins;
$plugins->sayHello();
|
возможно ли такое?)
или я чегото замудрил :) | |
|
|
|
|
|
|
|
для: sl1p
(31.05.2010 в 20:04)
| | Мне кажется врядли... Но у меня есть такая идея:
создать класс:
<?php
class Plugins{
//И в нем создать такой метод:
public function call_plug($name){
call_user_func($name);
}
}
//далее:
function hello(){
echo "hi!";
}
$plugins = new Plugins;
$plugins->call_plug("hello");
?>
|
p.s. а вообще ты чего-то замудрил
Функция есть функция, она никем не наследуется, и насколько я знаю, нельзя даже переопределить её.. | |
|
|
|
|
|
|
|
для: Tonik992
(31.05.2010 в 20:16)
| | ну мне тоже кажется что я чтото мудрю..)
пытаюсь сделать свою систему плагинов..
по нужде подключаются различные плагины, я думал сделать это как методы класса, чтобы не потеряться в именах функций..
короче получилось такая вот хрень))
наверное надо почистить мозг и думать заново)
<?
class Plugins {
function load($name) {
$pl = "plugin_".$name;
$this -> $name = new $pl;
}
}
class plugin_ContentEditor {
function get() {
echo 'content_editor usex()';
}
}
$s = new Plugins;
$s -> load('ContentEditor');
$s -> ContentEditor -> get();
|
| |
|
|
|
|
|
|
|
для: sl1p
(31.05.2010 в 20:26)
| | Хм, а если создать в классе поле, которое будет хранить в себе массивы плагинов.. И соответственно функцию, которая будет добавлять в этот массив названия функций(плагинов)... Вызывать потом эти функции естественно через call_user_func() | |
|
|
|
|
|
|
|
для: Tonik992
(31.05.2010 в 20:30)
| | А твой ведь способ тоже работает... Подключаемый плагин сделать как отдельный класс, в котором может быть не одна единственная функция, не один единственный метод... | |
|
|
|
|
|
|
|
для: Tonik992
(31.05.2010 в 20:36)
| | абсолютно все плагины складываются из одной функции...
хотелось сделать именно визуально вызов плагина как метод класса(для удобства)
т.е. $class -> plugin();
а Ваш способ через call_user_func имхо не подходит, т.к. у функции-плагина произвольное количество аргументов..
а мой последний способ уже портит всю картину.. т.к. если у плагина 1 функция тогда всё равно придётся вызывать цепочкой..
$class -> plugin() -> выполнить_действие_одной_функции()
вобщем х3 даже что тут можно придумать :ъ | |
|
|
|
|
|
|
|
для: sl1p
(31.05.2010 в 20:43)
| | хм.. а функция call_user_func выглядит так - call_user_funct($funct_name,$param,.....);
или так: call_user_func($funct_name,$array_param); | |
|
|
|
|
|
|
|
для: Tonik992
(31.05.2010 в 20:49)
| | завтыкал :)
ну х3... надо подумать хорошенько:)
спасибо большое за идею! | |
|
|
|
|
|
|
|
для: Tonik992
(31.05.2010 в 20:49)
| | хм, а можно както через call_user_func вызвать метод?
или как передать в метод параметры? | |
|
|
|
|
|
|
|
для: sl1p
(31.05.2010 в 22:54)
| | а вот, нашёл:
call_user_func_array(array($obj, "method"), $params)
|
| |
|
|
|
|
|
|
|
для: sl1p
(31.05.2010 в 20:43)
| | > хотелось сделать именно визуально вызов плагина как метод класса
Существует магическая функция __call() | |
|
|
|
|
|
|
|
для: Саня
(31.05.2010 в 22:09)
| | оу... не знал О_о огромнейшое спасибо :) | |
|
|
|