Я просто проверяю статическую/нестационарную концепцию ООП и нашел что-то странное.Как вызвать нестатический метод с использованием статического ключевого слова?
Я слышал, что вывод статического метода можно получить с помощью статического ключевого слова с оператором разрешения (: :). Но в моей программе я получаю значение нестатического метода, используя статическое ключевое слово. Может ли кто-нибудь объяснить программу? Я смущаюсь.
<?php
error_reporting(E_ALL);
class parentclass
{
protected function sum()
{
return 145;
}
}
class childclass extends parentclass
{
protected function sum()
{
return 125;
}
}
class grandchild extends childclass
{
function sum()
{
return 100;
}
function __construct()
{
echo static::sum(); // 100 as output but how
}
}
$obj = new grandchild();
?>
Кроме этого, если я делаю функции суммы() из ChildClass как статический, как
class childclass extends parentclass
{
protected static function sum()
{
return 125;
}
}
то и он дает роковую ошибку следующим образом:
Фатальная ошибка: Не удается сделать не static method parentclass :: sum() static в классе childclass
Но почему я не называю эту функцию.
Запуск его здесь: https://3v4l.org/ rfQSe показано 100 ... –
Да, на самом деле я сейчас редактировал имя функции. теперь sum() – Deep
Если вы не совсем уверены, когда статика полезна, постарайтесь избежать их. В вашем примере нет смысла использовать static. – DanFromGermany