Код (PHP): <?php class A { public static function who() { echo __CLASS__; } public static function test() { self::who(); } } class B extends A { public static function who() { echo __CLASS__; } } B::test(); ?> Результат выполнения данного примера: A вопрос такой- как заранее понять нужно использовать self или сразу static? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Используй self для вызова метода в контексте родителя, и static для вызова в контексте наследника, вот и всё =) Добавлено спустя 1 минуту 7 секунд: http://php.ru/manual/language.oop5.late-static-bindings.html
хм.. вроде как такого не должно быть. по логике. переписали бы этот РНР, что бы к свойству объекта обращатся можно было через точку как в JS и C#, ну и вообще..
у тебя есть некоторый метод или свойство в некотором классе и есть класс который расширяет первый. если ты будешь обращаться через $this то это будут переменные экземпляра этих классов, parent указывает на родительский класс, через static:: - обращение на этапе после статического связывания - контекст дочернего класса, через self:: - контекст класса в котором идет данное определение. пример выше работает примерно так: идет обращение к статическому методу тест() класса Б. метода там такого не описано, зато он унаследован от класса А. self в контексте класса А ссылается на класс А поэтому и вывод дается А. если бы там было статик - контекст бы поменялся бы на класс в котором идет вызов - Б - и на экране было бы Б. примерно так.
меня волнует другое- как заранее узнать что в методе test нужно использовать self или static я ведь не могу знать заранее захотят расширять класс А или нет