php callback,php回调类型Callback详解(一)

在php官网中有回调类型,那什么是回调类型呢。我们知道php中的数据类型有字符串、数字、布尔型、数组等,这些都可以用来做类型约束,类型约束的意思就是指定变量的数据类型。

自 PHP 5.4 起增加了 callable 类型约束, is_callable函数可以检查给定的变量是否是回调类型。就像我们声明一个整数变量后,可以使用is_int函数来进行类型判断一样。

我们先看一下示例中的函数定义,输出的结果后面会讲。从函数的定义就可以看出什么是回调类型了,有一个感性的认识。

示例如下:

function myFunction(int $x){ //将参数x的类型限定为整数

var_dump( is_int($x) );

}

function myFunctionB(callable $x){ //将参数x的类型限定为回调类型

var_dump( is_callable($x) );

}

myFunction(1);

myFunctionB("strtoupper");输出结果:

bool(true)

bool(true)

我们将第二个函数的参数指定为了回调类型。并用is_callable检查了是否是回调类型,结果输出true。

一、回调类型的定义回调类型就是函数,包括了普通函数、匿名函数、类的成员函数、类的静态函数。

这里需要跟php的 Closure 类进行区别一下。Closure是一个类,仅代表了匿名函数。而回调类型包含了各种函数。

官网中也没有明确定义,我这里就给定义一下吧,如有问题,联系我改进。

二、回调类型的使用回调类型既然就是函数,那么如何进行使用呢。典型的使用就是通过PHP内置函数 call_user_func() 使用。

回调类型的表达方式有六种。这六种方式主要分为两个类别,通过字符串传递回调类型和通过数组传递回调类型。

c25d808323a80d5923af2b856ab9f7b4.png

1.普通函数回调,直接使用函数名称字符串

2.类的静态方法回调,使用数组。数组的第一个元素是类名,第二个是静态函数名称

3.对象的普通方法回调,使用数组。数组的第一个元素是对象,第二个是成员函数名称

4: 类的静态方法回调,也可以使用字符串形式。使用::操作符连接类和静态函数

5: 父类的静态方法回调,使用数组。数组的第一个元素是类名,第二个是静态函数名称加上parent

6: 对象回调,实现了__invoke魔术方法的对象,可以直接作为回调类型使用

示例:

//普通全局函数

function my_callback_function() {

echo 'hello world!';

}

class MyClass {

// 类的静态函数

static function myCallbackMethod() {

echo 'Hello World!';

}

// 类的普通函数

function myObjCallbackMethod(){

echo 'Obj method';

}

}

// 1.简单回调,直接使用函数名称字符串

call_user_func('my_callback_function');

// 2.类的静态方法回调,使用数组。数组的第一个元素是类名,第二个是静态函数名称

call_user_func(array('MyClass', 'myCallbackMethod'));

// 3.对象的普通方法回调,使用数组。数组的第一个元素是对象,第二个是成员函数名称

$obj = new MyClass();

call_user_func(array($obj, 'myObjCallbackMethod'));

// 4: 类的静态方法回调,也可以使用字符串形式。使用::操作符连接类和静态函数

call_user_func('MyClass::myCallbackMethod');

// 5: 父类的静态方法回调,使用数组。数组的第一个元素是类名,第二个是静态函数名称加上parent

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

// 6: 对象回调,实现了__invoke魔术方法的对象,可以直接作为回调类型使用

class C {

public function __invoke($name) {

echo 'Hello ', $name, "\n";

}

}

$c = new C();

call_user_func($c, 'PHP!');

三、总结所有的php内置函数和用户自定义函数,都可以使用回调的方式进行使用。回调类型的本质就是函数,但它可以使用字符串和数组进行表示。总共有六种合法的表示方式。

所以在第一个示例中 is_callable("strtoupper") 返回的是true。因为strtoupper是系统的内置函数。

转载请注明出处 谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值