call_user_func函數和call_user_func_array函數(PHP)#
最近在波哥手中寫一個php的框架。
call_user_func這個函數查了查手冊還是不是太明白,就在網上搜了搜,找到了一篇參考文章終于解了疑惑:
今天偶然的情況下在CodeIgniter的官方文檔中再次看到了php中的call_user_func_array()這個函數,去年也在discuz論壇的代碼中也有遇到過,但是當時不知道怎么回事,在網上沒有找到相應的說明,所以也一直都沒弄明白這個函數有什么用處。呵呵~~很幸運的是,今天在網上搜索到了這個函數的用法(PS:雖然php手冊中有關于這個函數的介紹,但是看了介紹還是不明白,也不知道是我的理解能力不行還是文檔說明的太模糊了,不信你自己去看看:http://cn2.php.net/call_user_func_array)
下面來和大家分享一下這個call_user_func_array和call_user_func函數的用法,另外附贈func_get_args()函數和func_num_args()函數,嘿嘿!!
call_user_func函數是當需要動態(tài)調用函數時,才使用的,這個函數有兩種用法:
第一種是調用孤獨的函數:
<?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ā)現,這個用法有點像javascript中的call方法,嘿嘿
第二種是調用類內部的函數:
<?php
class a{
function b()
{
//func_get_args — 返回一個包含函數參數列表的數組
//func_num_args - 獲取傳入函數中的參數的個數。
$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()里的第一個參數是實例化的一個
上面這個例子,自己運行一下看看結果是什么吧嘿嘿提示一下func_get_args()函數是獲取傳入到函數中的參數,返回一個數組,func_num_args()函數獲取傳入函數中的參數的個數。
下面再來看看
call_user_func_array函數
這個函數也是當需要動態(tài)調用函數時用到的,它的用法和call_user_func函數比較像,只是參數傳入的是數組。
<?php
function a($b, $c)
{
echo $b;
echo $c;
}
call_user_func_array('a', array("111", "222"));
//顯示 111 222
call_user_func_array函數也可以調用類內部的方法的
<?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)調用函數的例子:是從網上找來的:
function otest1 ($a)
{
echo( '一個參數' );
}
function otest2 ( $a, $b)
{
echo( '二個參數' );
}
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");
呵呵~上面這個例子,還是你們自己運行一下,那樣印象更加深刻