diff --git a/language/types/type-system.xml b/language/types/type-system.xml new file mode 100644 index 0000000..1d4b1e5 --- /dev/null +++ b/language/types/type-system.xml @@ -0,0 +1,273 @@ + + + + Система типів + + + PHP використовує номінальну систему типів із чітким поведінковим підтипізуванням. + Відношення підтипів перевіряється під час компіляції, + тоді як перевірка типів здійснюється динамічно під час виконання. + + + + Система типів PHP підтримує різні атомарні типи, + які можна комбінувати для створення складніших. + Деякі з цих типів можна використовувати в + оголошеннях типів. + + + + Атомарні типи + + Деякі атомарні типи є вбудованими й тісно інтегровані з мовою, + тому їх неможливо відтворити за допомогою користувацьких типів. + + + + Перелік базових типів: + + + Вбудовані типи + + + + Скалярні типи: + + + + + тип + bool + + + + + тип + int + + + + + тип + float + + + + + тип + string + + + + + + + тип + array + + + + + тип + object + + + + + тип + resource + + + + + тип + never + + + + + тип + void + + + + + Відносні типи класів: + self, parent та + static + + + + + Одиничні типи + + + + + false + + + + + true + + + + + + + Об'єднання типів + + + + + null + + + + + + + + + Користувацькі типи (часто називають класовими типами) + + + + + Інтерфейси + + + + + Класи + + + + + Перерахування + + + + + + + тип + callable + + + + + + + Скалярні типи + + Значення вважається скалярним, якщо воно має тип int, + float, string або bool. + + + + + Користувацькі типи + + Можна визначати власні типи за допомогою + інтерфейсів, + класів + та + перерахувань. + Вони вважаються користувацькими типами, або класовими типами. + Наприклад, можна визначити клас із назвою Elephant, + створити об’єкти цього типу, + а також оголосити функцію, яка приймає параметр типу Elephant. + + + + + + Складені типи + + Можна поєднувати кілька атомарних типів у складені. + PHP дозволяє комбінувати типи такими способами: + + + + + + Перетин класових типів (інтерфейсів і назв класів). + + + + + Об'єднання типів. + + + + + + Перетин типів + + Перетин типів приймає значення, які відповідають не одному, + а одночасно кільком класовим типам. + Окремі типи, що утворюють перетин, об’єднуються за допомогою символу &. + Тому перетин типів T, U та + V + записується як T&U&V. + + + + + Об'єднання типів + + Тип об'єднання приймає значення кількох різних типів, + а не лише одного. + Окремі типи, що утворюють об'єднання, поєднуються за допомогою символу + |. + Отже, тип об'єднання з типів T, U і + V + записується як T|U|V. + Якщо одним із компонентів є тип перетину, його беруть у дужки, + щоб записати у диз'юнктивній нормальній формі DNF: + T|(X&Y). + + + + + + Псевдоніми типів + + + PHP підтримує два псевдоніми типів: mixed та + iterable, які відповідають (у тому ж порядку) + об'єднанню типів + object|resource|array|string|float|int|bool|null + і Traversable|array. + + + + + PHP не підтримує користувацькі псевдоніми типів. + + + + + +