ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Π₯отя пСрСчислСния построСны Π½Π° классах ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ пСрСчислСний Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹ состояния.

  • ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ дСструкторы Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.
  • НаслСдованиС Π½Π΅ поддСрТиваСтся. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡΠΌ нСльзя Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ.
  • БтатичСскиС свойства ΠΈΠ»ΠΈ свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ.
  • ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° пСрСчислСния Π½Π΅ поддСрТиваСтся, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ одноэлСмСнтными экзСмплярами.
  • ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ пСрСчислСнных Π½ΠΈΠΆΠ΅, Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹.
  • ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡΠΌ доступны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ:

  • ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ public, private ΠΈ protected.
  • БтатичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ public, private ΠΈ protected.
  • ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ public, private ΠΈ protected.
  • ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ любоС количСство интСрфСйсов.
  • К пСрСчислСниям ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π¦Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ TARGET_CLASS Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ сами пСрСчислСния. Π¦Π΅Π»Π΅Π²ΠΎΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ TARGET_CLASS_CONST Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ пСрСчислСний.
  • ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ __call, __callStatic, ΠΈ __invoke.
  • ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ __CLASS__ ΠΈ __FUNCTION__ Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ.

ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠ°Ρ константа ::class для Ρ‚ΠΈΠΏΠ° пСрСчислСния оцСниваСтся ΠΊΠ°ΠΊ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ пСрСчислСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ любоС пространство ΠΈΠΌΡ‘Π½, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠ°Ρ константа ::class Π² экзСмплярС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ оцСниваСтся ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ пСрСчислСния, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° β€” экзСмпляр этого Ρ‚ΠΈΠΏΠ°.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ пСрСчислСния нСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово new ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ReflectionClass::newInstanceWithoutConstructor(). Оба способа ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ошибкС.

<?php

$clovers
= new Suit();
// Error: Cannot instantiate enum Suit

$horseshoes = (new ReflectionClass(Suit::class))->newInstanceWithoutConstructor()
// Error: Cannot instantiate enum Suit
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы