php很多函数都支持回调函数例如:array_udiff,array_usort回调函数函数需要传入一个callback类型当作他的参数,官方文档里面明确指出了6种支持的回调函数参数传入方式。 1.普通的全局方法 2.对象的方法,传入数组当作参数 3.静态方法调用,传入数组当作参数 4
php很多函数都支持回调函数例如:array_udiff,array_usort…回调函数函数需要传入一个callback类型当作他的参数,官方文档里面明确指出了6种支持的回调函数参数传入方式。
1.普通的全局方法
2.对象的方法,传入数组当作参数
3.静态方法调用,传入数组当作参数
4.静态方法调用,传入字符串当作参数
5.父类的普通方法
6.闭包或者说匿名方法
<?php
// An example callback function
function my_callback_function() {
echo 'hello world!';
}
// An example callback method
class MyClass {
static function myCallbackMethod() {
echo 'Hello World!';
}
}
// Type 1: Simple callback
//普通的全局方法
call_user_func('my_callback_function');
// Type 2: Static class method call
//静态方法调用,这时候传入的是一个数组
call_user_func(array('MyClass', 'myCallbackMethod'));
// Type 3: Object method call
//对象的方法,这时候传入的是一个数组
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
// Type 4: Static class method call (As of PHP 5.2.3)
//以字符串的形式传入静态方法
call_user_func('MyClass::myCallbackMethod');
// Type 5: Relative static class method call (As of 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
//Type 6: Our closure
//闭包或者说匿名方法
$double = function($a) {
return $a * 2;
};
// This is our range of numbers
$numbers = range(1, 5);
// Use the closure as a callback here to
// double the size of each element in our
// range
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
?>
这些都是在类的外部调用匿名函数,当我们想在类的内部调用一个属于本类的方法的时候该怎么办呢?
这时候我们可以使用$this
<?php
class MyClass {
public $property = 'Hello World!';
public function MyMethod(){
call_user_func(array($this, 'myCallbackMethod'));
}
public function MyCallbackMethod(){
echo $this->property;
}
}
?>
以前我曾愚蠢的在一个单独类文件里面头部或者尾部定义一个全局方法来搞定这个事情,后来才发现原来可以这样调用,希望对大家有帮助。
这个调用方式在官方文档下面的评论里面有人给出,
原文地址:php回调函数, 感谢原作者分享。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号