From 6bb412cac8044f58e3fa2a124883d42c2eecc845 Mon Sep 17 00:00:00 2001 From: "S. Bondarenko" Date: Sat, 22 Mar 2025 16:13:11 +0200 Subject: [PATCH 1/4] =?UTF-8?q?=D0=A3=D0=BA=D1=80=D0=B0=D1=97=D0=BD=D1=81?= =?UTF-8?q?=D1=8C=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=BB?= =?UTF-8?q?=D0=B0=D0=B4:=20language/types/type-system?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- language/types/type-system.xml | 273 +++++++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 language/types/type-system.xml diff --git a/language/types/type-system.xml b/language/types/type-system.xml new file mode 100644 index 0000000..ba484a7 --- /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 or 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 не підтримує користувацькі псевдоніми типів. + + + + + + From 3e1367c342991946da8defa8d18ef85f3c86445b Mon Sep 17 00:00:00 2001 From: web-svb <47003509+web-svb@users.noreply.github.com> Date: Sat, 22 Mar 2025 21:24:23 +0200 Subject: [PATCH 2/4] Update language/types/type-system.xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply reviewer suggestions from @Menelion Co-authored-by: André Polykanine --- language/types/type-system.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/types/type-system.xml b/language/types/type-system.xml index ba484a7..a304aea 100644 --- a/language/types/type-system.xml +++ b/language/types/type-system.xml @@ -93,7 +93,7 @@ Відносні типи класів: - self, parent, та + self, parent та static From 4552cd0c25afbca616b30f98615f97ae362504e2 Mon Sep 17 00:00:00 2001 From: web-svb <47003509+web-svb@users.noreply.github.com> Date: Sat, 22 Mar 2025 21:24:47 +0200 Subject: [PATCH 3/4] Update language/types/type-system.xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply reviewer suggestions from @Menelion Co-authored-by: André Polykanine --- language/types/type-system.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/types/type-system.xml b/language/types/type-system.xml index a304aea..1ff6d07 100644 --- a/language/types/type-system.xml +++ b/language/types/type-system.xml @@ -163,7 +163,7 @@ Скалярні типи Значення вважається скалярним, якщо воно має тип int, - float, string or bool. + float, string або bool. From 0dd2f494f2e5d730143ae85fbe3cde6476285db7 Mon Sep 17 00:00:00 2001 From: web-svb <47003509+web-svb@users.noreply.github.com> Date: Sat, 22 Mar 2025 21:24:58 +0200 Subject: [PATCH 4/4] Update language/types/type-system.xml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Apply reviewer suggestions from @Menelion Co-authored-by: André Polykanine --- language/types/type-system.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/types/type-system.xml b/language/types/type-system.xml index 1ff6d07..1d4b1e5 100644 --- a/language/types/type-system.xml +++ b/language/types/type-system.xml @@ -209,7 +209,7 @@ Перетин типів приймає значення, які відповідають не одному, а одночасно кільком класовим типам. Окремі типи, що утворюють перетин, об’єднуються за допомогою символу &. - Тому перетину типів T, U та + Тому перетин типів T, U та V записується як T&U&V.