ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 8.2

Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° бСшС прСдставСна вСрсията Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ PHP 8.2. Новият ΠΊΠ»ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π²Π° сСрия ΠΎΡ‚ Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ няколко ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π°Ρ‚ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚Ρ‚Π°.

ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ подобрСния Π² PHP 8.2:

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ Π½Π° клас ΠΊΠ°Ρ‚ΠΎ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅. Бвойствата Π² Ρ‚Π°ΠΊΠΈΠ²Π° класовС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ само вСднъТ, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ няма Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° промяна. ΠŸΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° свойствата Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½ΠΈΡ‚Π΅ класовС ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½ΠΈ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅, Π½ΠΎ сСга ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΆΠΈΠΌ Π·Π° всички свойства Π½Π° класа навСднъТ. Π£ΠΊΠ°Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π»Π°Π³Π° "само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅" Π½Π° Π½ΠΈΠ²ΠΎ клас ΡΡŠΡ‰ΠΎ Π±Π»ΠΎΠΊΠΈΡ€Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎΡ‚ΠΎ добавянС Π½Π° свойства към класа. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'Π³Ρ€Π΅ΡˆΠ½ΠΎ'; // Π“Ρ€Π΅ΡˆΠΊΠ°: НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС създадС Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ свойство Post::$unknown
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ β€žtrueβ€œ, β€žfalseβ€œ ΠΈ β€žnullβ€œ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ само Π΅Π΄Π½Π° Π²Π°Π»ΠΈΠ΄Π½Π° стойност ΠΈ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° функция с Ρ„Π»Π°Π³ Π·Π° ΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡ€Π°Π·Π½Π° стойност. ΠŸΡ€Π΅Π΄ΠΈ β€žtrueβ€œ, β€žfalseβ€œ ΠΈ β€žnullβ€œ ΠΌΠΎΠΆΠ΅Ρ…Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ само във Π²Ρ€ΡŠΠ·ΠΊΠ° с Π΄Ρ€ΡƒΠ³ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€žstring|falseβ€œ), Π½ΠΎ сСга Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ: function alwaysFalse(): false { return false ; }
  • ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° чувствитСлни настройки Π² ΠΈΠ·Ρ…ΠΎΠ΄Π° Π·Π° прослСдяванС Π½Π° стСка ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°. Π˜Π·Ρ€ΡΠ·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° информация ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°Π»ΠΎΠΆΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ информацията Π·Π° възникнали Π³Ρ€Π΅ΡˆΠΊΠΈ сС ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄ΠΎ услуги Π½Π° Ρ‚Ρ€Π΅Ρ‚ΠΈ страни, ΠΊΠΎΠΈΡ‚ΠΎ прослСдяват ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π·Π° тях. НапримСр, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΎΡ‚ прослСдяванСто, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ потрСбитСлски ΠΈΠΌΠ΅Π½Π°, ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата. тСст Π½Π° функцията ($foo, #[\SensitiveParameter] $password, $baz) { Ρ…Π²ΡŠΡ€Π»Ρ Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ('Π“Ρ€Π΅ΡˆΠΊΠ°'); } test('foo', 'password', 'baz'); Π€Π°Ρ‚Π°Π»Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°: НСуловСно ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Π“Ρ€Π΅ΡˆΠΊΠ° Π² test.php:8 ΠŸΡ€ΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° стСка: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} Ρ…Π²ΡŠΡ€Π»Π΅Π½ Π² test.php ΠΎΠ½Π»Π°ΠΉΠ½ 8
  • ПозволСно Π΅ Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Ρ‚ константи Π² ΠΏΡ€ΠΈΠ·Π½Π°Ρ†ΠΈ (характСристика, ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄). ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΡ‚Π΅, Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² характСристика, ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Ρ‡Ρ€Π΅Π· класа, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° характСристиката (Π½ΠΎ Π½Π΅ ΠΈ Ρ‡Ρ€Π΅Π· ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° характСристиката). Ρ‡Π΅Ρ€Ρ‚Π° Foo { public const CONSTANT = 1; ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Π° функция bar(): int { return self::CONSTANT; // Π€Π°Ρ‚Π°Π»Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡƒΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² Π΄ΠΈΠ·ΡŽΠ½ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° Π½ΠΎΡ€ΠΌΠ°Π»Π½Π° Ρ„ΠΎΡ€ΠΌΠ° (DNF, Disjunctive Normal Form), която Π²ΠΈ позволява Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΎΠ±Π΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ (ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ Π΄Π²Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ‚ΠΈΠΏΠ°) ΠΈ прСсичанСто Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ (Ρ‚ΠΈΠΏΠΎΠ²Π΅, Ρ‡ΠΈΠΈΡ‚ΠΎ стойности ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ ΠΏΠΎΠ΄ няколко Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } Π²ΡŠΡ€Π½Π΅ $entity; }}
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π΅ Π½ΠΎΠ²ΠΎ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ β€žRandomβ€œ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ класовС Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° псСвдослучайни числа ΠΈ послСдоватСлности. ΠœΠΎΠ΄ΡƒΠ»ΡŠΡ‚ прСдоставя ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ интСрфСйс, позволява Π²ΠΈ Π΄Π° ΠΈΠ·Π±ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ машини Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° псСвдослучайни числа, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π°, подходящи Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² криптографията, ΠΈ прСдоставя ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ смСсванС Π½Π° масиви ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅, ΠΈΠ·Π±ΠΎΡ€ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° масиви, Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° няколко Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° със собствСно нСзависимо ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅. $rng = $is_production? Π½ΠΎΠ² Random\Engine\Secure() : Π½ΠΎΠ² Random\Engine\Mt19937(1234); $randomizer = Π½ΠΎΠ² Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ нСзависимо ΠΎΡ‚ Π»ΠΎΠΊΠ°Π»Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Π³Π»Π°Π²Π½ΠΈ Π±ΡƒΠΊΠ²ΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°Ρ‚ΠΎ strtolower() ΠΈ strtoupper() сСга Π²ΠΈΠ½Π°Π³ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚ Π³Π»Π°Π²Π½ΠΈΡ‚Π΅ ΠΈ Π³Π»Π°Π²Π½ΠΈ Π±ΡƒΠΊΠ²ΠΈ Π½Π° Π·Π½Π°Ρ†ΠΈΡ‚Π΅ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ASCII, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π»ΠΎΠΊΠ°Π» Π½Π° "C".
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΈ са Π½ΠΎΠ²ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ създаванС Π½Π° свойства Π² клас Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π°. Π’ PHP 9.0 Π΄ΠΎΡΡ‚ΡŠΠΏΡŠΡ‚ Π΄ΠΎ свойства, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Π² класа, Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³Ρ€Π΅ΡˆΠΊΠ° (ErrorException). ΠšΠ»Π°ΡΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставят __get ΠΈ __set ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° създаванС Π½Π° свойства ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ свойства Π² stdClass, Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Ρ‚ Π΄Π° работят Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, Ρ‰Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° само косвСна Ρ€Π°Π±ΠΎΡ‚Π° с Π½Π΅ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ свойства, Π·Π° Π΄Π° сС Π·Π°Ρ‰ΠΈΡ‚ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΎΡ‚ скрити Π³Ρ€Π΅ΡˆΠΊΠΈ. Π—Π° Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° стария ΠΊΠΎΠ΄, сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΡŠΡ‚ β€œ#[AllowDynamicProperties]”, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ свойства.
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° замСстванС Π½Π° стойности Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² Π½ΠΈΠ·ΠΎΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ "${var}" ΠΈ ${(var)}" Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½Π°. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ замСствания "{$var}" ΠΈ "$var" Π΅ Π·Π°ΠΏΠ°Π·Π΅Π½Π°. НапримСр: β€žΠ—Π΄Ρ€Π°Π²Π΅ΠΉ {$world}β€œ; OK "Π—Π΄Ρ€Π°Π²Π΅ΠΉ $world"; OK "Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ ${world}"; ΠžΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ: Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ${} Π² Π½ΠΈΠ·ΠΎΠ²Π΅ Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ
  • Частично ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ΠΈΡ‚Π΅ callables, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ΠΈ Ρ‡Ρ€Π΅Π· "call_user_func($callable)" са ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΈ, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° "$callable()": "self::method" "parent::method" "static :: method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar: :method "]
  • Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° error_log_mode Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към настройкитС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ€Π΅ΠΆΠΈΠΌΠ° Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ€Π΅Π³ΠΈΡΡ‚ΡŠΡ€Π° Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€