call_user_func函數(shù)和call_user_func_array函數(shù)(PHP)#
最近在波哥手中寫一個php的框架称龙。
call_user_func這個函數(shù)查了查手冊還是不是太明白,就在網(wǎng)上搜了搜戳晌,找到了一篇參考文章終于解了疑惑:
今天偶然的情況下在CodeIgniter的官方文檔中再次看到了php中的call_user_func_array()這個函數(shù)鲫尊,去年也在discuz論壇的代碼中也有遇到過,但是當時不知道怎么回事沦偎,在網(wǎng)上沒有找到相應的說明疫向,所以也一直都沒弄明白這個函數(shù)有什么用處。呵呵~~很幸運的是扛施,今天在網(wǎng)上搜索到了這個函數(shù)的用法(PS:雖然php手冊中有關于這個函數(shù)的介紹,但是看了介紹還是不明白屹篓,也不知道是我的理解能力不行還是文檔說明的太模糊了疙渣,不信你自己去看看:http://cn2.php.net/call_user_func_array)
下面來和大家分享一下這個call_user_func_array和call_user_func函數(shù)的用法,另外附贈func_get_args()函數(shù)和func_num_args()函數(shù)堆巧,嘿嘿!!
call_user_func函數(shù)是當需要動態(tài)調(diào)用函數(shù)時,才使用的妄荔,這個函數(shù)有兩種用法:
第一種是調(diào)用孤獨的函數(shù):
<?php
function funa($b,$c)
{
echo $b;
echo $c;
}
call_user_func('funa', "111","222");
call_user_func('funa', "333","444");
//顯示 111 222 333 444
//大家有沒有發(fā)現(xiàn),這個用法有點像javascript中的call方法谍肤,嘿嘿
第二種是調(diào)用類內(nèi)部的函數(shù):
<?php
class a{
function b()
{
//func_get_args — 返回一個包含函數(shù)參數(shù)列表的數(shù)組
//func_num_args - 獲取傳入函數(shù)中的參數(shù)的個數(shù)啦租。
$args = func_get_args();
$num = func_num_args();
echo "<pre>";
var_dump($args);
var_dump($num);
}
}
call_user_func(array(new a(), "b"),"111","222","OSONG");
注意一下:array()里的第一個參數(shù)是實例化的一個
上面這個例子,自己運行一下看看結(jié)果是什么吧嘿嘿提示一下func_get_args()函數(shù)是獲取傳入到函數(shù)中的參數(shù)荒揣,返回一個數(shù)組篷角,func_num_args()函數(shù)獲取傳入函數(shù)中的參數(shù)的個數(shù)。
下面再來看看
call_user_func_array函數(shù)
這個函數(shù)也是當需要動態(tài)調(diào)用函數(shù)時用到的系任,它的用法和call_user_func函數(shù)比較像恳蹲,只是參數(shù)傳入的是數(shù)組。
<?php
function a($b, $c)
{
echo $b;
echo $c;
}
call_user_func_array('a', array("111", "222"));
//顯示 111 222
call_user_func_array函數(shù)也可以調(diào)用類內(nèi)部的方法的
<?php
class ClassA
{
function bc($b, $c) {
$bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array('ClassA','bc'), array("111", "222"));
//顯示 333
下面再看一個動態(tài)調(diào)用函數(shù)的例子:是從網(wǎng)上找來的:
function otest1 ($a)
{
echo( '一個參數(shù)' );
}
function otest2 ( $a, $b)
{
echo( '二個參數(shù)' );
}
function otest3 ( $a ,$b,$c)
{
echo( '三個啦' );
}
function otest (){
$args = func_get_args();
$num = func_num_args();
call_user_func_array( 'otest'.$num, $args );
}
otest("11");
otest("11","22");
otest("11","22","33");
呵呵~上面這個例子俩滥,還是你們自己運行一下嘉蕾,那樣印象更加深刻