успадкування

Спадкування - це принцип програмування, що добре зарекомендував себе, і PHP використовує цей принцип у своїй об'єктній моделі. Цей принцип вплине на те, як багато класів та об'єктів пов'язані один з одним.

Наприклад, при розширенні класу дочірній клас успадковує всі загальнодоступні та захищені методи, властивості та константи батьківського класу. Доки ці методи не будуть перевизначені, вони зберігатимуть свою вихідну функціональність.

Це корисно для визначення та абстрагування функціональності та дозволяє реалізувати додаткову функціональність у схожих об'єктах без необхідності реалізовувати всю загальну функціональність.

Закриті методи батьківського класу недоступні дочірньому класу. В результаті дочірні класи можуть повторно реалізувати закритий метод без урахування звичайних правил наслідування. Однак до PHP 8.0.0 до закритих методів застосовувалися обмеження finalиstatic. Починаючи з PHP 8.0.0, єдине обмеження закритого методу, яке застосовується - це конструктори private finalоскільки це звичайний спосіб "відключити" конструктор при використанні замість нього статичних фабричних методів.

Видимість методів, властивостей та констант можна послабити, наприклад, захищений метод може бути позначений як загальнодоступний, але не можна обмежити видимість, наприклад, не можна помітити загальнодоступне властивість як закрите. Винятком є ​​конструктори, видимість яких може бути обмежена, наприклад, загальнодоступний конструктор може бути помічений як закритийв дочернем классе.

Зауваження :

Якщо автозавантаження не використовується, класи повинні бути оголошені до того, як вони будуть використовуватися. Якщо клас розширює інший, то батьківський клас має бути оголошено до наступного класу. Це правило застосовується до класів, які успадковують інші класи чи інтерфейси.

Зауваження :

Не дозволяється перевизначати властивість читання-запису за допомогою readonly-властивостіили наоборот.

Loading...

Приклад #1 Приклад наслідування

Loading...

Сумісність типів значень, що повертаються, з внутрішніми класами

До PHP 8.1.0 більшість внутрішніх класів або методів не оголошували свої типи значень, що повертаються, і при їх розширенні допускався будь-який тип значення, що повертається.

Починаючи з PHP 8.1.0, більшість внутрішніх методів почали "попередньо" оголошувати тип значення, що повертається. У цьому випадку тип значення методів, що повертається, повинен бути сумісний з розширюваним батьком; в іншому випадку видається повідомлення про старіння. Зверніть увагу, що відсутність явного оголошення типу значення, що повертається, також вважається невідповідністю сигнатури і, відповідно, призводить до повідомлення про старіння.

Якщо тип повертаного значення не може бути оголошений для перевизначуваного методу через проблеми сумісності з різними версіями PHP, може бути доданий атрибут ReturnTypeWillChange, щоб заглушити повідомлення про старіння.

Приклад #2 Перевизначальний метод не оголошує ніякого типу значення, що повертається

Loading...

Приклад #3 Перевизначальний метод оголошує неправильний тип значення, що повертається

Loading...

Приклад #4 Перевизначальний метод оголошує неправильний тип значення, що повертається без повідомлення про старіння

Loading...