PHP中有那麼多功能強大,但卻少有使用的函式

2021-04-20 06:03:42 字數 3186 閱讀 5853

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為主流了,伺服器的記憶體就...