php函數call_user_func和call_user_func_array用法執行個體詳解

來源:互聯網
上載者:User
看UCenter的時候有一個函數call_user_func,百思不得其解,因為我以為是自己定義的函數,結果到處都找不到,後來百度了一下才知道call_user_func是內建函數

call_user_func函數類似於一種特別的調用函數的方法,使用方法如下:

function a($b,$c) { echo $b; echo $c; } call_user_func('a', "111","222"); call_user_func('a', "333","444"); //顯示 111 222 333 444

調用類內部的方法比較奇怪,居然用的是array,不知道開發人員是如何考慮的,當然省去了new,也是滿有新意的:

class a { function b($c) { echo $c; } } call_user_func(array("a", "b"),"111"); //顯示 111

call_user_func_array函數和call_user_func很相似,只不過是換了一種方式傳遞了參數,讓參數的結構更清晰:

function a($b, $c) { echo $b; echo $c; } call_user_func_array('a', array("111", "222")); //顯示 111 222

call_user_func_array函數也可以調用類內部的方法的

Class ClassA { function bc($b, $c) { $bc = $b + $c; echo $bc; } } call_user_func_array(array('ClassA','bc'), array("111", "222")); //顯示 333

call_user_func函數和call_user_func_array函數都支援引用,這讓他們和普通的函數調用更趨於功能一致:

function a(&$b) { $b++; } $c = 0; call_user_func('a', &$c); echo $c;//顯示 1 call_user_func_array('a', array(&$c)); echo $c;//顯示 2

php之call_user_func_array的簡易用法

<?php function foobar($arg, $arg2) { echo FUNCTION, " got $arg and $arg2\n"; } class foo { function bar($arg, $arg2) { echo METHOD, " got $arg and $arg2\n"; } } // Call the foobar() function with 2 arguments call_user_func_array("foobar", array("one", "two")); // Call the $foo->bar() method with 2 arguments $foo = new foo; call_user_func_array(array($foo, "bar"), array("three", "four")); ?>

以上常式的輸出類似於:
foobar got one and two
foo::bar got three and four
Example #2 call_user_func_array() using namespace name

<?php namespace Foobar; class Foo { static public function test($name) { print "Hello {$name}!\n"; } } // As of PHP 5.3.0 call_user_func_array(NAMESPACE .'\Foo::test', array('Hannes')); // As of PHP 5.3.0 call_user_func_array(array(NAMESPACE .'\Foo', 'test'), array('Philip')); ?>

以上常式的輸出類似於:
Hello Hannes!
Hello Philip!
Example #3 Using lambda function

<?php $func = function($arg1, $arg2) { return $arg1 * $arg2; }; var_dump(call_user_func_array($func, array(2, 4))); /* As of PHP 5.3.0 */ ?>

以上常式會輸出:
int(8)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.