第一種,
創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為樂業(yè)企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、網(wǎng)站建設(shè),樂業(yè)網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
常規(guī)的php全局函數(shù)
function
test($echo)
{
echo
$echo,
"\n";
}
$param
=
array("");
call_user_func_array(test,
$param);
call_user_func_array("test",
$param);
輸出:
兩種調(diào)用方式都可以成功調(diào)用,
說明call_user_func_array調(diào)用常規(guī)php局函數(shù)時的第一個參數(shù)可以為函數(shù)本身,也可以為表示函數(shù)名的字符串。
第二種,
類的靜態(tài)方法
class
TestC
{
static
function
test($echo)
{
echo
$echo,
"\n";
}
}
$param
=
array("");
call_user_func_array(array(TestC,
"test"),
$param);
call_user_func_array(array("TestC",
"test"),
$param);
輸出:
這時傳第一個參數(shù)的時候傳了一個數(shù)據(jù)。數(shù)組的第一個元素可以為類本身,也可以為類名的一個字符串。第二個元素則是一個表示方法名的字符串。
第三種,對象的方法
class
TestC
{
protected
$_a
=
"hello
word";
function
test($echo)
{
$this-_a
=
$echo;
}
function
show()
{
echo
$this-_a,
"\n";
}
}
$param
=
array("");
$obj
=
new
TestC();
call_user_func_array(array($obj,
"test"),
$param);
$obj-show();
$obj-test("WEB應(yīng)用開發(fā)");
$obj-show();
輸出:
WEB應(yīng)用開發(fā)
這里是調(diào)用一個對象的方法。從test方法中設(shè)置對象的_a成員,然后通過show方法將它顯示出來,以驗(yàn)證call_user_func_array調(diào)用方法時可以正確等到$this指針。這里輸出的結(jié)果表明已經(jīng)上面的方法是奏效的。其實(shí)回調(diào)對象的方法還有一種更加簡單的方法,直接$obj-{$method}()就可以調(diào)用,只要{$method}是存在的。
回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng)這個指針被用來調(diào)用其所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時由另外的一方調(diào)用的,用于對該事件或條件進(jìn)行響應(yīng)。
php提供了兩個內(nèi)置函數(shù)call_user_func()和call_user_func_array()提供對回調(diào)函數(shù)的支持。這兩個函數(shù)的區(qū)別是call_user_func_array是以數(shù)組的形式接收回調(diào)函數(shù)的參數(shù)的,看它的原型就知道了:mixed call_user_func_array ( callable $callback,array$param_arr ),它只有兩個參數(shù)。而call_user_func($callback,參數(shù)1,參數(shù)2,…)的參數(shù)個數(shù)根據(jù)回調(diào)函數(shù)的參數(shù)來確定的。
原文
PHP Array 函數(shù)
定義和用法
array_udiff() 函數(shù)返回一個數(shù)組,該數(shù)組包括了所有在被比較數(shù)組中,但是不在任何其它參數(shù)數(shù)組中的值,鍵名保留不變。
array_udiff() 函數(shù)與 array_diff() 函數(shù) 的行為不同,后者用內(nèi)部函數(shù)進(jìn)行比較。
數(shù)據(jù)的比較是用 array_udiff() 函數(shù)的 function 進(jìn)行的。function 函數(shù)帶有兩個將進(jìn)行比較的參數(shù)。如果第一個參數(shù)小于第二個參數(shù),則函數(shù)返回一個負(fù)數(shù),如果兩個參數(shù)相等,則要返回 0,如果第一個參數(shù)大于第二個,則返回一個正數(shù)。
其實(shí)傳入的參數(shù)作用是指定對比規(guī)則,實(shí)際上就是用戶可以自己定義什么是大于,等于,小于
例如,正常的用法
function($a,$b){
if($a $b) return 1;
if($a $b) return -1;
return 0;
}
但是,如果有特殊的需求,我們也可以聲明特別的規(guī)則,如
function ($a, $b) {
if($a + 1 $b) return -1;
if ($a + 1 $b) return 1;
if ($a + 1 == $b) return 0;
}
具體看是想對元素如何操作,比如 array_filter():用回調(diào)函數(shù)過濾數(shù)組中的單元,可以使用回調(diào)函數(shù)對數(shù)組中元素進(jìn)行篩選剔除元素;
如果是針對每個元素,使用其他函數(shù)的話,array_map :數(shù)組的每個元素應(yīng)用回調(diào)函數(shù),使用示例:
為數(shù)組每個元素執(zhí)行+5計算;
$arr = [1,2,3,4,5];
#匿名函數(shù)操作
$res=array_map(function($item){return $item*2; },$arr);
array_map("函數(shù)名", 數(shù)組);支持使用 函數(shù)名+數(shù)據(jù)變量 使用。
數(shù)組是PHP程序設(shè)計中十分重要的一環(huán)。本文介紹PHP中數(shù)組函數(shù)array_map()的用法,實(shí)現(xiàn)將回調(diào)函數(shù)作用到給定數(shù)組單元上。具體如下:
array
array_map
(
callable
$callback
,
array
$arr1
[,
array
$...
]
)
array_map()
返回一個數(shù)組,該數(shù)組包含了
arr1
中的所有單元經(jīng)過
callback
作用過之后的單元。
callback
接受的參數(shù)數(shù)目應(yīng)該和傳遞給
array_map()
函數(shù)的數(shù)組數(shù)目一致。
示例程序如下:
function
fun($n)
{
return
$n
*
$n
*
$n;
}
$a
=
array(1,
2,
3,
4,
5);
$b
=
array_map('fun',
$a);
/*
每個數(shù)組單元作三次方運(yùn)算,返回數(shù)組
*/
print_r($b);
輸出結(jié)果為:
Array
(
[0]
=
1
[1]
=
8
[2]
=
27
[3]
=
64
[4]
=
125
)
此外,array_map()函數(shù)還有如下幾種用法:
array_map('unlink',
glob('*.txt'));/*
glob返回"文件名.txt"組成的數(shù)組,然后對每個文件進(jìn)行刪除操作*/
array_map('unlink',
glob('*.*'));
array_map('unlink',
glob('*'));
如果不使用array_map(),對數(shù)組每個單元進(jìn)行操作就只能遍歷然后適當(dāng)組裝。
更多的應(yīng)用讀者可以根據(jù)具體的項目需求進(jìn)行挖掘。
具體代碼如下:
?php
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, '');
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
echo $file_contents;
?
PHP 獨(dú)特的語法混合了C、Java、Perl以及PHP自創(chuàng)的語法。
它可以比CGI或者Perl更快速地執(zhí)行動態(tài)網(wǎng)頁。用PHP做出的動態(tài)頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)文檔中去執(zhí)行,
執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多;
PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行,使代碼運(yùn)行更快。