Ответ 1
Child has foo() Parent has foo()
self::foo() YES YES Child foo() is executed
parent::foo() YES YES Parent foo() is executed
self::foo() YES NO Child foo() is executed
parent::foo() YES NO ERROR
self::foo() NO YES Parent foo() is executed
parent::foo() NO YES Parent foo() is executed
self::foo() NO NO ERROR
parent::foo() NO NO ERROR
Если вы ищете правильные случаи для их использования. parent
разрешает доступ к унаследованному классу, тогда как self
является ссылкой на класс, к которому принадлежит метод (статический или другой).
Популярное использование ключевого слова self
при использовании шаблона Singleton в PHP, self
не выполняет дочерние классы, тогда как static
делает New self vs. новый статический
parent
предоставляет возможность доступа к унаследованным методам класса, часто полезно, если вам нужно сохранить некоторые функции по умолчанию.