Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.227.194] |
|
Сообщ.
#1
,
|
|
|
class A { private static $a = 313; private static function f( ) { echo '<h3>A::f( ) is called! current class ="',get_called_class( ),'", $a = "',self::$a,'", self::h( ) = "',B::h( ),'"</h3>'; } private static function h( ) { echo '<b style="color:#d00;">A::h( ) is called! current class ="',get_called_class( ),'"</b>'; } public static function p( ) { self::f( ); } } class B extends A { } B::p( ); B::h( ); А к переменной $a только через self::$a. Не пому в чём разница между $a и h( ) |
Сообщ.
#2
,
|
|
|
В механизме наследования, вестимо.
Добавлено $r = new ReflectionClass('B'); print_r($r->getStaticProperties()); print_r($r->getMethods()); В итоге: все private методы из A присутствуют в B, но private свойств там нет. |
Сообщ.
#3
,
|
|
|
Так я и расчитывал, что private метод, как и private свойство будет доступно только классу, в котором они объявлены. А тут такая лажа.
Мне нужно, чтоб при вызове private метода f( ) текущим классом get_called_class( ) был класс "A", поэтому вызываю метод через self::f( ); А он не помогает. Приходится явно указывать A::f( ); забыл указать : Windows XP, PHP 5.3.24 |
Сообщ.
#4
,
|
|
|
Цитата K313 @ В смысле? Они и так доступны только классу, в котором они объявлены. Просто проверка идёт не по ключевому слову, а по факту наличия методов в классах.читывал, что private метод, как и private свойство будет доступно только классу, в котором они объявлены. А тут такая лажа. Цитата K313 @ В описании get_called_class вполне ясно написано, что она выводит, а для твоих целей нужна константа __CLASS__ Мне нужно, чтоб при вызове private метода f( ) текущим классом get_called_class( ) был класс "A" |
Сообщ.
#5
,
|
|
|
да, это я тормознул. я чёта всегда думал, что задавая parent:: static:: или self:: - я устанавливаю новый текущий класс.
Ща вроде разобрался, get_called_class( ) возвращает класс с которого началась цепочка поиска вызванного метода. А parent:: static:: или self:: - этот класс не меняют, а только указывают с какого класса начинать поиск метода. Нарисовал схемку, всё правильно? |