eval

(PHP 4, PHP 5, PHP 7, PHP 8)

eval - Π ΠΎΠ·Ρ†Ρ–Π½ΡŽΡ” рядок як PHP-ΠΊΠΎΠ΄ Ρ– Π²ΠΈΠΊΠΎΠ½ΡƒΡ” ΠΉΠΎΠ³ΠΎ

Опис

eval(string $code): mixed

Π’ΠΈΠΊΠΎΠ½ΡƒΡ” ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρƒ Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ– code рядок як ΠΊΠΎΠ΄ PHP.

Π’ΠΈΠΊΠΎΠ½ΡƒΠ²Π°Π½ΠΈΠΉ ΠΊΠΎΠ΄ успадковує Ρ‚Ρƒ ΠΆ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимості Π·ΠΌΡ–Π½Π½ΠΎΡ—, Ρ‰ΠΎ Ρ– рядок, Π½Π° якому ΠΌΠΎΠ²Π½Π° конструкція eval() Π±ΡƒΠ»Π° Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Π½Π°. Π‘ΡƒΠ΄ΡŒ-які доступні Π½Π° Ρ†ΡŒΠΎΠΌΡƒ рядку Π·ΠΌΡ–Π½Π½Ρ– Π±ΡƒΠ΄ΡƒΡ‚ΡŒ доступні для читання Ρ‚Π° Π·ΠΌΡ–Π½ΠΈ Ρƒ ΠΊΠΎΠ΄Ρ–, Ρ‰ΠΎ Π²ΠΈΠΊΠΎΠ½ΡƒΡ”Ρ‚ΡŒΡΡ. Однак усі ΠΎΠ³ΠΎΠ»ΠΎΡˆΠ΅Π½Ρ– Ρƒ Ρ†ΡŒΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρ– Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ— Ρ‚Π° класи ΠΎΡ‚Ρ€ΠΈΠΌΠ°ΡŽΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρƒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимості. Говорячи Ρ–Π½Π°ΠΊΡˆΠ΅, компілятор Ρ€ΠΎΠ·Ρ†Ρ–Π½ΠΈΡ‚ΡŒ Π²ΠΈΠΊΠΎΠ½ΡƒΠ²Π°Π½ΠΈΠΉ ΠΊΠΎΠ΄ Ρ‚Π°ΠΊ, якби Ρ†Π΅ Π±ΡƒΠ² ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉΡ„Π°ΠΉΠ».

ЗастСрСТСння

Мовна конструкція eval() ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ Π΄ΡƒΠΆΠ΅ Π½Π΅Π±Π΅Π·ΠΏΠ΅Ρ‡Π½ΠΎΡŽΠΎΡΠΊΡ–Π»ΡŒΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠΊΠΎΠ½ΡƒΠ²Π°Ρ‚ΠΈ Π΄ΠΎΠ²Ρ–Π»ΡŒΠ½ΠΈΠΉ ΠΊΠΎΠ΄ . Π’ΠΎΠΌΡƒ Π²Ρ–Π΄ Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π· нСю ΡƒΡ‚Ρ€ΠΈΠΌΡƒΡŽΡ‚ΡŒΡΡ. Π―ΠΊΡ‰ΠΎ Ρ€Π΅Ρ‚Π΅Π»ΡŒΠ½ΠΈΠΉ ΠΏΠΎΡˆΡƒΠΊ Ρ–Π½ΡˆΠΈΡ… Ρ€Ρ–ΡˆΠ΅Π½ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Π², Ρ‰ΠΎ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΈ Π½Π΅ΠΌΠ°Ρ”, ΡƒΠ²Π°ΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΡΡŽΡ‚ΡŒ, Ρ‰ΠΎΠ± Π΄ΠΎ Π½Π΅Ρ— Π½Π΅ пСрСдавалися Π΄Π°Π½Ρ– користувача Π±Π΅Π· Ρ—Ρ…Π½ΡŒΠΎΡ— ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡ— ΠΏΠΎΠΏΠ΅Ρ€Π΅Π΄Π½ΡŒΠΎΡ— ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠΈ.

Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ–Π²

code

Рядок ΠΊΠΎΠ΄Ρƒ PHP, Ρ‰ΠΎ Π²ΠΈΠΊΠΎΠ½ΡƒΡ”Ρ‚ΡŒΡΡ.

Код Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π±ΡƒΡ‚ΠΈ ΠΎΠ±Π³ΠΎΡ€Π½ΡƒΡ‚ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠΌ, Ρ‰ΠΎ Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ”Ρ‚ΡŒΡΡ Ρ– Π·Π°ΠΊΡ€ΠΈΠ²Π°Ρ”Ρ‚ΡŒΡΡ Ρ‚Π΅Π³Π°ΠΌΠΈ PHP, Ρ‚ΠΎΠ±Ρ‚ΠΎ рядок ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π±ΡƒΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, Ρ‚Π°ΠΊΠΈΠΉ: 'echo "ΠŸΡ€ΠΈΠ²Ρ–Ρ‚!";, Π°Π»Π΅ Π½Π΅ Ρ‚Π°ΠΊΠΈΠΉ ''. МоТна пСрСмикатися ΠΌΡ–ΠΆ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ PHP- Ρ‚Π° HTML-ΠΊΠΎΠ΄Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄: 'echo "Код PHP!"; ?>Код HTML

Код, Ρ‰ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ”Ρ‚ΡŒΡΡ, ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π±ΡƒΡ‚ΠΈ Π²Ρ–Ρ€Π½ΠΈΠΌ Π²ΠΈΠΊΠΎΠ½ΡƒΠ²Π°Π½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ PHP. Π¦Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Ρ”, Ρ‰ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΈ ΠΌΠ°ΡŽΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ Ρ€ΠΎΠ·Π΄Ρ–Π»Π΅Π½Ρ– ΠΊΡ€Π°ΠΏΠΊΠΎΡŽ Π· комою (;). ΠŸΡ€ΠΈ Π²ΠΈΠΊΠΎΠ½Π°Π½Π½Ρ– рядка `'echo "ΠŸΡ€ΠΈΠ²Ρ–Ρ‚!"'`Π±ΡƒΠ΄Π΅Ρ‚ сгСнСрирована ошибка, Π° строка`'echo "ΠŸΡ€ΠΈΠ²Ρ–Ρ‚!";` Π±ΡƒΠ΄Π΅ ΡƒΡΠΏΡ–ΡˆΠ½ΠΎ Π²ΠΈΠΊΠΎΠ½Π°Π½ΠΎ. Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π² строкС ΠΊΠΎΠ΄Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова`return` припиняє виконання. Код Π· рядка Π±ΡƒΠ΄Π΅ Π²ΠΈΠΊΠΎΠ½Π°Π½ΠΈΠΉ Ρƒ Ρ‚Ρ–ΠΉ області видимості, Π² якій Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Π½Π° конструкція **eval()**. Π’ΠΎΠΌΡƒ Π·ΠΌΡ–Π½Π½Ρ–, які Π²ΠΈΠ·Π½Π°Ρ‡Π΅Π½Ρ– Ρ‡ΠΈ Π·ΠΌΡ–Π½Π΅Π½Ρ– Ρƒ Π½Ρ–ΠΉ, Π·Π±Π΅Ρ€Π΅ΠΆΡƒΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΡ–ΡΡ‚ΡŒ після Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ конструкції **eval()** ### ЗначСння, Ρ‰ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°ΡŽΡ‚ΡŒΡΡ Мовна конструкція **eval()** ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ” значСння **`null`**, Π°Π±ΠΎ значСння, якС ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Ρ‰ΠΎ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Π½ΠΈΠΉ Ρƒ Π²ΠΈΠΊΠΎΠ½ΡƒΠ²Π°Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρ–, `return`. ΠŸΠΎΡ‡ΠΈΠ½Π°ΡŽΡ‡ΠΈ Π· PHP 7, якщо Ρƒ ΠΊΠΎΠ΄Ρ–, Ρ‰ΠΎ Π²ΠΈΠΊΠΎΠ½ΡƒΡ”Ρ‚ΡŒΡΡ, присутня ΠΏΠΎΠΌΠΈΠ»ΠΊΠ°, Ρ‚ΠΎ конструкція **eval()** Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ” виняток "ParseError". Π”ΠΎ PHP 7 Ρƒ Ρ‚Π°ΠΊΠΈΡ… Π²ΠΈΠΏΠ°Π΄ΠΊΠ°Ρ… повСрталося Π»ΠΎΠ³Ρ–Ρ‡Π½Π΅ значСння **`false`** Ρ– Ρ‚Ρ€ΠΈΠ²Π°Π»ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π΅ виконання наступного ΠΊΠΎΠ΄Ρƒ. НСмоТливо Π·Π»ΠΎΠ²ΠΈΡ‚ΠΈ ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ парсСра Ρƒ конструкції **eval()** Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ”ΡŽ [set_error_handler()](function.set-error-handler.md) ### ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ **ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ #1 ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ— **eval()**β€” простоС слияниС тСкста** ```php <?php $string = 'Ρ‡Π°ΡˆΠΊΠ°'; $name = 'ΠΊΠΎΡ„Π΅'; $str = 'Π­Ρ‚ΠΎ $string с ΠΌΠΎΠΈΠΌ $name.'; echo $str. "\n"; eval("\$str = \"$str\";"); echo $str. "\n"; ?> ``` Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ виконання Π½Π°Π²Π΅Π΄Π΅Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρƒ: ``` Π­Ρ‚ΠΎ $string с ΠΌΠΎΠΈΠΌ $name. Π­Ρ‚ΠΎ Ρ‡Π°ΡˆΠΊΠ° с ΠΌΠΎΠΈΠΌ ΠΊΠΎΡ„Π΅. ``` ### ΠŸΡ€ΠΈΠΌΡ–Ρ‚ΠΊΠΈ > **ЗауваТСння**: ΠžΡΠΊΡ–Π»ΡŒΠΊΠΈ Ρ†Π΅ ΠΌΠΎΠ²Π½Π° конструкція, Π° Π½Π΅ функція, Ρ—Ρ— Π½Π΅ ΠΌΠΎΠΆΠ½Π° Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ‚ΠΈ як [Π·ΠΌΡ–Π½Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΡŽ](functions.variable-functions.md) Π°Π±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΠΈ як [Ρ–ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚](functions.arguments.md#functions.named-arguments) **ΠŸΡ–Π΄ΠΊΠ°Π·ΠΊΠ°** Π―ΠΊ Ρ– всС, Ρ‰ΠΎ Π²ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρƒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€, [Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ— ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŽ вивСдСння](book.outcontrol.md) ΠΌΠΎΠΆΠ½Π° Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ‚ΠΈ, Ρ‰ΠΎΠ± ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠΏΠΈΡ‚ΠΈ Π΄Π°Π½Ρ–, Ρ‰ΠΎ Π²ΠΈΠ²ΠΎΠ΄ΡΡ‚ΡŒΡΡ Ρ†Ρ–Ρ”ΡŽ Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ”ΡŽ, Ρ– Π·Π±Π΅Ρ€Ρ–Π³Π°Ρ‚ΠΈ Ρ—Ρ…, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Ρƒ рядок (string). > **ЗауваТСння** : > > Π£ Ρ€Π°Π·Ρ– Ρ„Π°Ρ‚Π°Π»ΡŒΠ½ΠΎΡ— ΠΏΠΎΠΌΠΈΠ»ΠΊΠΈ Ρƒ ΠΊΠΎΠ΄Ρ–, Ρ‰ΠΎ Π²ΠΈΠΊΠΎΠ½ΡƒΡ”Ρ‚ΡŒΡΡ, ΠΏΡ€ΠΈΠΏΠΈΠ½ΡΡ”Ρ‚ΡŒΡΡ виконання всього скрипту. ### Π”ΠΈΠ²Ρ–Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΎΠΆ - [call_user_func()](function.call-user-func.md) - Π’ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ” callback-Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΡŽ, Π·Π°Π΄Π°Π½Ρƒ Ρƒ ΠΏΠ΅Ρ€ΡˆΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ–