实例:
class Test { protected $items = array(); protected $obj; public function __construct() { $this->obj = new Obj(); $this->items[] = array($this, 'callBackOne'); $this->items[] = array($this, 'callBackTwo'); $this->items[] = array($this->obj, 'callObjOne'); $this->items[] = array($this->obj, 'callObjTwo'); } public function callBackOne() { echo __METHOD__ . ' has been called as a callback.'; } public function callBackTwo() { echo __METHOD__ . ' has been called as a callback.'; } public function getItems() { return $this->items; } } class Obj{ public function callObjOne(){ echo __METHOD__ . ' has been called as a callback.';; } public function callObjTwo(){ echo __METHOD__ . ' has been called as a callback.';; } } $o = new Test(); $itemLists = $o->getItems(); foreach ($itemLists as $itemList) { echo '<pre>'; echo "==========++++++++++============="; print_r($itemList); print_r($itemList()); echo '</pre><br>'; }结果:
==========++++++++++=============Array
(
[0] => Test Object
(
[items:protected] => Array
(
[0] => Array
*RECURSION*
[1] => Array
(
[0] => Test Object
*RECURSION*
[1] => callBackTwo
)
[2] => Array
(
[0] => Obj Object
(
)
[1] => callObjOne
)
[3] => Array
(
[0] => Obj Object
(
)
[1] => callObjTwo
)
)
[obj:protected] => Obj Object
(
)
)
[1] => callBackOne
)
Test::callBackOne has been called as a callback.==========++++++++++=============Array
(
[0] => Test Object
(
[items:protected] => Array
(
[0] => Array
(
[0] => Test Object
*RECURSION*
[1] => callBackOne
)
[1] => Array
*RECURSION*
[2] => Array
(
[0] => Obj Object
(
)
[1] => callObjOne
)
[3] => Array
(
[0] => Obj Object
(
)
[1] => callObjTwo
)
)
[obj:protected] => Obj Object
(
)
)
[1] => callBackTwo
)
Test::callBackTwo has been called as a callback.==========++++++++++=============Array
(
[0] => Obj Object
(
)
[1] => callObjOne
)
Obj::callObjOne has been called as a callback.==========++++++++++=============Array
(
[0] => Obj Object
(
)
[1] => callObjTwo
)
Obj::callObjTwo has been called as a callback.综上示例:array($object,$object方法名)()可以直接调用$object方法中对应的方法
class Foo { public static function doAwesomeThings() { FunctionCaller::callIt(self::class . '::someAwesomeMethod'); } public static function someAwesomeMethod() { echo "静态方法Callback/callable类型的调用"; } } class FunctionCaller { public static function callIt(callable $func) { call_user_func($func); } } Foo::doAwesomeThings();执行结果:静态方法Callback/callable类型的调用
本文通过一个具体的PHP类实例,展示了如何使用回调函数和闭包。文章详细解释了如何定义类和对象,设置回调方法,并利用回调函数直接调用对象方法的过程。此外,还给出了一段静态方法作为回调函数的例子。
337

被折叠的 条评论
为什么被折叠?



