Как вызвать статическую дочернюю функцию из родительской статической функции?

Как вызвать дочернюю функцию из родительской статической функции?

В php5.3 существует встроенный метод get_called_class() для вызова метода child из родительского класса. Но мой сервер работает с php 5.1 .

Есть ли способ сделать это?

Я хочу вызвать его из статической функции. Так что я не могу использовать "$ this"

Поэтому я должен использовать ключевое слово «self».

Ниже пример моего родительского класса – «Test123», из статической функции родительского класса «myfunc» я пытаюсь вызвать функцию дочернего класса, такую ​​как «self :: test ()»;

 abstract class Test123 { function __construct() { // some code here } public static function myfunc() { self::test(); } abstract function test(); } class Test123456 extends Test123 { function __construct() { parent::__construct(); } function test() { echo "So you managed to call me !!"; } } $fish = new Test123456(); $fish->test(); $fish->myfunc(); 

Изменить. То, чего вы пытаетесь достичь, невозможно с PHP 5.1. В PHP 5.1 нет поздних статических привязок PHP Manual , вам нужно явно Test123456::test() дочерний класс для вызова дочерней функции: Test123456::test() , self будет Test123 в статической функции класса Test123 (всегда) и static ключевое слово недоступно для вызова статической функции в PHP 5.1.

Связано: новое я против нового статического ; PHP 5.2 эквивалентно позднему статическому привязке (новый статический)?


Если вы ссылаетесь на статическую родительскую функцию, вам нужно явно указать родительский (или дочерний) вызов функции в php 5.1:

 parentClass::func(); Test123456::test(); 

В PHP 5.3 вы можете сделать это вместо static ключевого слова PHP Manual для разрешения имени вызываемого класса:

 static::func(); static::test(); 

Если они нестатические, просто используйте $this руководство PHP :

 $this->parentFunc(); $this->childFunc(); 

Или, если он имеет то же имя, используйте parent руководство PHP :

 parent::parentFunc(); 

(что не совсем то, что вы просили, просто поместив его здесь для полноты).

Get_called_class () был введен для очень конкретных случаев, таких как поздние статические привязки PHP Manual .

См. « Наследование объектов». Руководство по PHP

Я подозреваю, что вы немного смущены abuot parent / child, class / object и function / method.

Ionuţ G. Stan предоставил объяснение, как вызвать метод, который не объявлен в родительском классе (который, как он говорит, должен быть абстрактным или реализовать метод __call ()).

Однако, если вы имеете в виду, как вызвать метод, который был переопределен в дочернем классе от родителя, тогда это невозможно – и не должно быть. Рассматривать:

 Class shape { ... } Class circle extends shape { function area() { } } Class square extends shape { function area() { } } 

Если вы намерены вызвать метод area на экземпляре «shape» (который не имеет метода области), то какой ребенок должен использовать его? Оба дочерних метода будут зависеть от свойств, которые не являются обычными / не реализованы классом формы.

попробуй это:

 <?php class A { public static function newInstance() { $rv = new static(); return $rv; } public function __construct() { echo " A::__construct\n"; } } class B extends A { public function __construct() { echo " B::__construct\n"; } } class C extends B { public function __construct() { echo " C::__construct\n"; } } ?>