Мне было интересно, как я должен интерпретировать следующий код (источник: http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php)
<?php
class MyClass
{
protected function myFunc() {
echo "MyClass::myFunc()\n";
}
}
class OtherClass extends MyClass
{
// Override parent's definition
public function myFunc()
{
// But still call the parent function
parent::myFunc();
echo "OtherClass::myFunc()\n";
}
}
$class = new OtherClass();
$class->myFunc();
?>
Мой вопрос: почему оператор разрешения области (‘::’) используется для доступа к родительской функции:
Родитель :: MyFunc ();
Для меня двойное двоеточие предлагает статический член / метод. При создании объекта OtherClass:
$ class = new OtherClass ();
будет новый экземпляр (объект) класса OtherClass. Но будет ли экземпляр родительского класса одновременно? Как мне это интерпретировать?
Я понимаю идею создания нового объекта из расширенного OtherClass, но как мне интерпретировать его родительский класс: как статический класс или как объект (копия класса)?
Я надеюсь, что мой вопрос имеет смысл.
Объект класса OtherClass
также является объектом класса MyClass
потому что класс OtherClass
расширяет класс MyClass
, Он имеет все свойства и методы MyClass
но некоторые из методов могут быть переопределены в OtherClass
,
Оператор разрешения области используется как для доступа к статическим членам класса, так и к методам (используя имя класса, self
или же static
), но также для доступа к методам, определенным в родительском классе (используя parent
).
parent::myFunc();
это не статический вызов, это немного сбивает с толку, что он использовал тот же оператор, хотя. Этот оператор нужен только в том случае, если вы переопределили метод и хотите вызвать родительский метод.
будет новый экземпляр (объект) класса OtherClass. Но будет ли экземпляр родительского класса одновременно? Как мне это интерпретировать?
Так как OtherClass
продолжается MyClass
один созданный вами объект является экземпляром обоих этих классов одновременно.