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 — 取消乙個按要求呼叫的函式
get_defined_functions可以獲取所有的php函式和自定義的函式:
<?php
function a(){}
$b = get_defined_functions();
print_r($b);
//也許會顯示1000多個已定義了的函式:)
?>
function_exists函式判定乙個函式是否存在(可以是php函式,也可以是自定義函式)。
<?php
if (function_exists('a')) else
function a(){}
// 顯示 yes
?>
call_user_func函式類似於一種特別的呼叫函式的方法,使用方法如下:
<?php
function a($b,$c)
call_user_func('a', "111","222");
call_user_func('a', "333","444");
//顯示 111 222 333 444
?>
呼叫類內部的方法比較奇怪,居然用的是array,不知道開發者是如何考慮的,當然省去了new,也是滿有新意的:
<?php
class a
}call_user_func(array("a", "b"),"111");
//顯示 111
?>
call_user_func_array函式和call_user_func很相似,只不過是換了一種方式傳遞了引數,讓引數的結構更清晰:
<?php
function a($b, $c)
call_user_func_array('a', array("111", "222"));
//顯示 111 222
?>
call_user_func函式和call_user_func_array函式都支援引用,這讓他們和普通的函式呼叫更趨於功能一致:
<?php
function a(&$b)
$c = 0;
call_user_func('a', &$c);
echo $c;//顯示 1
call_user_func_array('a', array(&$c));
echo $c;//顯示 2
?>
func_num_args函式可以獲取函式接受到引數的數量:
<?php
function a()
a(111, 222, 333);
//顯示 3
?>
func_get_arg函式可以獲取某乙個傳遞過來引數的值,在下面的例子中,在函式中並沒有具體說明有哪些引數會被接受,利用func_get_arg還可以獲取額外的引數:
<?php
function a()
a (111, 222, 333);
//顯示 222
?>
func_get_args函式的作用和func_get_arg非常相似,是把所有的引數當成陣列來呼叫:
<?php
function a()
} a(111, 222, 333);
//顯示 111 222 333
?>
create_function函式可以建立乙個匿名的函式(函式名被php預設為lambda_1,lambda_2),樣子比較古怪,但是形式比較奇特,要注意第二個引數內的語句要有「;」分隔:
<?php
$newfunc = create_function('$a,$b', 'return $a + $b;');
echo $newfunc;
echo $newfunc(2, 3);
//顯示 lambda_1 5
?>
register_shutdown_function函式可以註冊乙個在頁面載入完成之後執行的函式(功能有點像快取),register_shutdown_function也可以像call_user_func函式一樣用作對類內部方法的呼叫:
<?php
function a()
echo 111;
register_shutdown_function('a');
//顯示 111 222
?>
<?php
class a
}register_shutdown_function (array ('a', 'b'), '111');
//顯示 111
?>
register_tick_function函式和unregister_tick_function函式必須要和declare流程控制機制合併使用,那麼就先了解一下declare和tick:
declare (directive)
tick 是乙個在 declare **段中直譯器每執行 n 條低階語句就會發生的事件。n 的值是在 declare 中的 directive 部分用 ticks=n 來指定的。在每個 tick 中出現的事件是由 register_tick_function() 來指定的。舉例如下:
<?
function foo($str)
register_tick_function("foo", "count");
declare (ticks = 6)
}?>
在這個例子中的declare(ticks = n)流程控制裡面,每執行6行(ticks = 6)**,就需要執行一次foo()函式,通過更改ticks的值,我們可以獲得不同的執行結果。
為何那麼多女人不想嫁人
為何那麼多女人不想嫁人?為何我不願意嫁給你?你叫我給你乙個理由,是的,我有理由。理由是 結了婚,我不再是情人,也不再重要,我只是乙個黃臉婆。我不願意被冷落。理由是 結了婚,我的地位遠遠落後你家的每乙個人,我再也得不到關愛的眼神。理由是 結了婚,所有親友的問候語就會變成 什麼時候生小孩啊?我不要生小孩...
為什麼那麼多「偽需求」?
為什麼有那麼多 偽需求 做產品或做工具,經常碰到 偽需求 的問題,其實業界早有定論,使用者說不清楚自己的需求是什麼?有兩個流行的著名故事,第乙個故事,在汽車出現之前,福特去調研使用者,眾多使用者表示 我們需要一輛更快的馬車 第二個故事,大學城邊酒店林立,競爭激烈,其中一家的酒店老闆開始使用者調研,每...
為什麼華為加班那麼多
為什麼華為加班那麼多?十年前,pc機 個人電腦 的記憶體還是256k,512k為主流,再往前,記憶體就更小了。為了節省空間,編寫的程式都是很精練的。是否還記得有這樣一道演算法題 不用額外的變數,交換兩個變數的值。連乙個臨時變數的空間都節省了。現在的pc機記憶體已是4g,8g為主流了,伺服器的記憶體就...