Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: подключить к классу метод
 
 автор: sl1p   (31.05.2010 в 20:04)   письмо автору
 
 

Только вот начал разбираться подробней с ООП.

подскажите пожалуйста, возможно ли както к классу подключить метод?

т.е. чтото похожее на extends только наоборот, наследовать будет родитель.

например:

есть класс

class Plugins {
    
}

к нему нужно подключить метод, скажем
function sayHello(){ echo 'hi' }

тобишь:

$plugins = new Plugins;
$plugins->sayHello();

возможно ли такое?)
или я чегото замудрил :)

  Ответить  
 
 автор: Tonik992   (31.05.2010 в 20:16)   письмо автору
 
   для: 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. а вообще ты чего-то замудрил
Функция есть функция, она никем не наследуется, и насколько я знаю, нельзя даже переопределить её..

  Ответить  
 
 автор: sl1p   (31.05.2010 в 20:26)   письмо автору
 
   для: 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();

  Ответить  
 
 автор: Tonik992   (31.05.2010 в 20:30)   письмо автору
 
   для: sl1p   (31.05.2010 в 20:26)
 

Хм, а если создать в классе поле, которое будет хранить в себе массивы плагинов.. И соответственно функцию, которая будет добавлять в этот массив названия функций(плагинов)... Вызывать потом эти функции естественно через call_user_func()

  Ответить  
 
 автор: Tonik992   (31.05.2010 в 20:36)   письмо автору
 
   для: Tonik992   (31.05.2010 в 20:30)
 

А твой ведь способ тоже работает... Подключаемый плагин сделать как отдельный класс, в котором может быть не одна единственная функция, не один единственный метод...

  Ответить  
 
 автор: sl1p   (31.05.2010 в 20:43)   письмо автору
 
   для: Tonik992   (31.05.2010 в 20:36)
 

абсолютно все плагины складываются из одной функции...

хотелось сделать именно визуально вызов плагина как метод класса(для удобства)
т.е. $class -> plugin();

а Ваш способ через call_user_func имхо не подходит, т.к. у функции-плагина произвольное количество аргументов..

а мой последний способ уже портит всю картину.. т.к. если у плагина 1 функция тогда всё равно придётся вызывать цепочкой..
$class -> plugin() -> выполнить_действие_одной_функции()

вобщем х3 даже что тут можно придумать :ъ

  Ответить  
 
 автор: Tonik992   (31.05.2010 в 20:49)   письмо автору
 
   для: sl1p   (31.05.2010 в 20:43)
 

хм.. а функция call_user_func выглядит так - call_user_funct($funct_name,$param,.....);
или так: call_user_func($funct_name,$array_param);

  Ответить  
 
 автор: sl1p   (31.05.2010 в 20:55)   письмо автору
 
   для: Tonik992   (31.05.2010 в 20:49)
 

завтыкал :)

ну х3... надо подумать хорошенько:)
спасибо большое за идею!

  Ответить  
 
 автор: sl1p   (31.05.2010 в 22:54)   письмо автору
 
   для: Tonik992   (31.05.2010 в 20:49)
 

хм, а можно както через call_user_func вызвать метод?

или как передать в метод параметры?

  Ответить  
 
 автор: sl1p   (31.05.2010 в 23:59)   письмо автору
 
   для: sl1p   (31.05.2010 в 22:54)
 

а вот, нашёл:

call_user_func_array(array($obj, "method"), $params)

  Ответить  
 
 автор: Саня   (31.05.2010 в 22:09)   письмо автору
 
   для: sl1p   (31.05.2010 в 20:43)
 

> хотелось сделать именно визуально вызов плагина как метод класса
Существует магическая функция __call()

  Ответить  
 
 автор: sl1p   (31.05.2010 в 22:19)   письмо автору
 
   для: Саня   (31.05.2010 в 22:09)
 

оу... не знал О_о огромнейшое спасибо :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования