ΠΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ β ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ
Π² Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠΈΠΏ callable.
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
Π’ΠΈΠΏ callable ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ,
ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ callback-ΡΡΠ½ΠΊΡΠΈΡ.
Π‘Π²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π΅Π»ΡΠ·Ρ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠΈΠΏ callable;
Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΡΠΈΠΏ Closure.
ΠΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ:
-
ΠΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° Closure
-
Π‘ΡΡΠΎΠΊΠΈ (string) Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°
-
ΠΠ°ΡΡΠΈΠ²Ρ (array) Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ (object)
Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0 ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1
-
ΠΠ±ΡΠ΅ΠΊΡΡ (object), Π² ΠΊΠ»Π°ΡΡΠ΅ ΠΊΠΎΡΠΎΡΡΡ
ΠΎΠ±ΡΡΠ²ΠΈΠ»ΠΈ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄
__invoke()
ΠΠ±ΡΠ΅ΠΊΡΡ Closure ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ
Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ,
ΡΡΡΠ΅Π»ΠΎΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ,
ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΡ
Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Closure::fromCallable().
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΡ
callable-Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Ρ PHP 8.1.0.
ΠΡΠΈΠΌΠ΅Ρ #1
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° Closure
<?php
// Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ
$double1 = function ($a) {
return $a * 2;
};
// Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΡ
Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
function double_function($a) {
return $a * 2;
}
$double2 = double_function(...);
// Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΡΡΠ΅Π»ΠΎΡΠ½ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ
$double3 = fn($a) => $a * 2;
// ΠΠ΅ΡΠΎΠ΄ Closure::fromCallable
$double4 = Closure::fromCallable('double_function');
// ΠΡΠ·ΠΎΠ² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΊΠ°ΠΊ callback-ΡΡΠ½ΠΊΡΠΈΠΈ
// ΡΠ΄Π²Π°ΠΈΠ²Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅
$new_numbers = array_map($double1, range(1, 5));
print implode(' ', $new_numbers) . PHP_EOL;
$new_numbers = array_map($double2, range(1, 5));
print implode(' ', $new_numbers) . PHP_EOL;
$new_numbers = array_map($double3, range(1, 5));
print implode(' ', $new_numbers) . PHP_EOL;
$new_numbers = array_map($double4, range(1, 5));
print implode(' ', $new_numbers);
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² PHP 8.1:
2 4 6 8 10
2 4 6 8 10
2 4 6 8 10
2 4 6 8 10
ΠΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΊΠ°ΠΊ ΡΡΡΠΎΠΊΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
PHP ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ, Π½ΠΎ Π½Π΅ ΡΠ·ΡΠΊΠΎΠ²ΡΡ
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ:
array(), echo,
empty(), eval(),
isset(),
list(), print
ΠΈΠ»ΠΈ unset().
ΠΠ»Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡ (object) ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ²
Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ° Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0 ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1
ΠΈΠ»ΠΈ ΡΠΎΡΠ»Π°ΡΡΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π· ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ::, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ
ΠΎΠ±Π»Π°ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π°:
'ClassName::methodName'.
ΠΠ° ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (object) Π² Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
ΡΡΡΠ»Π°ΡΡΡΡ
ΡΠ΅ΡΠ΅Π· ΠΌΠ°ΡΡΠΈΠ²: ΠΎΠ±ΡΠ΅ΠΊΡ (object) ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0,
Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° β Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1.
ΠΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ
Closure
ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ,
Π° Π½Π΅ Π²ΡΠ·ΠΎΠ²Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Closure, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ
Ρ ΠΏΡΠ΅Π²Π΄ΠΎΡΠΈΠΏΠΎΠΌ callable
ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ° Π²ΡΠ·ΠΎΠ²Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ,
ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΏΡΡΠΊΠ° Π²ΡΠ·ΠΎΠ²Π° callable-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π² ΡΠΎΡΠΊΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄, Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ.
ΠΠ° ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠΎΠ² Π»ΡΡΡΠ΅ ΡΡΡΠ»Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Closure, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠΎΡΠΊΠ΅ Π²ΡΠ·ΠΎΠ²Π° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
ΠΠ±ΡΠ΅ΠΊΡΡ Closure ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ
ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠΎ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ°
ΡΠ΅ΡΠ΅Π· ΡΡΡΠΎΠΊΡ ΠΈΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΠ·ΠΎΠ²Π°.
ΠΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΎ ΡΡΡΠ»ΠΊΠΎΠΉ Π½Π° Π·Π°ΠΊΡΡΡΡΠΉ ΠΈΠ»ΠΈ Π·Π°ΡΠΈΡΡΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ
ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΠ·Π²Π½Π΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°,
ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Closure::fromCallable()
ΠΈΠ»ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΡ
Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
PHP ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ,
Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ.
Π ΡΠ°ΠΊΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌ ΠΎΡΠ½ΠΎΡΡΡΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΈ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ°
Π² ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ»ΠΎΠ²Π°:
'parent::method' ΠΈΠ»ΠΈ ["static", "method"].
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
Π‘ PHP 8.2.0 ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΡΠ°ΡΠ΅Π»ΠΈ.
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ
ΠΏΡΡΡΠΌ Π·Π°ΠΌΠ΅Π½Ρ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ 'parent::method'
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ parent::class . '::method'
ΠΈΠ»ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΊΠ»Π°ΡΡΠ½ΡΡ
Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ #2
ΠΡΠΈΠΌΠ΅ΡΡ Π²ΡΠ·ΠΎΠ²Π° callable-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ call_user_function()
<?php
// ΠΡΠΈΠΌΠ΅Ρ callback-ΡΡΠ½ΠΊΡΠΈΠΈ
function my_callback_function()
{
echo "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!", PHP_EOL;
}
// ΠΡΠΈΠΌΠ΅Ρ callback-ΠΌΠ΅ΡΠΎΠ΄Π°
class MyClass
{
static function myCallbackMethod()
{
echo "ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!", PHP_EOL;
}
}
// Π’ΠΈΠΏ 1: ΠΡΠΎΡΡΠΎΠΉ Π²ΡΠ·ΠΎΠ² callback-ΡΡΠ½ΠΊΡΠΈΠΈ
call_user_func('my_callback_function');
// Π’ΠΈΠΏ 2: ΠΡΠ·ΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ°
call_user_func(['MyClass', 'myCallbackMethod']);
// Π’ΠΈΠΏ 3: ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ°
$obj = new MyClass();
call_user_func([$obj, 'myCallbackMethod']);
// Π’ΠΈΠΏ 4: ΠΡΠ·ΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ°
call_user_func('MyClass::myCallbackMethod');
// Π’ΠΈΠΏ 5: ΠΡΠ·ΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ° Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° ΡΠ΅ΡΠ΅Π· ΡΠ·ΡΠΊΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ::class
call_user_func([MyClass::class, 'myCallbackMethod']);
// Π’ΠΈΠΏ 6: ΠΡΠ·ΠΎΠ² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ»ΠΊΠ΅
class A
{
public static function who()
{
echo 'A', PHP_EOL;
}
}
class B extends A
{
public static function who()
{
echo 'B', PHP_EOL;
}
}
call_user_func(['B', 'parent::who']); // ΠΡΠ²ΠΎΠ΄ΠΈΡ: A.
// ΠΠ°ΡΠΈΠ½Π°Ρ Ρ PHP 8.2.0 callable-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
// Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΡΠ°ΡΠ΅Π»ΠΈ
// Π’ΠΈΠΏ 7: ΠΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠ»Π°ΡΡΡ ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ __invoke(),
// Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ
class C
{
public function __invoke($name)
{
echo 'ΠΡΠΈΠ²Π΅Ρ, ', $name;
}
}
$c = new C();
call_user_func($c, 'PHP!');
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°:
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!
ΠΡΠΈΠ²Π΅Ρ, ΠΌΠΈΡ!
Deprecated: Callables of the form ["B", "parent::who"] are deprecated in script on line 51
A
ΠΡΠΈΠ²Π΅Ρ, PHP!
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Callback-ΡΡΠ½ΠΊΡΠΈΠΈ,
ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ call_user_func()
ΠΈΠ»ΠΈ call_user_func_array(), Π½Π΅ Π²ΡΠ·ΠΎΠ²ΡΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΏΠΎΠΉΠΌΠ°Π½Π½ΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ,
ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ±ΡΠΎΡΠΈΠ»Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ°Ρ callback-ΡΡΠ½ΠΊΡΠΈΡ.