Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php

АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #1 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Замыкания Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…; PHP автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ выраТСния Π² экзСмпляры Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ класса Closure. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ замыкания ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ синтаксис, Ρ‡Ρ‚ΠΎ ΠΈ для любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ присвоСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ с запятой:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #2 ΠŸΡ€ΠΈΠΌΠ΅Ρ€ присвоСния Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Замыкания ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ области видимости. Π›ΡŽΠ±Π°Ρ подобная пСрСмСнная Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ объявлСна Π² конструкции use.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #3 НаслСдованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ области видимости

// Ббросим message
$message = ‘hello’ ;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ #4 Замыкания ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости

// Базовая ΠΊΠΎΡ€Π·ΠΈΠ½Π° ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ, содСрТащая список Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ…
// ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΈ количСство ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄,
// Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ‰ΡƒΡŽ Ρ†Π΅Π½Ρƒ элСмСнтов ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ
// callback-замыкания.
class Cart
<
const PRICE_BUTTER = 1.00 ;
const PRICE_MILK = 3.00 ;
const PRICE_EGGS = 6.95 ;

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Ρ‹ ΡƒΡ€ΠΎΠΊΠΈ ΠΏΠΎ PHP скриптам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π’Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° своих рСсурсах.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ zend-filter

Когда Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ бСзопасности Π²Π΅Π±-сайта, Ρ‚ΠΎ Ρ„Ρ€Π°Π·Π° «Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠΉΡ‚Π΅ всё, экранируйтС всё» всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°. БСгодня ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. thumbnail. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php-thumbnail. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° thumbnail. АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½ΠΎΠ΅ экранированиС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ zend-escaper

ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ бСзопасности Π²Π΅Π±-сайта β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ SQL ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ, Π½ΠΎ ΠΈ протСкция ΠΎΡ‚ мСТсайтового скриптинга (XSS), мСТсайтовой ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ запросов (CSRF) ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² Π°Ρ‚Π°ΠΊ. Π’ частности, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ остороТно ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ HTML, CSS ΠΈ JavaScript ΠΊΠΎΠ΄Π°.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. thumbnail. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php-thumbnail. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° thumbnail. АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Zend ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΊ Expressive

Expressive 2 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄Ρ€ΡƒΠ³ΠΈΡ… ZF ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ схСмС. НС всСм нравится Π΄Π°Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ расскаТСм ΠΊΠ°ΠΊ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΠ»ΠΈ процСсс ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. thumbnail. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php-thumbnail. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° thumbnail. АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π‘ΠΎΠ²Π΅Ρ‚: ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Google Analytics Ρ‡Π΅Ρ€Π΅Π· API

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Google Analytics ΠΈΠ· сСрвСрного скрипта. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. ΠžΡ‚Π²Π΅Ρ‚ Π² этой Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ΅.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. thumbnail. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php-thumbnail. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° thumbnail. АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° PHP пСсочниц

ΠŸΠΎΠ΄Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΈΠ΄ΠΎΠ² PHP пСсочниц. На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ online смоТСтС ΠΏΠΎΡ‚Π΅ΡΡ‚ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π½Π° свой сайт.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. thumbnail. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php-thumbnail. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° thumbnail. АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Π‘ΠΎΠ²Π΅Ρ‚: активация отобраТСния всСх ошибок Π² PHP

ΠŸΡ€ΠΈ поднятии PHP ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Π½ΠΎΠ²ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ошибки ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ скрыто Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ настройками. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, прописав нСсколько ΠΊΠΎΠΌΠ°Π½Π΄.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. thumbnail. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php-thumbnail. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° thumbnail. АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

АгСнт

PHP парсСр ΡŽΠ·Π΅Ρ€ Π°Π³Π΅Π½Ρ‚Π° с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Laravel, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π±Π°Π·Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Mobile Detect.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² PHP: сСанс Ρ‡Ρ‘Ρ€Π½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠΈ с Ρ€Π°Π·ΠΎΠ±Π»Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ замыкания (closures), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½. Они Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ callback-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈ мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ΠΠ°Ρ‡Π°Ρ‚ΡŒ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, слСдуСт с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ анонимная функция(Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅) Π² PHP β€” это Π½Π΅ функция, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Closure. БобствСнно, Π½Π° этом ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ, Π½ΠΎ Ссли ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ интСрСсны подробности β€” Π΄ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚.

Π”Π°Π±Ρ‹ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ голословным:

ЗабСгая Π²ΠΏΠ΅Ρ€Ρ‘Π΄, скаТу, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ совсСм ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ разбСрёмся.

НапримСр, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄

компилируСтся Π² Ρ‚Π°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ²:

Π‘Π»ΠΎΠΊ с описаниСм Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΌ Π½Π΅ особо интСрСсСн, Π° Π²ΠΎΡ‚ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° интСрСсных Π½Π°ΠΌ ΠΎΠΏΠΊΠΎΠ΄Π°: DECLARE_LAMBDA_FUNCTION ΠΈ INIT_DYNAMIC_CALL. Начнём со Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ.

INIT_DYNAMIC_CALL

Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² случаС, ΠΊΠΎΠ³Π΄Π° компилятор Π²ΠΈΠ΄ΠΈΡ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ массивС. Π’.Π΅.

Π’ случаС замыкания нас интСрСсуСт Π²Ρ‹Π·ΠΎΠ² Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.
Π£Π³Π»ΡƒΠ±Π»ΡΡΡΡŒ Π² ΠΊΠΎΠ΄ VM, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ этот ΠΎΠΏΠΊΠΎΠ΄, ΠΌΡ‹ Π΄ΠΎΠΉΠ΄Ρ‘ΠΌ Π΄ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ zend_init_dynamic_call_object, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ (Π½Π°Ρ€Π΅Π·ΠΊΠ°):

Π—Π°Π±Π°Π²Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΉ всСм Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __invoke Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… VM являСтся ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΎΠΉ Π²Ρ‹Π·ΠΎΠ²Π° замыкания β€” get_closure.

БобствСнно, Π½Π° этом мСстС начинаСтся Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° __invoke ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
Π’ PHP Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сущСствуСт Π½Π°Π±ΠΎΡ€ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π΅Π³ΠΎ слуТСбныС ΠΈ магичСскиС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ΠšΡ€ΠΎΠΌΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², описанных здСсь, этот класс Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ __invoke. Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для совмСстимости с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ классами, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ магичСский Π²Ρ‹Π·ΠΎΠ², Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

И это Ρ‚Π°ΠΊΠΈ ΠΏΡ€Π°Π²Π΄Π°. Ѐункция get_closure для замыкания Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π΅ __invoke, Π° Π²Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ создавалось Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ исходники сами β€” Ρ„Π°ΠΉΠ» zend_closure.c, Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠΏΠΊΠΎΠ΄Ρƒ.

DECLARE_LAMBDA_FUNCTION

И Π²ΠΎΡ‚ Π½Π° этом мСстС Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ приятныС новости.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π½Π΅ Ρ‚Π°ΠΊ с Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌΠΈ функциями?

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ замыкания β€” опСрация Π±ΠΎΠ»Π΅Π΅ тяТёлая, Ρ‡Π΅ΠΌ созданиС ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Мало Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ вызываСтся стандартный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΊ Π½Π΅ΠΌΡƒ Π΅Ρ‰Ρ‘ добавляСтся ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство Π»ΠΎΠ³ΠΈΠΊΠΈ, самым нСприятным ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСго массива ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ² вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚Π΅Π»ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° замыкания. Π‘Π°ΠΌΠΎ ΠΏΠΎ сСбС это Π½Π΅ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ, Π½ΠΎ Ρ€ΠΎΠ²Π½ΠΎ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΒ».

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΠΆΠΈΠ΄Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ случаи, ΠΊΠΎΠ³Π΄Π° происходит созданиС замыкания.
Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ создаётся Π·Π°Π½ΠΎΠ²ΠΎ:
Π°) ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΎΠΏΠΊΠΎΠ΄Π° DECLARE_LAMBDA_FUNCTION.
Π˜Π½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ β€” Ρ€ΠΎΠ²Π½ΠΎ Ρ‚ΠΎΡ‚ кСйс, Π³Π΄Π΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ смотрится Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ замыкания Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°.

Π±) ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² bind ΠΈ bindTo:
Π’ΡƒΡ‚ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π·Π°Π½ΠΎΠ²ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

с) ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° call, Ссли Π² качСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€. А Ссли Π½Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€, Π° обычная функция, Ρ‚ΠΎ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ массива ΠΎΠΏΠΊΠΎΠ΄ΠΎΠ². Π’Π°ΠΊΠΈΠ΅ Π΄Π΅Π»Π°.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Если Π²Π°ΠΌ Π½Π΅ Π²Π°ΠΆΠ½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ любой Ρ†Π΅Π½ΠΎΠΉ, Ρ‚ΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ ΠΈ приятны. А Ссли Π²Π°ΠΆΠ½Π°, Ρ‚ΠΎ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π½Π΅ стоит.

Π’ любом случаС Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ замыкания ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹, Ссли ΠΈΡ… Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, β€” такая сСбС комбинация.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ анонимная функция php

So you will need to explicitly pass them in by reference if your closure cares about their contents over time:

//set up variable in advance
$myInstance = null ;

//$myInstance might be instantiated, might not be
if( SomeBusinessLogic :: worked () == true )
<
$myInstance = new myClass ();
>

Every instance of a lambda has own instance of static variables. This provides for great event handlers, accumulators, etc., etc.

In case you were wondering (cause i was), anonymous functions can return references just like named functions can. Simply use the & the same way you would for a named function. right after the `function` keyword (and right before the nonexistent name).

As of PHP 7.0, you can use IIFE(Immediately-invoked function expression) by wrapping your anonymous function with ().

PERFORMANCE BENCHMARK 2017!

I decided to compare a single, saved closure against constantly creating the same anonymous closure on every loop iteration. And I tried 10 million loop iterations, in PHP 7.0.14 from Dec 2016. Result:

a single saved closure kept in a variable and re-used (10000000 iterations): 1.3874590396881 seconds

new anonymous closure created each time (10000000 iterations): 2.8460240364075 seconds

In other words, over the course of 10 million iterations, creating the closure again during every iteration only added a total of «1.459 seconds» to the runtime. So that means that every creation of a new anonymous closure takes about 146 nanoseconds on my 7 years old dual-core laptop. I guess PHP keeps a cached «template» for the anonymous function and therefore doesn’t need much time to create a new instance of the closure!

So you do NOT have to worry about constantly re-creating your anonymous closures over and over again in tight loops! At least not as of PHP 7! There is absolutely NO need to save an instance in a variable and re-use it. And not being restricted by that is a great thing, because it means you can feel free to use anonymous functions exactly where they matter, as opposed to defining them somewhere else in the code. πŸ™‚

public function __destruct ()
<
echo «destructed\n» ;
>
>

new Test ;
echo «finished\n» ;

public static function createClosure ()
<
return function () <
>;
>

When using anonymous functions as properties in Classes, note that there are three name scopes: one for constants, one for properties and one for methods. That means, you can use the same name for a constant, for a property and for a method at a time.

Since a property can be also an anonymous function as of PHP 5.3.0, an oddity arises when they share the same name, not meaning that there would be any conflict.

Consider the following example:

class MyClass <
const member = 1 ;

public function member () <
return «method ‘member'» ;
>

header ( «Content-Type: text/plain» );

$myObj = new MyClass ();

/*
* Establish mock authorisation, call the service; should get
* ‘Service returns: test 1’.
*/
$_SESSION [ ‘is_authorised’ ] = true ;
$service ( ‘test 1’ );

/*
* Remove mock authorisation, call the service; should get ‘Access Denied’.
*/
$_SESSION [ ‘is_authorised’ ] = false ;
$service ( ‘test 2’ );

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ Π² PHP

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² PHP 5.3 Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ β€” ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… Π΅Π³ΠΎ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π² ΠΈ хотя послС Ρ€Π΅Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚, Π΄ΠΎ сих ΠΏΠΎΡ€ Π½Π΅ слоТилось стандартной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ использования этой возмоТности языка. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсныС возмоТности ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ Π² PHP.

Для Π½Π°Ρ‡Π°Π»Π° рассмотрим, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Ρ‚Π°ΠΊΠΎΠ΅ β€” Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΈ Π² Ρ‡Π΅ΠΌ Π΅Π³ΠΎ особСнности Π² PHP.

Как Π²ΠΈΠ΄ΠΈΠΌ, Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΈ лямбда-функция ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Closure, ΠΊΠΎΠΎΡ€Ρ‹ΠΉ Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² PHP5.3 Π²Π²Π΅Π»ΠΈ магичСский ΠΌΠ΅Ρ‚ΠΎΠ΄ __invoke.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ use ΠΌΡ‹ наслСдуСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ области видимости Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости Π»Π°ΠΌΠ±Π΄Π°-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
Битаксис прост ΠΈ понятСн. НС совсСм понятно ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ web-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π― просмотрСл ΠΊΠΎΠ΄ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… совСрСмСнных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π½ΠΎΠ²Ρ‹Π΅ возмоТности языка ΠΈ попытался ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ вмСстС ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ примСнСния.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°

Π‘Π°ΠΌΠΎΠ΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” использованиС ΠΈΡ… Π² качСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° (callbacks). Π’ PHP имССтся мноТСство стандартных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… Π½Π° Π²Ρ…ΠΎΠ΄ Ρ‚ΠΈΠΏ callback ΠΈΠ»ΠΈ Π΅Π³ΠΎ синоним callable Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π² PHP 5.4. Π‘Π°ΠΌΡ‹Π΅ популярныС ΠΈΠ· Π½ΠΈΡ… array_filter, array_map, array_reduce. Ѐункция array_map слуТит для ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ элСмСнтов массива. Callback-функция примСняСтся ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива ΠΈ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° выдаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ массив. Π£ мСня сразу Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массива Π² Ρ†ΠΈΠΊΠ»Π΅ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ поэкспСримСнтируСм.

Как Π²ΠΈΠ΄Π½ΠΎ, Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° большоС количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π΄Π°ΡŽΡ‚ ΠΎΡ‰ΡƒΡ‚ΠΈΠΌΡ‹ΠΉ спад Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‡Π΅Π³ΠΎ ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ. Π₯отя тСст синтСтичСский, Π·Π°Π΄Π°Ρ‡Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ часто, ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ мСстом, ΠΊΠΎΡ‚ΠΎΡ€Π΅ Π±ΡƒΠ΄Π΅Ρ‚ сущСствСнно Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π² соврСмСнных прилоТСниях Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ часто. Он позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ, особСнно, Ссли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π³Π΄Π΅-Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС, Π° Π½Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅.

По сути Π² Π΄Π°Π½Π½ΠΎΠΌ контСкстС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ старого способа ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ строкового ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ callback-массива Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ особСнности β€” Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ замыкания, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· области видимости ΠΏΡ€ΠΈ создании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ массива Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡ… Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

ΠžΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ

Бобытия.

Замыкания идСально подходят Π² качСствС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² событий. НапримСр

Вынос Π»ΠΎΠ³ΠΈΠΊΠΈ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ событий с ΠΎΠ΄Π½ΠΎΠΉ стороны Π΄Π΅Π»Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ чистым, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны β€” услоТняСт поиск ошибок β€” ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы ΠΈΠ½ΠΎΠ³Π΄Π° становится Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ для Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π·Π½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π°Π²Π΅ΡˆΠ°Π½Ρ‹ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Валидация

Замыкания ΠΏΠΎ сути ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΈΠ»ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² ΠΏΠΎ Ρ…ΠΎΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ скрипта. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ΠΎΠ²:

Π’ послСднСм случаС ΠΌΡ‹ примСняСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ β€” Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ с прСдустановлСнными Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ.

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

ВыраТСния

Π’ Symfony встрСчаСтся ΠΎΡ‡Π΅Π½ΡŒ интСрСсноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ. Класс ExprBuilder опСдСляСт ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, которая позволяСт ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ выраТСния Π²ΠΈΠ΄Π°

Π’ Symfony ΠΊΠ°ΠΊ я понял это Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… массивов (ΠΏΠΎΠΏΡ€Π°Π²ΡŒΡ‚Π΅ мСня, Ссли Π½Π΅ ΠΏΡ€Π°Π²). Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π° идСя Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ описывал выраТСния Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅:

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ. По сути β€” это запись Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. РСализация Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° достаточно слоТна β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² идСальном случаС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π˜Π½Π΅Ρ‚Π΅Ρ€Π΅ΡΠ½Π° концСпция, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³Π΄Π΅-Ρ‚ΠΎ такая конструкция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½Π°.

Π ΠΎΡƒΡ‚ΠΈΠ½Π³

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΌΠΈΠ½ΠΈ-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°Ρ… Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… функциях.

Достаточно ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎ.

ΠšΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

На Ρ…Π°Π±Ρ€Π΅ это ΡƒΠΆΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅.

Π—Π΄Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ get провСряСт Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ кСша ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ β€˜users.list’ ΠΈ Ссли ΠΎΠ½ Π½Π΅ Π²Π°Π»ΠΈΠ΄Π΅Π½, Ρ‚ΠΎ обращаСтся ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ опрСдСляСт Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ хранСния Π΄Π°Π½Π½Ρ‹Ρ….

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ сСрвис Mailer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…. ΠŸΠ΅Ρ€Π΅Π΄ использованиСм ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ сконфигурирован. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»Π΅Π½ΠΈΠ²ΠΎΠ΅ созданиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅Π΄ самым ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ использованиСм.

ИзмСнСниС повСдСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

Иногда Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² процСссС выполнСния скрипта β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ старый, ΠΈ Ρ‚.Π΄. Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΈ здСсь. Π’ PHP5.3 для этого Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ.

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ старый ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС Ссли ΠΎΠ½ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΏΡƒΡ‚Π΅ΠΌ. НС совсСм ΡƒΠ΄ΠΎΠ±Π½ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² PHP 5.4 появилось Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ функциям ΠΈ свойствам.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ получСния значСния ΠΈΠ· массива GET. Π’ случаС Π΅Π³ΠΎ отсутствия Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка

Π—Π΄Π΅ΡΡŒ ΡƒΠΆΠ΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° lithium

ΠœΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использовано ΠΏΠΎΡ‚ΠΎΠΌ для записи сообщСния Π² кСш.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π² ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹

Иногда Π² шаблон ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ просто Π΄Π°Π½Π½Ρ‹Π΅, Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΊΠΎΠ΄Π° шаблона для получСния ΠΊΠ°ΠΊΠΈΡ… Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π² шаблонС Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ нСсколько ссылок Π½Π° сущности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π² адрСсах этих ссылок Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π» Π΅Π³ΠΎ Π»ΠΎΠ³ΠΈΠ½.

РСкурсивноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ замыкания

НапослСдок ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ рСкурсивныС замыкания. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² use ссылку Π½Π° Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΊΠΎΠ΄Π΅. НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎΠ± условии прСкращСния рСкурсии

МногиС ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² выглядят натянуто. Бколько Π»Π΅Ρ‚ ΠΆΠΈΠ»ΠΈ Π±Π΅Π· Π½ΠΈΡ… β€” ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ замыкания достаточно СстСствСнно ΠΈ для PHP. Π£ΠΌΠ΅Π»ΠΎΠ΅ использованиС этой возмоТности ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ программиста. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ своС ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡƒΡŽ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ ΠΈ всС станСт Π½Π° свои мСста. А Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Ρ‚ΠΈΠΏΠ° Python. НадСюсь, Ρ‡Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ нашСл для сСбя здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅. И ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚ Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ интСрСсныС примСнСния Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΆΠ΄Ρƒ ваши ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Бпасибо!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *