LINUX.ORG.RU

Тупанул

Миллион раз ведь использовал call_user_func, но вот со статическим методом ввёл себя в заблуждение ;)

VirRaa ★★★
() автор топика

$class = 'TestTable';

$class::showFuck();

Разврат какой....

r_asian ★☆☆
()
Ответ на: комментарий от trashymichael

> может я не прав, но каноничнее будет передавать массив Array($class_name, $method) в качестве колбека

Я пробовал, но так он не понимает.

VirRaa ★★★
() автор топика
Ответ на: комментарий от VirRaa

хотя я предполагаю на чем ты мог погореть, $class_name и $method должны быть строками, мог ты делать Array(ClassName... ?

trashymichael ★★★
()
Ответ на: комментарий от VirRaa

вобщем

michael@red:~/tmp$ cat class_callback.php 
<?php

	class test {
		public static function blah() {
			echo __CLASS__, PHP_EOL;
		}
	}

	test::blah();
	echo (int) is_callable(Array("test", "blah")), PHP_EOL;
	call_user_func(Array("test", "blah"));

michael@red:~/tmp$ php class_callback.php 
test
1
test
michael@red:~/tmp$ 

trashymichael ★★★
()

хватит плодить говнокод. это что, такой фееричный вариант реализации позднего связывания? намекает на кривую архитектуру

heisenberg ★★
()
Ответ на: комментарий от heisenberg

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

trashymichael ★★★
()
Ответ на: комментарий от heisenberg

А в чём говнокод? Ты у нас libastral успешно подключил, и не видя контекста всего приложения может выводы делать?

VirRaa ★★★
() автор топика
Ответ на: комментарий от heisenberg

>такой фееричный вариант реализации позднего связывания?

Обычная рефлексия. А что, в каком-то языке есть варианты лучше? :)

KRoN73 ★★★★★
()
Ответ на: комментарий от VirRaa

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

http://php.net/manual/ru/function.call-user-func.php

Методы класса также могут быть вызваны статически при передаче array($classname, $methodname) в качестве параметра function.


и никаких замечаний о версиях там нет, так что должно работать везде

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

Ну, я довольно часто такое практикую :) Скажем:

function object_property_args($object, $property, $args = array(), $def = NULL)
{
    if(is_object($object))
        return call_user_func_array(array($object, $property), $args);

    return $def;
}

или

        return call_user_func(
            array($object->page_template_class(), 'fetch'),
            $page_template,
            $data);
    function title()
    {
        return $this->id() ?
            ec('Редактирование ').call_user_func(array($this->main_class(), 'class_title_rp'))
            : ec('Добавление ').call_user_func(array($this->main_class(), 'class_title_rp'))
        ;
    }

ну и т.д. :)

KRoN73 ★★★★★
()
Ответ на: комментарий от thesame

>в 5.3 так работает

Такая форма записи чуть раньше появилась. Но не очень давно. То ли в 5.1.x, то ли в 5.2.x

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

странновато, page_template_class, не понимат... в нормальных фреймворках это по-другому работает, а тут получается
class IndexPageTemplate
class UserPageTemplate
или что?

trashymichael ★★★
()
Ответ на: комментарий от trashymichael

>или что?

Ну, если коротко, то любая страница сайта состоит обычно [в смысле — у меня] из двух сущностей. Общая часть страниц сайта (хедеры-футеры), внутренне название «page» и, собственно, тело страницы, «body». Соответственно, у каждой компонента может быть свой шаблон, свои данные и, более того, свой рендерер. «Внешний» шаблон страницы может отрабатывать, скажем, на Twig'е, а «внутренний» шаблон тела, например, с целью оптимизации — на чистом PHP. Хотя у меня чаще всего и там, и там используется Smarty2/3.

class IndexPageTemplate

class UserPageTemplate



Скорее всего это будет class project_main и class project_user_view :) Хотя я не понял вопроса.

KRoN73 ★★★★★
()
1 июля 2011 г.

не public static showFuck(), а public static function showFuck()

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.