ΠΠΎΡΠΈΠ½Π°ΡΡΠΈ Π· PHP 5.4, Π·Π²ΠΎΡΠΎΡΠ½Ρ Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ ΠΌΠΎΠΆΡΡΡ ΠΏΠΎΠ·Π½Π°ΡΠ°ΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΡΠΈΠΏ
callable, ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Ρ - ΠΏΡΠΈΠ΄Π°ΡΠ½ΠΈΠΉ Π΄Π»Ρ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°. Π Π΄Π°Π½ΡΠΉ
Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΡΡ ΡΠΈΠΏ callback Π²ΠΆΠΈΠ²Π°ΡΡΡ Π· ΡΡΡΡ ΠΆ ΠΌΠ΅ΡΠΎΡ.
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π·Π²ΠΎΡΠΎΡΠ½ΡΡ
Π²ΠΈΠΊΠ»ΠΈΠΊΡΠ²
Π―ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΡΠ½ΠΊΡΡΡ PHP ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡΡ ΠΏΠΎ ΡΠΌΠ΅Π½Ρ Ρ Π²ΠΈΠ³Π»ΡΠ΄Ρ ΡΡΠ΄ΠΊΠ°. ΠΡΠ΄Ρ-ΡΠΊΠ°
Π²Π±ΡΠ΄ΠΎΠ²Π°Π½Π° Π°Π±ΠΎ Π²ΠΈΠ·Π½Π°ΡΠ΅Π½Π° ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΡΡ ΠΌΠΎΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΠΈΡΡ
ΡΠ°ΠΊΠΈΠΌ ΡΠΈΠ½ΠΎΠΌ, Π·Π° Π²ΠΈΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΌΠΎΠ²Π½ΠΈΡ
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΡΠΉ, ΡΠ°ΠΊΠΈΡ
ΡΠΊ:
array(), echo,
empty(), eval(),
exit(), isset(),
list(), print Π°Π±ΠΎ
unset().
ΠΠ΅ΡΠΎΠ΄, Π²ΠΆΠ΅ ΡΡΠ²ΠΎΡΠ΅Π½ΠΎΠ³ΠΎ ΠΎΠ±'ΡΠΊΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡΡ Π² ΠΌΠ°ΡΠΈΠ²Ρ, Π΄Π΅ ΡΠ°ΠΌ ΠΎΠ±'ΡΠΊΡ
ΠΌΠ°Ρ ΡΠ½Π΄Π΅ΠΊΡ 0, Π° ΠΉΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ - ΡΠ½Π΄Π΅ΠΊΡ 1.
Π’Π°ΠΊΠΎΠΆ Π² ΠΌΠ°ΡΠΈΠ²Ρ ΠΌΠΎΠΆΠ½Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΠΈ ΡΡΠ°ΡΠΈΡΠ½ΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΠ°, ΠΊΠΎΠ»ΠΈ Π² ΡΠ½Π΄Π΅ΠΊΡΡ 0,
Π·Π°ΠΌΡΡΡΡ ΠΎΠ±'ΡΠΊΡΠ°, ΠΉΠ΄Π΅ Π½Π°Π·Π²Π° ΠΊΠ»Π°ΡΠ°. ΠΠΎΡΠΈΠ½Π°ΡΡΠΈ Π· PHP 5.2.3, ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΆΠ΅
ΠΌΠΎΠΆΠ½Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΠΈ Π² ΡΠΎΡΠΌΠ°ΡΡ 'ClassName::methodName'.
ΠΠΊΡΡΠΌ Π·Π°Π³Π°Π»ΡΠ½ΠΈΡ
ΡΡΠ½ΠΊΡΡΠΉ, Π²ΠΈΠ·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ΅ΠΌ,
anonymous functions
(Π°Π½ΠΎΠ½ΡΠΌΠ½Ρ ΡΡΠ½ΠΊΡΡΡ) ΡΠ°ΠΊΠΎΠΆ ΠΌΠΎΠΆΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΠΈΡΡ Π² ΡΠΊΠΎΡΡΡ callback-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ².
ΠΡΠΈΠΊΠ»Π°Π΄ #1
callback-ΡΡΠ½ΠΊΡΡΠΉ
<?php
// ΠΡΠΈΠΊΠ»Π°Π΄ callback-ΡΡΠ½ΠΊΡΡΡ
function my_callback_function() {
echo 'ΠΡΠΈΠ²ΡΡ, Π‘Π²ΡΡ!';
}
// ΠΡΠΈΠΊΠ»Π°Π΄ callback-ΠΌΠ΅ΡΠΎΠ΄Π°
class MyClass {
static function myCallbackMethod() {
echo 'ΠΡΠΈΠ²ΡΡ, Π‘Π²ΡΡ!';
}
}
// Π’ΠΈΠΏ 1: ΠΡΠΎΡΡΠΈΠΉ callback
call_user_func('my_callback_function');
// Π’ΠΈΠΏ 2: ΠΠΈΠΊΠ»ΠΈΠΊ ΡΡΠ°ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΠ°
call_user_func(array('MyClass', 'myCallbackMethod'));
// Π’ΠΈΠΏ 3: ΠΠΈΠΊΠ»ΠΈΠΊ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ±'ΡΠΊΡΠ°
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Π’ΠΈΠΏ 4: ΠΠΈΠΊΠ»ΠΈΠΊ ΡΡΠ°ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΠ° (ΠΠΎΡΠΈΠ½Π°ΡΡΠΈ Π· PHP 5.2.3)
call_user_func('MyClass::myCallbackMethod');
// Π’ΠΈΠΏ 5: ΠΠΈΠΊΠ»ΠΈΠΊ Π²ΡΠ΄Π½ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° (ΠΠΎΡΠΈΠ½Π°ΡΡΠΈ Π· PHP 5.3.0)
class A {
public static function who() {
echo "A\n";
}
}
class B extends A {
public static function who() {
echo "B\n";
}
}
call_user_func(array('B', 'parent::who')); // A
?>
ΠΡΠΈΠΊΠ»Π°Π΄ #2
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° Π°Π½ΠΎΠ½ΡΠΌΠ½ΠΎΡ ΡΡΠ½ΠΊΡΡΡ Π² ΡΠΊΠΎΡΡΡ Ρallback-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°
<?php
// ΠΠ°ΡΠ° Π°Π½ΠΎΠ½ΡΠΌΠ½Π° ΡΡΠ½ΠΊΡΡΡ
$double = function($a) {
return $a * 2;
};
// Π¦Π΅ Π½Π°Ρ Π΄ΡΠ°ΠΏΠ°Π·ΠΎΠ½ Π½ΠΎΠΌΠ΅ΡΡΠ²
$numbers = range(1, 5);
// ΠΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΡΠΌΠΎ Π°Π½ΠΎΠ½ΡΠΌΠ½Ρ ΡΡΠ½ΠΊΡΡΡ ΡΠΊ callback-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π»Ρ
// ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ΅Π½Π½Ρ Π½Π° 2 ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π½Π°ΡΠΎΠΌΡ Π΄ΡΠ°ΠΏΠ°Π·ΠΎΠ½Ρ
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
ΠΠΎΠ΄Π°Π½ΠΈΠΉ Π²ΠΈΡΠ΅ ΠΏΡΠΈΠΊΠ»Π°Π΄
Π²ΠΈΠ²Π΅Π΄Π΅:
ΠΠ°ΡΠ²Π°ΠΆΠ΅Π½Π½Ρ:
Π PHP 4, Π½Π΅ΠΎΠ±Ρ
ΡΠ΄Π½ΠΎ Π±ΡΠ»ΠΎ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ ΠΏΠΎΡΠΈΠ»Π°Π½Π½Ρ Π΄Π»Ρ ΡΡΠ²ΠΎΡΠ΅Π½Π½Ρ callback,
ΡΠΊΠΈΠΉ Π²ΠΊΠ°Π·ΡΡ Π½Π° Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΈΠΉ ΠΎΠ±'ΡΠΊΡ, Π° Π½Π΅ Π½Π° ΠΉΠΎΠ³ΠΎ ΠΊΠΎΠΏΡΡ. ΠΠ»Ρ ΡΡΠΎΡΠ½Π΅Π½Ρ,
ΠΏΡΠΎΠ³Π»ΡΠ½ΡΡΠ΅
ΠΠΎΡΡΠ½Π΅Π½Π½Ρ ΠΠΎΡΠΈΠ»Π°Π½Ρ.
ΠΠ°ΡΠ²Π°ΠΆΠ΅Π½Π½Ρ:
ΠΠ²ΠΎΡΠΎΡΠ½Ρ Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ,
Π·Π°ΡΠ΅ΡΡΡΡΠΎΠ²Π°Π½Ρ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΡΡ call_user_func() Ρ
call_user_func_array(), Π½Π΅ Π±ΡΠ΄ΡΡΡ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΠΏΡΠΈ Π½Π°ΡΠ²Π½ΠΎΡΡΡ
Π½Π΅ΡΠΏΡΠΉΠΌΠ°Π½ΠΈΡ
Π²ΠΈΠ½ΡΡΠΊΡΠ², Π²ΠΈΠΊΠΈΠ½ΡΡΠΈΡ
Π² ΠΏΠΎΠΏΠ΅ΡΠ΅Π΄Π½ΡΡ
Π·Π²ΠΎΡΠΎΡΠ½ΡΡ
Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Ρ
.