class — PHP родительский оператор разрешения области видимости

Мне было интересно, как я должен интерпретировать следующий код (источник: 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, но как мне интерпретировать его родительский класс: как статический класс или как объект (копия класса)?

Я надеюсь, что мой вопрос имеет смысл.

1

Решение

Объект класса OtherClass также является объектом класса MyClass потому что класс OtherClass расширяет класс MyClass, Он имеет все свойства и методы MyClass но некоторые из методов могут быть переопределены в OtherClass,

Оператор разрешения области используется как для доступа к статическим членам класса, так и к методам (используя имя класса, self или же static), но также для доступа к методам, определенным в родительском классе (используя parent).

1

Другие решения

parent::myFunc(); это не статический вызов, это немного сбивает с толку, что он использовал тот же оператор, хотя. Этот оператор нужен только в том случае, если вы переопределили метод и хотите вызвать родительский метод.

будет новый экземпляр (объект) класса OtherClass. Но будет ли экземпляр родительского класса одновременно? Как мне это интерпретировать?

Так как OtherClass продолжается MyClass один созданный вами объект является экземпляром обоих этих классов одновременно.

0

По вопросам рекламы [email protected]