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

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

Пока ΠΌΡ‹ рассмотрСли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ функциям β€” присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π‘Π°ΠΌΠΎΠ΅ интСрСсноС начинаСтся, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ ΠΎΠ΄Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΈΡ… условиях функция sort становится Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСсполСзной, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ списки ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Но Π²Ρ‹ΡˆΠ΅ я описал Ρ‚ΠΎΠ»ΡŒΠΊΠΎ лишь ΠΎΠ΄Π½Ρƒ ΠΈΠ· тысяч Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ситуаций. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ (ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²) ΠΈ Π² любом порядкС. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½ΡƒΠΆΠ½Ρ‹ часто, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… довольно слоТны. Π₯ΡƒΠ΄ΡˆΠ΅Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ β€” Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sort ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ? Если ΠΏΠΎΠΊΠΎΠΏΠ°Ρ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ PHP, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ usort. Π•Ρ‘ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ:

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ массив ΠΏΠΎ значСниям, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для сравнСния элСмСнтов

ΠžΠ±Ρ‰Π°Ρ идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ситуации, вСдь ΠΎΠ½ Π½Π΅ мСняСтся. ВсС, Ρ‡Ρ‚ΠΎ мСняСтся β€” элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Π² процСссС сортировки. И функция usort Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ взаимодСйствиС с этими элСмСнтами Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ΄Ρƒ.

Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ сокращаСтся Π΄ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ:

Ѐункция usort относится ΠΊ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ функциям Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка (high order functions). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚, Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ всС сразу. Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΈΠΉ ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сортировку), Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΠΈ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΡŽΡ‚ Π²Π°ΠΌ Ρ‡Π΅Ρ€Π΅Π· callback-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π“Π»Π°Π²Π½Ρ‹ΠΉ плюс ΠΎΡ‚ примСнСния Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ коэффициСнта ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Говоря ΠΎΡ‚ΠΊΡ€ΠΎΠ²Π΅Π½Π½ΠΎ, ΠΈΡ… Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π΅Π΄ΠΊΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ использованиС выглядит ΠΊΠ°ΠΊ прямая ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

ΠŸΠΎΡ‚Ρ€Π°Ρ‚ΡŒΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Π³Π΄Π΅ заканчиваСтся ΠΎΠ΄Π½Π° функция ΠΈ начинаСтся другая. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΡ‹ Π½Π°Ρ‡Π½Ρ‘ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΡ€ΠΎΠΊΠ°.

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚ΠΎ, ΠΊΠ°ΠΊ происходит Π²Ρ‹Π·ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синтаксиса Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚.

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ PHP

БСгодня ΠΌΠ½ΠΎΠ³ΠΈΠ΅ говорят ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ смоТСт с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ слСдовал всСм ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ способа написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π“Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ этому являСтся нашС ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π΅Π·Π½Π°Π½ΠΈΠ΅. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования Π½Π° PHP.

Π’Π°ΠΆΠ½Ρ‹Π΅ аспСкты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования

Начнём с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ². ВикипСдия опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ β€œΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡƒ программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ процСсс вычислСния трактуСтся ΠΊΠ°ΠΊ вычислСниС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² матСматичСском ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ послСдних”. Π’ Π΄Π°Π½Π½ΠΎΠΌ способС программирования Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ манипуляции ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠΌ являСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ для достиТСния ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Когда я сказал, Ρ‡Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ манипуляции ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, я ΠΈΠΌΠ΅Π» Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ с Π½ΠΈΠΌΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ: ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² функциях, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ! Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΊΡ€ΡƒΠ³ΠΎΠΌ ΠΎΠ΄Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘ΠΌ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ особСнностями Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.

ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ

Бвойством нСизмСнности ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹. Π’ PHP ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ константами.

РСкурсия

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сумму элСмСнтов массива (Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΎ array_sum()). ΠŸΡ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Если массив пустой, Ρ‚ΠΎ сумма элСмСнтов Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° 0. Π’ случаС Ссли Π² массивС большС элСмСнтов, ΠΌΡ‹ примСняСм Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ.

ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Если функция Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ мСняСт значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ находятся Π·Π° Π΅Ρ‘ ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΈ Π½Π΅ осущСствляСт дСйствия ΠΏΠΎ Π²Π²ΠΎΠ΄Ρƒ/Π²Ρ‹Π²ΠΎΠ΄Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ», Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚.Π΄., Ρ‚ΠΎ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ чистой.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠΈΡ… порядков

Лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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

Π’ PHP лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ появились Π² вСрсии 5.3:

Замыкания

Иногда всё ΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, которая находится Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ являСтся входящим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ замыканиями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово use:

Π’ этом случаС, ΠΌΡ‹ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΊΠ°ΠΊ входящий ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊ Π½Π΅ΠΉ доступ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ use.

ΠšΠ°Ρ€Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ частичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅

Π’ PHP ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ. НиТС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вычислСния ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ. ВсС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Однако, Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ мСньшС 3Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚ΠΎ запустится Π΅Ρ‰Ρ‘ ΠΈ другая внутрСнняя функция.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΌΡ‹ провСряСм количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Если ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 3, Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Если ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² мСньшС, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая пытаСтся Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² сначала ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы

Π’ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ мноТСство плюсов. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Как Π² фрэймворкС Slim:

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, анонимная функция запустится, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°ΠΉΠ΄Ρ‘Ρ‚ ΠΏΠΎ адрСсу home.

ΠŸΡ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ свою ΡƒΠ·ΠΊΠΎΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, Π½Π΅ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ. БлСдуя Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ΅, ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π±ΡƒΡ…Π°Ρ‚ΡŒ.

Однако стоит Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² PHP. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΌΠΎΠΆΠ½ΠΎ привСсти Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ процСссами.

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΅Ρ‘ эффСкт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Иногда стоит ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°.

НавСрноС самым большим нСдостатком Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ. Если это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΈ ΡƒΠ²Π»Π΅Ρ‡ΡŒ.

Π”Π°Π½Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠΊ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ для вас ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ сайта ruseller.com
Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ ΡƒΡ€ΠΎΠΊΠ°: http://phpmaster.com/functional-programming-and-php/
ΠŸΠ΅Ρ€Π΅Π²Π΅Π»: Бтанислав ΠŸΡ€ΠΎΡ‚Π°ΡΠ΅Π²ΠΈΡ‡
Π£Ρ€ΠΎΠΊ создан: 29 АпрСля 2013
ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΎΠ²: 24431
ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΏΠ΅Ρ€Π΅ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ

5 послСдних ΡƒΡ€ΠΎΠΊΠΎΠ² Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠΈ «PHP»

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

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

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π€ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php

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

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

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π€ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php

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

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

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π€ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php

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

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

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php. Π€ΠΎΡ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка php

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

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

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° PHP

Π§Ρ‚ΠΎ ΠΆΠ΅ это всС-Ρ‚Π°ΠΊΠΈ Ρ‚Π°ΠΊΠΎΠ΅ β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅?

ΠŸΡ€ΠΎΡˆΠ»ΠΎ ΡƒΠΆΠ΅ нСсколько Π»Π΅Ρ‚ с Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ я Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты Π² своСм исходном ΠΊΠΎΠ΄Π΅, Π½ΠΎ я всС Π΅Ρ‰Π΅ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ² Π΄Π°Ρ‚ΡŒ прямого ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π° этот вопрос. И всС ΠΆΠ΅, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ мСня ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ опрСдСлСния – я с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π΄ΠΎ ΠΌΠ½ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования, Π° ΠΊΠΎΠ³Π΄Π° β€” Π½Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π·Π°ΠΉΡ‚ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ измСнСнию состояний, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΈ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Π΅Π· измСнСния своСго Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – это Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ сСттСр Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ контСкстС.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ высокого порядка – это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ ΠΊΠ°Ρ€Ρ€ΠΈΠ½Π³ (currying) ΠΈ частичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (partial function application). Π’Π°ΠΊΠΆΠ΅ Π² языках Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π½ΡƒΡŽ систСму Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ option type для прСдотвращСния появлСния Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стали ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ для ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков программирования.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ нСсколькими ΡΠΎΠ±Π»Π°Π·Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами: отсутствиС Π²ΠΎΠ·Π½ΠΈ с состояниями Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ (Π½ΠΎ Π½Π΅ простым – ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ простым), фокусировка Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” Π½Π° минимальной Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ снова – ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ интСрСсным Π²Π΅Ρ‰Π°ΠΌ, связанным с ΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ использованиСм; Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ функциям Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ это отличная идСя для создания ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ PHP?

Π’ PHP 5.4 появился Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ β€œcallable”, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт простой доступ ΠΊ ΠΌΠ΅Ρ‚Π°-Ρ‚ΠΈΠΏΡƒ callable.
PHP Π² Ρ‚ΠΎΠΌ числС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, сообщСство Haskell ΠΎΡ‚ Π΄ΡƒΡˆΠΈ смССтся Π½Π°Π΄ этим Ρ„Π°ΠΊΡ‚ΠΎΠΌ, Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ ΠΎΡ‚Π½ΡΡ‚ΡŒ β€” ΠΌΡ‹ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ. Π”Π° ΠΈ ΡˆΡƒΡ‚ΠΊΠΈ Π±Ρ‹Π»ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ синтаксис Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ стал ΠΎΡ‡Π΅Π½ΡŒ тяТСлым. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Python.

Π‘ΠΈΠΌΠΏΠ°Ρ‚ΠΈΡ‡Π½ΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ взглянСм Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ для Ruby:

Π’ΠΎΠΆΠ΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ρ…ΠΎΡ‚ΡŒ Π½Π°ΠΌ ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊ ΠΈ нСстрогоС лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π£ Ruby Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ лямбда-выраТСния, Π½ΠΎ List.maphappens ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π±Π»ΠΎΠΊ, Π° Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Scala:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², для строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ языка программирования синтаксис всСгда остаСтся довольно ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° PHP:

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово function ΠΈ отсутствиС нСявного return Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΊΠΎΠ΄ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ. Но, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Β«ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊΒ» Π² ΠΊΠΎΠΏΠΈΠ»ΠΊΡƒ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования.
ΠšΡΡ‚Π°Ρ‚ΠΈ, array_map Π΄Π°Π΅Ρ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ старт, Π½ΠΎ стоит ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΈ array_reduce ; Π²ΠΎΡ‚ Π²Π°ΠΌ Π΅Ρ‰Π΅ Π΄Π²Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°

Π”Π°Π²Π°ΠΉΡ‚Π΅ напишСм ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая подсчитываСт ΠΎΠ±Ρ‰ΡƒΡŽ Ρ†Π΅Π½Ρƒ ΠΊΠΎΡ€Π·ΠΈΠ½Ρ‹ ΠΏΠΎΠΊΡƒΠΏΠΎΠΊ:

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

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ измСнСния состояний Π½Π΅ происходит, Π΄Π°ΠΆΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ самой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. array_map() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ массив ΠΈΠ· списка ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π² ΠΊΠΎΡ€Π·ΠΈΠ½Π΅ с вСсом, Π½Π°Π»ΠΎΠ³ΠΎΠΌ ΠΈ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, Π° функция array_reduce собираСт вмСстС массив ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ суммы. МоТСм Π»ΠΈ ΠΌΡ‹ ΠΏΠΎΠΉΡ‚ΠΈ дальшС? МоТСм Π»ΠΈ ΠΌΡ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅?

Π‘Ρ€Π°Π·Ρƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚: ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ стал ΠΏΡ€ΠΎΡ‰Π΅ для чтСния? Π‘ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ Π½Π΅Ρ‚, Π½ΠΎ со Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ дальшС β€” Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΠΈΡ‚Π΅. Π›ΠΈΡ‡Π½ΠΎ Ρƒ мСня ΡƒΡˆΠ»ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ½ΡƒΡ‚ΡŒ ΠΊ синтаксису Scala; сколько-Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ заняло ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ООП ΠΈ Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ°Π»ΠΎ ΡƒΡˆΠ»ΠΎ Π½Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. Π­Ρ‚ΠΎ самая ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ исходный ΠΏΡ€ΠΈΠΌΠ΅Ρ€? НСт. Но ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этого ΠΊΠΎΠ΄Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, насколько сильно мСняСтся ваш ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Π½Π΅ΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ мыслитС Π² Ρ€Π°ΠΌΠΊΠ°Ρ… примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΊ структурам Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π½Π΅ использования Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π²Ρ€ΠΎΠ΄Π΅ foreach для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ….

Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ?

Π’Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ указатСля (null pointer exceptions)? БущСствуСт такая Π²Π΅Ρ‰ΡŒ, ΠΊΠ°ΠΊ php-option, которая прСдоставляСт Π½Π°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ полиморфичСского Ρ‚ΠΈΠΏΠ° Β«Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΒ» (maybe) ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ PHP-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π­Ρ‚ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ частичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅: ΠΎΠ½Π° ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ n ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ reactphp/curry (моя любимая рСализация ΠΊΠ°Ρ€Ρ€ΠΈΠ½Π³Π° для PHP):

Π’ΠΎΡ‚ ΠΈ всС

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ это ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ‚Π΅ΠΌΠ°; Ссли Π±Ρ‹ мСня спросили, Ρ‡Ρ‚ΠΎ стало самой Π²Π°ΠΆΠ½ΠΎΠΉ Π²Ρ‹ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ мною Π²Π΅Ρ‰ΡŒΡŽ Π·Π° послСдниС Π³ΠΎΠ΄Ρ‹, Ρ‚ΠΎ я Π±Ρ‹ сразу ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» β€” знакомство с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°ΠΌΠΈ. Оно Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° всС, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Π΄ΠΎ этого, Ρ‡Ρ‚ΠΎ ваш ΠΌΠΎΠ·Π³ Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΎΠ»Π΅Ρ‚ΡŒ. Ну, Π² Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌ смыслС.

И напослСдок: ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠΈΡ€Π΅Β» (Real World Functional Programming). Π’Π°ΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΌ-ΠΏΠΎΠ»Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… совСтов ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π–Π΄Ρƒ Π²Π°ΡˆΠΈΡ… Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠΉ ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΠΎΠΊ ΠΊ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π² Π»ΠΈΡ‡Π½Ρ‹Ρ… сообщСниях.

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ состояниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Чистая функция β€” это функция, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ измСняя входящих Π΄Π°Π½Π½Ρ‹Ρ….

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

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

ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° программирования Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹: Π½Π΅ измСняСт состояниС, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ осущСствлСниС распараллСливания; Π² основном взаимодСйствуСт с функциями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ вСсь ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ; Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ функциями, Ρ‡Ρ‚ΠΎ способствуСт ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Как PHP Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

PHP ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ характСристики, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. А ΠΈΠΌΠ΅Π½Π½ΠΎ:

АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ основном ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ содСрТат ΠΈΠΌΠ΅Π½. Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π΅ΠΌΠΈ значСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π·Π°Π΄Π°Π½Ρ‹ Π²ΠΎ врСмя опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅

По ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ части ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° (Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ дСйствия).

Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ PHP ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π½Π½Π΅Π΅ привязываниС, значСния ΠΈΠ· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΈΠ΄Π½Ρ‹ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ привязывания.

Π­Ρ‚ΠΎ осущСствляСтся ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ссылкС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ·-Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»ΠΎΠ² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Ρ‡Ρ‚ΠΎ рСализуСтся Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… Ρ„Ρ€Π°Π·.

ЧастичныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Π’ РНР частичная функция являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Частичная функция ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π”Π°Π½Π½ΠΎΠ΅ взаимодСйствиС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ с использованиСм замыкания ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ – это Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создана Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ, ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ нСсколькими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. НапримСр:

ΠžΡ‚Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ PHP, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создано Сю.

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ способны ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² качСствС входящих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² входящСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка.

И Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

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

РСкурсия

Π­Ρ‚ΠΎ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° программирования, которая ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, исходя ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΈΡ…, Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Однако эти Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΈ глобальная.

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ прСимущСств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ программирования Π½Π° PHP, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ всС ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‡Π΅Ρ€Π΅Π· PHP, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ являСтся языком программирования, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ для создания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· этих прСимущСств:

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

Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ трСбуСтся Π΅Π³ΠΎ рСализация Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ язык программирования. Π’Π°ΠΊΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ PHP.

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠΈΡ… порядков ΠΈ ΠΌΠΎΠ½Π°Π΄Ρ‹ для PHP`шников

Π‘Ρ€Π΅Π΄ΠΈ PHP ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΡ€Π΅ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ Π² послСдних вСрсиях частично ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ ΠΈΠ½Π°Ρ‡Π΅, Π² связи с Ρ‡Π΅ΠΌ хочСтся Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС, Π±Π»Π°Π³ΠΎ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ инструмСнты для этого ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈ Π² PHP.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ парсСра JSON Π² Π²ΠΈΠ΄Π΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… Π² Π±ΠΎΠ»Π΅Π΅ слоТныС, постСпСнно дойдя Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ парсСра JSON Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

ΠšΡ€ΠΎΠΌΠ΅ собствСнно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° использованиС классов для создания DSL-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ синтаксиса ΠΈ Π½Π° использованиС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² для упрощСния синтаксиса ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ².

UPDATE само-собой парсинг JSON ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½Π½Π°Ρ Π·Π°Π΄Π°Ρ‡Π° ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ готовая ΠΈ протСстированная функция Π½Π° C Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅. Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эту Π·Π°Π΄Π°Ρ‡Ρƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для объяснСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. Π’Π°ΠΊ ΠΆΠ΅ Π½Π΅ пропагандируСтся использованиС ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ сСбС ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΈΠ΄Π΅ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Тизнь.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ находится Π½Π° github.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

Как программист справляСтся с ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ? Он Π±Π΅Ρ€Π΅Ρ‚ простыС Π±Π»ΠΎΠΊΠΈ ΠΈ строит ΠΈΠ· Π½ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ слоТныС, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… строятся Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ слоТныС Π±Π»ΠΎΠΊΠΈ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅-ΠΊΠΎΠ½Ρ†ΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. По ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Ρ‚Π°ΠΊ Π±Ρ‹Π»ΠΎ послС появляния ΠΏΠ΅Ρ€Π²Ρ‹Ρ… языков с ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ.

Π’ основС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ стиля Π»Π΅ΠΆΠΈΡ‚ описаниС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ вмСстС ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ добавляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ структуры Π΄Π°Π½Π½Ρ‹Ρ…, составлСнныС ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… структур Π΄Π°Π½Π½Ρ‹Ρ…. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΆΠ΅ ΡΡ‚ΠΈΠ»ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (соСдинСниС) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Π§Π΅ΠΌ ΠΆΠ΅ отличаСтся композиция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²? Основа Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° β€” чистота Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ зависит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Если Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ чисты, Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для прСобразования Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ИмСнно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ ΠΈ/ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ функциями Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка ΠΈ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Π΅ΠΌΡƒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠšΠ°ΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ?

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° возьмСм Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ просто Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ посмотрим ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ эту Π·Π°Π΄Π°Ρ‡Ρƒ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ.

Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ парсСр Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° JSON, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ· строки JSON ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ PHP ΠΎΠ±ΡŠΠ΅ΠΊΡ‚: число, строку, список ΠΈΠ»ΠΈ ассоциированный список (со всСми Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ значСниями ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ парсСр?

НачнСм с самых простых элСмСнтов: ΠΌΡ‹ пишСм парсСр, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ это Ρ‚Π°ΠΊΠΎΠ΅? ΠŸΠ°Ρ€ΡΠ΅Ρ€ это функция, которая Π±Π΅Ρ€Π΅Ρ‚ строку ΠΈ Π² случаС успСха Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ°Ρ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΈ остаток строки (Ссли Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΎ Π½Π΅ всю строку) ΠΈΠ»ΠΈ пустой Π½Π°Π±ΠΎΡ€, Ссли Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ строку Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ:

НапримСр Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ функция-парсСр number Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ тСсты:

DISCLAMER: PHP ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ слишком ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с функциями, поэтому для Π±ΠΎΠ»Π΅Π΅ простого ΠΈ понятного ΠΊΠΎΠ΄Π° ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π½ΠΈ Ρ‡Π΅ΠΌ ΠΈΠ½Ρ‹ΠΌ, ΠΊΠ°ΠΊ просто ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΎΠΉ Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ парсСра ΠΈ Π½ΡƒΠΆΠ΅Π½ для указания Ρ‚ΠΈΠΏΠΎΠ² ΠΈ для использования ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ синтаксиса Ρ†Π΅ΠΏΠΎΡ‡Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΎ Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ дальшС.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ парсСры

ΠŸΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈ объявим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ парсСр для любого значСния:

Пока всС просто, Π½ΠΎ всС Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, вСдь ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠ°Ρ€ΡΠΈΡ‚ΡŒ строку, Π° Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ всСгда ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм парсСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ нСсколько символов Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ строки:

Π£ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ наш парсСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ строку! Напомню: ΠΌΡ‹ описываСм ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΈ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смоТСм ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТный парсСр. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ Π½Π°ΠΌ Π½Π΅Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ парсСра, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ парсит Π²ΠΎΠΎΠ±Ρ‰Π΅.

Он Π½Π°ΠΌ Π΅Ρ‰Π΅ пригодится.

Π’ΠΎΡ‚ ΠΈ всС парсСры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹. Π­Ρ‚ΠΎΠ³ΠΎ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ JSON. НС Π²Π΅Ρ€ΠΈΡ‚Π΅? ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ способ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ эти ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΈ Π² Π±ΠΎΠ»Π΅Π΅ слоТныС Π±Π»ΠΎΠΊΠΈ.

Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΈ вмСстС

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π°Π½ΡΡ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ для комбинирования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ парсСров Π² Π±ΠΎΠ»Π΅Π΅ слоТныС парсСры Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ!

НапримСр Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ парсСры first ΠΈ second ΠΈ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ строкС любой ΠΈΠ· Π½ΠΈΡ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ парсСров β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡΠΎΠ·Π΄Π°ΡŽΡ‰ΡƒΡŽ Π½ΠΎΠ²Ρ‹ΠΉ парсСр Π½Π° основС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ…:

Но, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, Ρ‚Π°ΠΊΠΎΠΉ синтаксис ΠΌΠΎΠΆΠ΅Ρ‚ быстро ΡΡ‚Π°Ρ‚ΡŒ Π½Π΅Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ oneOf($a,oneOf($b,oneOf($c,$d))) ), поэтому ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ эту (ΠΈ всС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Parser :

И Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π°, Π½Π΅ такая простая, Π½ΠΎ Π·Π°Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ мощная функция:

Основная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ описываСм, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ парсинга, Π½ΠΎ сама разбираСмая строка Ρ‚ΡƒΡ‚ Π½Π΅ участвуСт, Ρƒ нас Π½Π΅Ρ‚ возмоТности ΠΎΡˆΠΈΠ±ΠΈΡ‚ΡŒΡΡ ΠΈ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ строки ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ. А дальшС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ синтаксис Ρ‚Π°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ простым ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

Π­Ρ‚Π° функция ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ²:

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€ позволяСт ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ дСйствиС парсСра ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° соотвСтствиС ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΡŽ. НапримСр с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΡ‹ постром ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ парсСр:

DO нотация

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ приступим ΠΊ ΠΏΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ слоТных парсСров, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ этим Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ способ ΠΈΡ… описания Π±ΠΎΠ»Π΅Π΅ простым: ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ функция flatMap позволяСт Π½Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠ΅, Π½ΠΎ выглядит это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ.

Π’ связи с этим подсмотрим ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки. Π’Π°ΠΊ Π² языках Haskell ΠΈ Scala Π΅ΡΡ‚ΡŒ вСсьма ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ синтаксис для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ Π²Π΅Ρ‰Π°ΠΌΠΈ (ΠΎΠ½ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ своС Π½Π°Π·Π²Π°Π½ΠΈΠ΅ β€” ΠΌΠΎΠ½Π°Π΄Ρ‹), называСтся ΠΎΠ½ (Π² Haskell) DO-нотация.

Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π”Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм нСбольшоС отступлСниС ΠΈ рассмотрим Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Π’ PHP 5.5.0 ΠΈ Π²Ρ‹ΡˆΠ΅ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Ρ‹ flatMap ΠΎΡ‚ программиста.

flatMap ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹

Π’ΠΎ ΠΆΠ΅ самоС Π±Π΅Π· рСкурсии ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ flatMap ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² flatMap ΠΈ just Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠΎΠ½Π°Π΄Ρ‹ (это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅) ΠΈ этот ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹ для промисов (Promise), ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Maybe,Option) ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ….

Но Ρ€Π°Π΄ΠΈ Ρ‡Π΅Π³ΠΎ ΠΆΠ΅ ΠΌΡ‹ писали эту Π½Π΅ ΡΠ°ΠΌΡƒΡŽ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ? Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ дальнСйшСС использованиС flatMap Π±Ρ‹Π»ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»Π΅Π³Ρ‡Π΅. Π‘Ρ€Π°Π²Π½ΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ с чистым flatMap :

ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΊΠΎΠ΄, Π½ΠΎ написанный Ρ‡Π΅Ρ€Π΅Π· _do :

Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ парсСр Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС Ρ‚Π΅ΠΌ ΠΆΠ΅ способом, Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅!

Π‘Ρ‚Ρ€ΠΎΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ слоТныС парсСры ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρ‹

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Ρ‰Π΅ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… парсСров:

И ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Parser для ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ элСмСнтов:

jNumber = (‘-‘|’+’|») 9+ (.8+)?

Код Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°ΠΌΠΎΠ΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ, Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΌ ошибки довольно просто.

jBool = true | false

jString = ‘»‘ [^»]* ‘»‘

jList = ‘[‘ (jValue (, jValue)*)? ‘]’

jObject = ‘<' (pair (, pair)*)? '>‘

jValue = jNull | jBool | jNumber | jString | jList | jObject

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

МоСй Ρ†Π΅Π»ΡŒΡŽ Π±Ρ‹Π»ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π½Π΅ написаниС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ парсСра JSON, Π° дСмонстрация Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ написаниС ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… простых (ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ чистых) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ простых способов ΠΈΡ… комбинирования позволяСт ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ слоТныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ простым способом.

А Π² простом ΠΈ понятном ΠΊΠΎΠ΄Π΅ ΠΈ ошибок мСньшС. НС Π±ΠΎΠΉΡ‚Π΅ΡΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°.

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

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

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