Function handling 函數 實例


call_user_func_array — 讓參數以數組的形式調用一個函數
call_user_func — 調用一個存在的函數
create_function — 建立一個函數
func_get_arg — 獲取函數中某個參數的值
func_get_args — 獲取函數的所有參數並組成數組
func_num_args — 獲取一個函數的參數個數
function_exists — 判定一個函數是否存在
get_defined_functions — 獲取已有的函數信息
register_shutdown_function — 註冊一個頁面載入完成後運行的函數
register_tick_function — 註冊一個按要求調用的函數
unregister_tick_function — 取消一個按要求調用的函數


1、首先是call_user_func_array和call_user_func的區別

class myclass {
  function hello($a,$b)
  {
    echo $a,"*",$b;
  }
}

$classname = "myclass";
//call_user_func依次列出參數
call_user_func(array( $classname, 'hello'), 8, 9);

//call_user_func_array把參數寫成一個數組
call_user_func_array( array( $classname, 'say_hello'), array( 3, 5));

2、create_function

$newfunc = create_function('$a,$b,$c', 'return  $a + $b * $c;');
echo "New anonymous function: $newfunc<br>";
echo $newfunc(1, 2, 3);

//結果

//   New anonymous function: lambda_21
//   7

3、

function  foo(){

    //有2個參數
    $a = func_num_args();
    echo "參數個數",$a;
    //以數組形式返回所有參數
    var_export( func_get_args() ) ;
    //獲取弟2個參數
    echo func_get_arg(1);

}
foo(7,9);

4、函數是否存在

if(function_exists('foo')){
    echo "yes";
}else {
    echo "no";
}

5、get_defined_functions,取得所有已經定義的函數,把函數名稱放進一個數組裏面。例如:

$functions['internal']所有元素是PHP自身定義的函數,這次想知道PHP到底定義了多少個函數的兄弟們有福了,這個可能不包括擴展庫的函數,例如xml擴展庫和gd擴展庫!
另外一個元素$functions['user']中則收納了用戶自身定義的所有函數——這個地方要注意啊,我們所說的所有是指當前運行的程序文件和這個程序文件所包含的其他文件中定義的函數。

他不管用戶定義的時候寫的函數名是不是有大寫字母,這些大寫字母是不是有特殊含義,他通通的把函數名轉換爲小寫之後才寫進數組裏面

例如我們定義兩個函數:

<?php
function shortHim(){}
function helloYou(){}
$functions=get_defined_functions();
var_dump($functions['user']);

//結果是這樣的
//array(2) {  [0]=>  string(8) "shorthim"  [1]=>  string(9) "helloyou"}

6、能夠在腳本終止前回調註冊的函數

function Test()
{         
     echo 'end';
}
register_shutdown_function('Test');
echo "start<br/>";

7、

function foo1($str) {
    static $i = 0;
    print "$str: $i<br>";
    $i++;
}
register_tick_function("foo1", "count");
//unregister_tick_function("foo1");

declare (ticks = 9) {
    for($i=0; $i<20; $i++) {
        echo "$i<br>";
    }
}

//結果

0
1
2
3
4
count: 0
5
6
7
8
count: 1
9



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章