Π­Ρ‚ΠΎ сайт — моя ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ записная ΠΊΠ½ΠΈΠΆΠΊΠ°. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π° ΠΌΠ½Π΅, по большСй части, история, своя Тизнь ΠΈΒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

🐘 КоС-Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Β Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… функциях PHP

Π’Π΅ΠΊ ΠΆΠΈΠ²ΠΈ, Π²Π΅ΠΊ ΡƒΡ‡ΠΈΡΡŒ. Π”Π°ΠΆΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ нС избавляСт ΠΎΡ‚Β Π΄Ρ‹Ρ€ Π²Β Π΅Ρ‘ Π·Π½Π°Π½ΠΈΠΈ, стоит ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ-Π΄Π²Π° прСдлоТСния ΠΈΒ Π½Π΅Β ΡƒΠ·Π½Π°Π΅ΡˆΡŒ ΠΎΒ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ конструкции. Π‘ΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ случайно Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» Π²Β Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ΅ сочСтаниС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°Β ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈΠΆΠ΅:

class Tester
{
Β Β Β Β public function returnFunc()
Β Β Β Β {
Β Β Β Β Β Β Β Β return function() {
Β Β Β Β Β Β Β Β Β Β Β Β return "Function call.\n";
Β Β Β Β Β Β Β Β };
Β Β Β Β }

Β Β Β Β public function returnStaticFunc()
Β Β Β Β {
Β Β Β Β Β Β Β Β return static function() {
Β Β Β Β Β Β Β Β Β Β Β Β return "Static function call.\n";
Β Β Β Β Β Β Β Β };
Β Β Β Β }

Β Β Β Β public function __destruct()
Β Β Β Β {
Β Β Β Β Β Β Β Β echo "Tester died.\n";
Β Β Β Β }
}

$holder = (new Tester)->returnFunc();
gc_collect_cycles();
echo $holder(); // Β«Function call.Β»
unset($holder);

$holderStatic = (new Tester)->returnStaticFunc();
gc_collect_cycles(); // Π΄Π²Π°ΠΆΠ΄Ρ‹ Β«Tester diedΒ»
echo $holderStatic(); // Β«Static function call.Β»

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π°Β ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Β«return staticΒ». Π”Π΅Π»ΠΎ Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ в ПΠ₯П, Ссли ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²Β ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, нСявно Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ Π΅Π³ΠΎ контСкст, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $this. В этом Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π±Π΅Π΄Ρ‹, Ссли функция ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΆΠΈΠ²ΡƒΡŽΡ‰Π°Ρ.

Π’Β ΠΌΠΎΡ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ другая ситуация — ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, но сам ΠΎΠ½ ΡƒΠΆΠ΅ Π½Π΅Β Π½ΡƒΠΆΠ΅Π½. Π›ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π±Ρ‹Π»ΠΎΒ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΏΡ€ΠΈΒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сборкС ΠΏΡ€ΠΈΠ±ΡŠΡ‘Ρ‚ сборщик мусора (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ gc_collect_cycles), Π½ΠΎΒ Π½Π΅Ρ‚. Бсылка Π½Π°Β Π½Π΅Π³ΠΎ содСрТится Π²Β Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΡ€ΠΎΠΆΠ΄Ρ‘Π½Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ returnFunc, ПΠ₯П ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ и понятия Π½Π΅Β ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΡƒΠΆΠ΅Π½Β Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ контСкст ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, поэтому ΠΎΠ½ Π΅Π³ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ на всякий случай.

Π’ΠΎΒ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠ΄ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ конструкция Β«static functionΒ» Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, Ρ‡Ρ‚ΠΎ в ссылкС Π½Π°Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΡ‹ нС нуТдаСмся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π·ΠΎΠ² gc_collect_cycles ΡƒΠ±ΠΈΠ²Π°Π΅Ρ‚ Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β β€” ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ΄ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° (Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ пСрСмСнная $holder ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Π°), Ρ‚Π°ΠΊ ΠΈΒ ΠΈΠ·Β Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ такая анонимная функция нС содСрТит ссылку Π½Π°Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

2 коммСнтария
SowingSadness 2016

Π§Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅Β Ρ‚ΡƒΠ΄Π° ΠΈΠ΄ΡƒΡ‚, ΠΌΠ½Π΅ каТСтся.
РаньшС, Ссли я нС ошибаюсь, Π²Β PHP Π±Ρ‹Π» синтаксис с with для лямбд и всё Π±Ρ‹Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.
Π˜Β Π²ΠΌΠ΅ΡΡ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, аля классы-Π΄Ρ€ΡƒΠ·ΡŒΡ, Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅Β Π½ΡƒΠΆΠ½ΠΎΠ΅.

Π•Π²Π³Π΅Π½ΠΈΠΉ Π‘Ρ‚Π΅ΠΏΠ°Π½ΠΈΡ‰Π΅Π² (bolknote.ru) 2016

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ для SowingSadness:

Π§Ρ‚ΠΎ за синтаксис with для лямбд? Лямбд Π²Β PHP Ρ€Π°Π½ΡŒΡˆΠ΅ Π½Π΅Β Π±Ρ‹Π»ΠΎ. А когда ΠΎΠ½ΠΈ появились, появились ΠΎΠ½ΠΈ вмСстС со static.