php很多函數(shù)都支持回調(diào)函數(shù)例如:array_udiff,array_usort回調(diào)函數(shù)函數(shù)需要傳入一個callback類型當(dāng)作他的參數(shù),官方文檔里面明確指出了6種支持的回調(diào)函數(shù)參數(shù)傳入方式。 1.普通的全局方法 2.對象的方法,傳入數(shù)組當(dāng)作參數(shù) 3.靜態(tài)方法調(diào)用,傳入數(shù)組當(dāng)作參數(shù) 4
php很多函數(shù)都支持回調(diào)函數(shù)例如:array_udiff,array_usort…回調(diào)函數(shù)函數(shù)需要傳入一個callback類型當(dāng)作他的參數(shù),官方文檔里面明確指出了6種支持的回調(diào)函數(shù)參數(shù)傳入方式。
1.普通的全局方法
2.對象的方法,傳入數(shù)組當(dāng)作參數(shù)
3.靜態(tài)方法調(diào)用,傳入數(shù)組當(dāng)作參數(shù)
4.靜態(tài)方法調(diào)用,傳入字符串當(dāng)作參數(shù)
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 //靜態(tài)方法調(diào)用,這時候傳入的是一個數(shù)組 call_user_func(array('MyClass', 'myCallbackMethod')); // Type 3: Object method call //對象的方法,這時候傳入的是一個數(shù)組 $obj = new MyClass(); call_user_func(array($obj, 'myCallbackMethod')); // Type 4: Static class method call (As of PHP 5.2.3) //以字符串的形式傳入靜態(tài)方法 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); ?>
這些都是在類的外部調(diào)用匿名函數(shù),當(dāng)我們想在類的內(nèi)部調(diào)用一個屬于本類的方法的時候該怎么辦呢?
這時候我們可以使用$this
<?php class MyClass { public $property = 'Hello World!'; public function MyMethod(){ call_user_func(array($this, 'myCallbackMethod')); } public function MyCallbackMethod(){ echo $this->property; } } ?>
以前我曾愚蠢的在一個單獨類文件里面頭部或者尾部定義一個全局方法來搞定這個事情,后來才發(fā)現(xiàn)原來可以這樣調(diào)用,希望對大家有幫助。
這個調(diào)用方式在官方文檔下面的評論里面有人給出,
原文地址:php回調(diào)函數(shù), 感謝原作者分享。
PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號