Трабл с call_user_func_array и $this

Статус
В этой теме нельзя размещать новые ответы.

pilot911

Новичок
Трабл с call_user_func_array и $this

делаю так

PHP:
call_user_func_array(array('class', 'method'), array($args,$this));

отлаживаю в вызванном методе переданный массив и вижу в нем только первый ключ - либо $args, либо $this (если поменять местами)


в чем может быть проблема ?
 

HraKK

Мудак
Команда форума
В глазах, в алкоголе, в деприсантах, в психотопных веществах, в сбое работы драйвере видеокарты, в пхп, в руках, в голове.

-~{}~ 18.09.08 00:53:

На самом деле если серьезно проблема в том что люди не хотят читать мануалы и маломальски не умеют ДУМАТЬ. Если что-то ведет себя не так как они привыкли или предполагают, все, ступор. Небеса рухнули, млять.
 

pilot911

Новичок
проблема была в том, что в вызывающей функции всего один аргумент - поэтому второй аргумент просто не передавался

ладно, попробовал решить по-другому - передать в этот единственный аргумент функции вот такой массив

array(array('pObj'=>$this,'params'=>$args))

но получаю ошибку

Catchable fatal error: Object of class cmf_manager_db could not be converted to string

почему ?
 

HraKK

Мудак
Команда форума
Пытаюсь отрезать гланды через задницу, но вечно задеваю другие органы и пациент умирает, почему?
 

pilot911

Новичок
все, разобрался.. можно сносить ветку в корзину

-~{}~ 18.09.08 02:05:

Автор оригинала: HraKK
Пытаюсь отрезать гланды через задницу, но вечно задеваю другие органы и пациент умирает, почему?
ты что такой дерзкий? ты, вообще, с какого района ?
 

HraKK

Мудак
Команда форума
Смотри, как бы тебе слушать дерзость не пришлось на другом форуме, ага?
 

pilot911

Новичок
Автор оригинала: HraKK
Смотри, как бы тебе слушать дерзость не пришлось на другом форуме, ага?
ты топики свои почитай - сплошная озлобленность.. надо быть снисходительнее и добрее к людям, даже делающим ошибки и это будет взаимно
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
pilot911
твой код работает, проверил :)

по-моему сначала стоит разобраться с простейшими принципами вызова функций вообще
вызываемая функция получает не массив в 1й аргумент, а все элементы в аргументы соответственно
 

HraKK

Мудак
Команда форума
pilot911
Это мои проблемы как и куда я плююсь, лучше смотри за чистотой своего кода.

-~{}~ 18.09.08 01:38:

Что-то меня потянуло поболтать.

Глупость и незнание.

Берем неизвестную мне функцию call_user_func_array, я до сегодня только подозревал о ее существовании (как по мне ее использование признак плохой архитектуры, но то не суть важно).
Незнание.
Я открываю ман, смотрю примеры. И пытаюсь восоздать код ТС, хоть в голове я еще до открытия мана, догодался в чем загвозка. Но мы не шаманы гадать на кофейной гуще, ведь верно?
Я не знаю как другая функция получает передаваемые аргементы.
Незнание.
Но догадываюсь и проверяю 2 варианта с var_dump 1 аргумента и var_dump get_func_args(). Нахожу всю нужную мне информацию и пишу язвительный ответ, нет не о незнании, о глупости и не желании подумать. А совсем не об ошибках.

Я не прощаю глупость, а к ошибкам и незнанию отношусь спокойно.
 

pilot911

Новичок
Автор оригинала: HraKK
pilot911
Это мои проблемы как и куда я плююсь, лучше смотри за чистотой своего кода.

-~{}~ 18.09.08 01:38:

Что-то меня потянуло поболтать.

Глупость и незнание.

Берем неизвестную мне функцию call_user_func_array, я до сегодня только подозревал о ее существовании (как по мне ее использование признак плохой архитектуры, но то не суть важно).
Незнание.
Я открываю ман, смотрю примеры. И пытаюсь восоздать код ТС, хоть в голове я еще до открытия мана, догодался в чем загвозка. Но мы не шаманы гадать на кофейной гуще, ведь верно?
Я не знаю как другая функция получает передаваемые аргементы.
Незнание.
Но догадываюсь и проверяю 2 варианта с var_dump 1 аргумента и var_dump get_func_args(). Нахожу всю нужную мне информацию и пишу язвительный ответ, нет не о незнании, о глупости и не желании подумать. А совсем не об ошибках.

Я не прощаю глупость, а к ошибкам и незнанию отношусь спокойно.
прощаю - не прощаю..

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

создаем массив

PHP:
 $GLOBALS['CLASS_EXT'][$class][$method]
в него добавляем соответственно ключи - класс (который расширяем) и название метода, а в качестве значения массива указываем еще раз название класса, например

PHP:
 $GLOBALS['CLASS_EXT']['my_big_class']['debug_extended'] = 'my_big_class';

теперь дотаточно в базовом классе определить __call() и получаем расширяемый класс без изменения ядра и прочих заморочек



PHP:
class	model	{

    protected 	static 	$instances;

	//	Look [url]http://ru2.php.net/manual/ru/function.call-user-func-array.php#49232[/url]

	function __call($method, $args)	{
		if (isset($GLOBALS['CLASS_EXT'][get_class($this)][$method]) && method_exists($GLOBALS['CLASS_EXT'][get_class($this)][$method], $method))	{

			return call_user_func_array(array($GLOBALS['CLASS_EXT'][get_class($this)][$method], $method), array(array('pObj'=>$this,'params'=>$args)));
			
		}
		else {
			if	($GLOBALS['DEBUG']['output'])
				cmf_div::debug(array('error'	=>	'There are no method "'.$method.'" in extended class of class "'.get_class($this).'"',	'debug_trail'	=>	cmf_div::debug_trail()),'Sorry, script exit.');
			exit();
		}
 	}


}
 

HraKK

Мудак
Команда форума
Ай, нельзя столько ржать на ночь... санитары выносите..
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
pilot911
а ты когда пишешь - тоже горизонгтальным скролингом пользуешься?
или у тебя авто-врап? ...
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
я вот че думаю, pilot911, если ты все уже для себя решил и все знаешь, то зачем ты нас об этом спрашиваешь?
ты надеешься услышать "респект, интересное решение"?
тут это не оценят, 5 лет назад через это прошли все, и уже знают, что это lame
 

pilot911

Новичок
по делу критикуем, господа :)

-~{}~ 18.09.08 03:01:

Автор оригинала: grigori
я вот че думаю, pilot911, если ты все уже для себя решил и все знаешь, то зачем ты нас об этом спрашиваешь?
ты надеешься услышать "респект, интересное решение"?
тут это не оценят, 5 лет назад через это прошли все, и уже знают, что это lame
тут прозвучало мнение что

call_user_func_array как по мне ее использование признак плохой архитектуры, но то не суть важно
пытался разубедить человека... хотя в принципе в текущей реализации смысла в __call немного - проще юзать наследование

просто с __call красивее, не надо вспоминать о специальных наследующих классах
 

fixxxer

К.О.
Партнер клуба
лолштоэто

-~{}~ 18.09.08 03:04:

ой он еще про архитектуру рассуждает :)))

церетели:)))
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
pilot911
а я и по делу - ну не найдешь ты здесь человека, который признает нормальность вызова статического метода по call_user_func_array
это бред, это фигня, лажа, глупость, как хочешь назови :)
 

pilot911

Новичок
Автор оригинала: grigori
pilot911
а я и по делу - ну не найдешь ты здесь человека, который признает нормальность вызова статического метода по call_user_func_array
это бред, это фигня, лажа, глупость, как хочешь назови :)
да почему бред и почему статического ?

представь ситуацию

500 тысяч записей в таблице - разбиваем их на 5 по 100

для выдачи номера таблицы по id записи есть класс

PHP:
	static	function	getUserTableByUserId($user_id)	{
 		return	'fe_users_'.ceil($user_id/self::$max_in_user_table);
 	}

проходит время, добавляем еще один тип записей и тоже используем этот класс.. только не наследуем его, а добавляем через __call новый метод...

разве не логичное решение ?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху