Когда я расширяю класс, я вызываю статические функции непосредственно из подтипа или я должен использовать parent :: каждый раз? - PullRequest
0 голосов
/ 17 ноября 2011

Когда я определил функцию в супертипе и вызвал ее без родителя :: он дал мне сообщение об ошибке и сообщил, что это неопределенная функция. Мне интересно, должен ли я использовать parent :: каждый раз, или я делаю что-то не так в другом месте.

У меня есть класс с именем core, в котором есть функция escape () для экранирования строк Я пытаюсь вызвать эту функцию из подтипов. все методы являются статическими.

Сейчас я не думаю, что статические методы наследуются. Я вызываю все статические методы суперкласса с

parent::mystaticmethod() 

сейчас. Потому что статические методы не наследуются.

1 Ответ

4 голосов
/ 17 ноября 2011

используйте parent:: только тогда, когда вы собираетесь переопределить функцию в своем дочернем классе

Лучший способ объяснить это в следующем примере:

class Parent {
    function test1() {}    
    function test2() {}
    function __construct() {}
}

class Child extends Parent {
    function test1() {}  // function is overrided
    function test3() {
        parent::test1(); // will use Parent::test1()
        $this->test1();  // will use Child::test1()
        $this->test2();  // will use Parent:test2()
    }
    function __construct() {
        parent::__construct() // common use of parent::
        ... your code.
    }
}

Практическипример (статические методы):

class LoaderBase {
    static function Load($file) {
        echo "loaded $file!<br>";
    }
}

class RequireLoader extends LoaderBase {
    static function Load($file) {
        parent::Load($file);
        require($file);
    }
}

class IncludeLoader extends LoaderBase {
    static function Load($file) {
        parent::Load($file);
        include($file);
    }
}

LoaderBase::Load('common.php'); // this will only echo text
RequireLoader::Load('common.php'); // this will require()
IncludeLoader::Load('common.php'); // this will include()

Output:
loaded common.php!
loaded common.php!
loaded common.php!

В любом случае использование parent :: более полезно в нестатических методах.

Начиная с PHP 5.3.0, в PHP реализована функция, называемая поздними статическими привязками.который может использоваться для ссылки на вызываемый класс в контексте статического наследования.

Больше информации здесь http://php.net/manual/en/language.oop5.late-static-bindings.php

...