Разлики од објекти
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Разлики од објекти
Референца за `language.enumerations.object-differences.php` со подобрена типографија и навигација.
Разлики од објекти
Иако Enum-ите се базираат на класи и објекти, тие не поддржуваат сета функционалност поврзана со објекти. Особено, Enum случаите не смеат да имаат состојба.
- Конструкторите и Деструкторите се забранети.
- Наследувањето не е поддржано. Enum-ите не смеат да наследуваат ниту да бидат наследени.
- Статичките или објектните својства не се дозволени.
- Клонирањето на Enum случај не е поддржано, бидејќи случаите мора да бидат синглтон инстанци.
- Магичните методи, освен оние наведени подолу, се забранети.
- Enum-ите мора секогаш да бидат декларирани пред да се користат.
Следната објектна функционалност е достапна и се однесува исто како и на кој било друг објект:
- Јавни, приватни и заштитени методи.
- Јавни, приватни и заштитени статички методи.
- Јавни, приватни и заштитени константи.
- Enum-ите може да имплементираат кој било број на интерфејси.
-
Enum-ите и случаите може да имаат attributes прикачено на нив. Филтерот за
TARGET_CLASSцел ги вклучува самите Enum-и. Филтерот заTARGET_CLASS_CONSTцел ги вклучува Enum случаите. - __call, __callStaticПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во __invoke магични методи
__CLASS__and__FUNCTION__константите се однесуваат како нормални
На ::class магични константи на Enum тип се проценуваат на името на типот вклучувајќи го и секој простор на имиња, исто како и објект. Магичната константа на инстанца на Случај исто така се проценува на Enum типот, бидејќи тоа е инстанца на тој тип. ::class
магичната константа на инстанца Case исто така се проценува на типот Enum, бидејќи е инстанца на тој тип.
Дополнително, enum случаите не можат директно да се инстанцираат со new, ниту со
(PHP 5 >= 5.1.3, PHP 7, PHP 8) во рефлексија. И двете ќе резултираат со грешка.
<?php
$clovers = new Suit();
// Error: Cannot instantiate enum Suit
$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// Error: Cannot instantiate enum Suit
?>