Абстрактен клас в php, извикващ собствен статичен метод ($this срещу self)

Чудех се коя ключова дума е правилна в абстрактен php клас, когато извиквам собствената му статична функция.

Ето опростения код и тествах и двете ключови думи - и двете работят, но коя е технически правилна?

<?php
abstract class B extends A{
    function a(){
        self::b("test"); //'self::' vs '$this->'
    }

    static function b($string){
        echo "test";
    }
}
?>

Доколкото разбирам, ако функцията е статична, тя трябва да използва себе си в собствения си клас, за да извика статични функции. Също така абстрактното означава, че не може да има екземпляр на този клас, така че няма ли $this да е невалидно, въпреки че работи без предупреждения?

Благодаря

Този въпрос е различен от възможния дубликат, защото използвам абстрактни класове, които не могат да имат свои собствени екземпляри. Разбирам разликата между self и this, но кой да използвам в този конкретен случай е това, което се опитвах да разбера, тъй като и двата случая работят.


person Dima    schedule 25.09.2015    source източник
comment
възможен дубликат на Къде е разликата между self и $this-› в PHP клас или PHP метод?   -  person Rabbit Guy    schedule 25.09.2015


Отговори (1)


Използвайте self, същото е дали класът е abstract или не. $this е за екземпляр на класа, който също е валиден за използване в клас abstract, ако е инстанциран чрез конкретен подклас.

person quickshiftin    schedule 25.09.2015
comment
Страхотен. Използвам тази функция b() както в инстанцирани подкласове, така и статично, така че предполагам, че използването на self:: би било най-безопасното. - person Dima; 26.09.2015