class component{
var $obj;
function component($my){
$this->obj=$my;
}
function __call($m, $a) {
$this->obj->$m($a);
// проблема в том что функция с именем в переменной $m похоже думает
// что ей передают в качестве параметра массив, в то время как это
//массив параметров. Как передать параметры, а не массив ?
}
}
инициализация класса component происходит внутри другого класса
$c=new component($this);
здесь конструтору передаётся в качестве текущий класс, но это не суть важно
Спустя 2 минуты, 19 секунд (21.10.2011 - 23:22) Игорь_Vasinsky написал(а):
у тя какой php? в 5 же подругому многое - http://irbis-team.com - там есть про ООП
может вообще через наследование можно(нужно)
может вообще через наследование можно(нужно)
Спустя 4 минуты, 16 секунд (21.10.2011 - 23:26) 3Dinterface написал(а):
Через наследование невозможно, класс component создаётся внутри того класса от которого он должен наследоваться. При этом класс уже инициализирован.
По результату, у класса component, и его производных должен быть доступ, к методам класса внутри которого создан экземпляр component, или экземпляры дочерних классов.
Понимаю что задача дикая, просто тот класс внутри которого создаётся components это стандартный класс cms'ки, если я его изменю, мои изменения будут унечтожены при первом обновлении. Да и вообще это хреновая идея, переписывать под себя классы ядра битрикса, вот и приходится извращаться.
другого способа кроме __call невижу.
Вопрос вызывать через переменную с именем функции, или всё таки через eval
По результату, у класса component, и его производных должен быть доступ, к методам класса внутри которого создан экземпляр component, или экземпляры дочерних классов.
Понимаю что задача дикая, просто тот класс внутри которого создаётся components это стандартный класс cms'ки, если я его изменю, мои изменения будут унечтожены при первом обновлении. Да и вообще это хреновая идея, переписывать под себя классы ядра битрикса, вот и приходится извращаться.
другого способа кроме __call невижу.
Вопрос вызывать через переменную с именем функции, или всё таки через eval
Спустя 3 минуты, 49 секунд (21.10.2011 - 23:30) Игорь_Vasinsky написал(а):
по ссылке то почитай. обязательно
Цитата |
Параметры приходят в массиве. |
Цитата |
роблема в том что функция с именем в переменной $m похоже думает // что ей передают в качестве параметра массив, |
а ты проверь что она думает is_array()
Спустя 7 минут (21.10.2011 - 23:37) 3Dinterface написал(а):
код
print_r($a);
print_r(is_array($a));
результат
Array ( [0] => element ) 1
как видете это массив.
print_r($a);
print_r(is_array($a));
результат
Array ( [0] => element ) 1
как видете это массив.
Спустя 4 минуты, 15 секунд (21.10.2011 - 23:41) Игорь_Vasinsky написал(а):
запутался..
Цитата |
что ей передают в качестве параметра массив, в то время как это //массив параметров. |
Ты передаёшь в функцию массив параметров
Функция воспринимает параметр-массив
так твоя функция не работает с массивом, или работает? может её покажешь?
Спустя 10 минут, 27 секунд (21.10.2011 - 23:51) 3Dinterface написал(а):
Их много и все разные. С массивом параметров точно некто не работает )
1) function InitComponentTemplate($templatePage = "", $siteTemplate = false, $customTemplatePath = ""){};
2) function ShowComponentTemplate(){};
3) function AddIncludeAreaIcon($arIcon){}
4) И ТД.
Ещё раз повторю, сами функции изменить невозможно.
Просто мне надо вместо массива с параметрами, вызвать функцию с параметрами которые содержаться в массиве. Вот собственно и всё.
1) function InitComponentTemplate($templatePage = "", $siteTemplate = false, $customTemplatePath = ""){};
2) function ShowComponentTemplate(){};
3) function AddIncludeAreaIcon($arIcon){}
4) И ТД.
Ещё раз повторю, сами функции изменить невозможно.
Просто мне надо вместо массива с параметрами, вызвать функцию с параметрами которые содержаться в массиве. Вот собственно и всё.
Спустя 5 минут, 22 секунды (21.10.2011 - 23:57) Игорь_Vasinsky написал(а):
блин...
я о чём говорю - если функция не умеет работать с массивом в качестве аргумента - не давай ей массив
функция в цикле foreach , будет работать со всеми элементами массива
или мне спать уже надо идти?
я о чём говорю - если функция не умеет работать с массивом в качестве аргумента - не давай ей массив
функция в цикле foreach , будет работать со всеми элементами массива
foreach($a as $value)
{
$i = 0; $i++;
$this->obj.$i->$m($a);
}
$arr = array();
for($i=0; $i<count($a))
{
//Забивай массив объектами
}
или мне спать уже надо идти?
Спустя 6 минут, 46 секунд (22.10.2011 - 00:04) 3Dinterface написал(а):
Помоему спать ))
Мне кажется вызываешь одну и ту же функцию в цикле и передаёшь те параметры которые надо было передать разом, по одному )))
у тебя получается ))
InitComponentTemplate("одна переменная");
InitComponentTemplate("вторая переменная);
InitComponentTemplate("третья переменна");
а надо
function InitComponentTemplate("первая", "вторая","третья")
Мне кажется вызываешь одну и ту же функцию в цикле и передаёшь те параметры которые надо было передать разом, по одному )))
у тебя получается ))
InitComponentTemplate("одна переменная");
InitComponentTemplate("вторая переменная);
InitComponentTemplate("третья переменна");
а надо
function InitComponentTemplate("первая", "вторая","третья")
Спустя 3 минуты, 13 секунд (22.10.2011 - 00:07) Игорь_Vasinsky написал(а):
тыж говоришь то функция не работает с массивом?
как ты сможешь передать массив, если должен передать его элементы разом - без "распаковки массива", его нужно в цикле разобрать
тут речь уже не ООП, это массивы
как ты сможешь передать массив, если должен передать его элементы разом - без "распаковки массива", его нужно в цикле разобрать
тут речь уже не ООП, это массивы
Спустя 1 минута, 50 секунд (22.10.2011 - 00:09) 3Dinterface написал(а):
Я надеялся, что эта ситуацию уже предусмотрена.
К примеру есть call_user_method_array(имя функции, массив параметров), но он с классами похоже не дружит.
Как вариант, наверно разобрать массив, и собрать в строку.
А вот что со строкой делать я без болды, через eval наверное применять.
К примеру есть call_user_method_array(имя функции, массив параметров), но он с классами похоже не дружит.
Как вариант, наверно разобрать массив, и собрать в строку.
А вот что со строкой делать я без болды, через eval наверное применять.
Спустя 5 минут, 59 секунд (22.10.2011 - 00:15) 3Dinterface написал(а):
ХАХА)).
И не зря надеялся
Формат функции
call_user_func_array(array(КЛАСС, "ИМЯ функции"), массив параметров);
рабочий пример
call_user_func_array(array($this->self, "IncludeComponentTemplate"), $a);
спасибо за беседу )
И не зря надеялся
Формат функции
call_user_func_array(array(КЛАСС, "ИМЯ функции"), массив параметров);
рабочий пример
call_user_func_array(array($this->self, "IncludeComponentTemplate"), $a);
спасибо за беседу )
Спустя 2 минуты, 55 секунд (22.10.2011 - 00:18) Игорь_Vasinsky написал(а):
да не зачто... как то странно побеседовали..
Спустя 39 секунд (22.10.2011 - 00:18) Игорь_Vasinsky написал(а):
ещё через create_function наверно можно было.
Спустя 36 минут, 9 секунд (22.10.2011 - 00:54) Игорь_Vasinsky написал(а):
лжеэксперт - это группа. охеренная группа с умными парнями.
Спустя 3 минуты, 50 секунд (22.10.2011 - 00:58) Invis1ble написал(а):
Цитата |
лжеэксперт - это группа. охеренная группа с умными парнями. |
к сожалению, я пока что увидел только одну интересную статью от вашей группы (а точнее от vital) - про Comet.
Спустя 5 минут, 16 секунд (22.10.2011 - 01:03) Winston написал(а):
Цитата (Invis1ble @ 22.10.2011 - 00:58) |
(а точнее от vital) |
От vital

Спустя (22.10.2011 - 01:01) Invis1ble написал(а):
[стыд]Блин, точно![/стыд]
Поправил
Поправил
Спустя 7 минут, 33 секунды (22.10.2011 - 01:09) Игорь_Vasinsky написал(а):
статьи то для новичков, а не для твоего уровня.
Спустя 5 минут, 54 секунды (22.10.2011 - 01:15) Invis1ble написал(а):
ну дай мне хоть пару ссылок на статьи для новичков, может я проглядел

Спустя 5 минут, 11 секунд (22.10.2011 - 01:20) Игорь_Vasinsky написал(а):
все мои вроде.. + POST GET