Major
Новичок
Перехват вызова статического метода PHP 5.2
Я вообще люблю играть с пхп и вот недавно тут наткнулся на такую особенность. Многие слышали что в PHP 5.3 добавлена функция __callStatic() для перехвата статических методов. Но вот в пхп 5.2 так же можно осуществить перехват, но с ограничениями.
Теперь в test.php можно писать так:
Вызов данного статического метода будет перехвачен как нестатического, что очень забавно. Это, конечно, относится к разряду "ХАКи", но все же забавная тема.
Незнаю, фича это или нет, но для меня лично это была действительно забавная фича, которая мне по началу мешала, так как я думал что законы физики поменяли, когда я замудрил код так, что там явно небыло видно как происходит вызов. Я не понял почему на вызов не вываливаются фатал ерроры =) Конечно это скорее баг, чем фича, но все же это фича =)
Более того, если сделать вызов существующего метода нестатического, тон тоже будет вызван, при этом никакой стрикт-мод вамне помаешает и не сгенерит нотисы. А в методе так же будет работать $this.
ВЕРДИКТ. Внутри методов можно делать вызовы нестатических методов данного класса через оператор статического доступа. Это позволяет запутать кодера, а так же позволяет сократить запись и сделать ее более красивой =) Вот как-то так...
Я вообще люблю играть с пхп и вот недавно тут наткнулся на такую особенность. Многие слышали что в PHP 5.3 добавлена функция __callStatic() для перехвата статических методов. Но вот в пхп 5.2 так же можно осуществить перехват, но с ограничениями.
PHP:
class F
{
private static $_Instance;
private function __construct() {}
public static function I()
{
self::$_Instance instanceof self
or self::$_Instance = new self;
return self::$_Instance;
}
public function inc($file)
{
return include $file;
}
public function __call($name, $args)
{
var_dump( $name, $args );
}
}
F::I()->inc('test.php');
PHP:
F::undefined_foo();
Вызов данного статического метода будет перехвачен как нестатического, что очень забавно. Это, конечно, относится к разряду "ХАКи", но все же забавная тема.
Незнаю, фича это или нет, но для меня лично это была действительно забавная фича, которая мне по началу мешала, так как я думал что законы физики поменяли, когда я замудрил код так, что там явно небыло видно как происходит вызов. Я не понял почему на вызов не вываливаются фатал ерроры =) Конечно это скорее баг, чем фича, но все же это фича =)
Более того, если сделать вызов существующего метода нестатического, тон тоже будет вызван, при этом никакой стрикт-мод вамне помаешает и не сгенерит нотисы. А в методе так же будет работать $this.
ВЕРДИКТ. Внутри методов можно делать вызовы нестатических методов данного класса через оператор статического доступа. Это позволяет запутать кодера, а так же позволяет сократить запись и сделать ее более красивой =) Вот как-то так...