Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
является одновременно объектом, массивом и методом
Прочитав недавно нововведения PHP 5.3, я обратил внимание на несколько интересных особенностей, скомпоновав которые можно получить реализацию шаблона проектирования Observer, гораздо красивее, чем имеющиеся в pear и symfony
Боюсь, что для этого придётся применить костыль и я буду очень признателен, если кто-то предложит решение более красивое.
<?php
class Event
{
public function __invoke()
{
var_dump(__METHOD__);
}
}
class a
{
public $onBB = null;
public function __construct()
{
$this->onBB = new Event;
}
public function q()
{
$this->onBB->__invoke();
}
}
$q = new a;
$q->q(); // string(15) "Event::__invoke"
$q->onBB = function() {
var_dump(__METHOD__);
};
$q->q(); // string(9) "{closure}"
<?php
function foo($a, $b)
{
$v = func_get_args();
for ($i=0;$i<func_num_args();$i++) echo $i,' ',$v[$i].PHP_EOL;
}
foo('sdf',4,'46',array(1,2,3));
С тем же успехом можно было бы писать fireEvent и эта реализация ничем не отличалась бы от сотен предложенных ранее.
<?
//....
public function something() {
$e = $this->onBB:
$e($arg1, $arg2);
}
//...
Реализация паттерна Observer средствами PHP 5.3