_call метода родителя

Sandrain

Новичок
здравствуйте у меня вопрос
есть такой класс

PHP:
class Magic extends PhpThumbFactory
{

    public function __call($method, $args) {

         echo $method;

        }

}
Вызываю я его так
PHP:
$thumb = new Magic;
         $thumb->create(path);
create это метод класса PhpThumbFactory

Господа, скажите как мне внутри Magic класса, не затрагивая PhpThumbFactory
Логировать вызов методов PhpThumbFactory
т.е. в данном случае внутри Magic я бы хотел бы в string'говом виде получить create и path
что-то вроде _call($method,$args)

в примере выше мне почему-то выводит в качестве переменной $method слово "init"

можно ли это сделать? спасибо
 

Redjik

Джедай-мастер
Вообще должна ошибка выпадать.

И еще я бы проверил родителя на предмет существования метода create.
 

A1x

Новичок
вообще то никак, то что вы хотите это АОП, с помощью __call этого сделать нельзя

init может выводиться потому что create например вызывает несуществующий метод с таким именем, это надо смотреть код PhpThumbFactory
 

Redjik

Джедай-мастер
вообще то никак, то что вы хотите это АОП, с помощью __call этого сделать нельзя

init может выводиться потому что create например вызывает несуществующий метод с таким именем, это надо смотреть код PhpThumbFactory
__call же оверрайдится
 

Ragazzo

TDD interested
A1x
Иван Redjik Матвеев
PHP:
class Magic 
{

    public function __call($method, $args) 
	{

        echo __METHOD__;

    }
	
	private function create()
	{
		echo __METHOD__;
	}

} 
$thumb = new Magic;
$thumb->create();
//output Magic::__call
Метод существует для объекта $thumb.
php-net:
В контексте объекта при вызове недоступных методов вызывается метод __call().
просто для разъяснения.
 

Redjik

Джедай-мастер
Ragazzo
перефразирую
И еще я бы проверил родителя и сам класс на предмет существования публичного метода create.
=)))

ЗЫ. оффтоп - всех с прошедшим праздником =)
 

Ragazzo

TDD interested
Иван Redjik Матвеев
И еще я бы проверил родителя и сам класс на предмет существования метода create.
зачем, если итак вызовется __call, если метод неопределен м?
 

Redjik

Джедай-мастер
Ragazzo
Да не мой это вопрос =)))
Я даже и не думал что это c yii связано.

У меня xDebugger и нет проблем =)

ЗЫ. кстати - нормальный ответ =)
 

Sandrain

Новичок
Спасибо всем за ответы.
Конкретней что я хочу сделать - это ресайз картинок

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

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

AmdY

Пью пиво
Команда форума
Sandrain
могу предложить одно извращение - использовать декоратор проксирующий вызовы на нужный объект
PHP:
class Decorator_Loger
{

    protected $object;

    public function __construct($object)
    {
        $this->object = $object;
    }

    public function __call($name, $arguments)
    {
        return call_user_func_array(array($this->object, $name), $arguments);
    }

}
 

Sandrain

Новичок
AmdY, я к этому и пришёл
но есть одна загвоздка

PHP:
$test = new Decorator_Loger;
$test->create(blabla);
сработает как нужно
PHP:
$test->create(blabla)->resize(blabla);
уже не сработает потому что resize уже будет в обход класса-логера
 
Сверху