crocodile2u
http://vbolshov.org.ru
php 5-3, late-static-binding
Играюсь с новой версией языка. Вот смотрите, какая штука:
Вот что этот код выводит:
Между тем, на мой взгляд, было бы логичнее, если вывод был таким:
Мне кажется, логичнее было бы в данном случае изменять значение статического свойства для того класса, у которого вызывается метод setP() - и его потомков. Что думаете по этому поводу Вы?
ЗЫ. Если объявить static protected $p; в каждом из классов, унаследованных от Foo - поведение меняется, и, насколько я понимаю, объявляя или "умалчивая" это свойство - можно добиться того поведения, которое мне кажется логичным.
Играюсь с новой версией языка. Вот смотрите, какая штука:
Код:
<?php
class Foo {
static protected $p = 1;
static function setP($p)
{
static::$p = $p;
}
static function printP()
{
echo get_called_class() . '::$p : ' . static::$p . "\n";
}
}
class Bar extends Foo {
}
class Baz extends Foo {
}
Foo::printP();
Bar::printP();
Baz::printP();
Bar::setP(2);
Foo::printP();
Bar::printP();
Baz::printP();
?>
Код:
Foo::$p : 1
Bar::$p : 1
Baz::$p : 1
Foo::$p : [b]2[/b]
Bar::$p : [b]2[/b]
Baz::$p : [b]2[/b]
Код:
Foo::$p : 1
Bar::$p : 1
Baz::$p : 1
Foo::$p : 1
Bar::$p : [b]2[/b]
Baz::$p : 1
ЗЫ. Если объявить static protected $p; в каждом из классов, унаследованных от Foo - поведение меняется, и, насколько я понимаю, объявляя или "умалчивая" это свойство - можно добиться того поведения, которое мне кажется логичным.