Абстрактный класс в php, вызывающий собственный статический метод ($this vs 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