『壹』 php里如何獲取函數的調用者名稱
先放上來別人的例子吧:
call_user_func函數類似於一種特別的調用函數的方法,使用方法如下:
復制代碼 代碼如下:
function a($b,$c)
{
echo $b;
echo $c;
}
call_user_func('a', "111","222");
call_user_func('a', "333","444");
//顯示 111 222 333 444
?>
調用類內部的方法比較奇怪,居然用的是array,不知道開發者是如何考慮的,當然省去了new,也是滿有新意的:
復制代碼 代碼如下:
class a {
function b($c)
{
echo $c;
}
}
call_user_func(array("a", "b"),"111");
//顯示 111
?>
call_user_func_array函數和call_user_func很相似,只不過是換了一種方式傳遞了參數,讓參數的結構更清晰:
復制代碼 代碼如下:
function a($b, $c)
{
echo $b;
echo $c;
}
call_user_func_array('a', array("111", "222"));
//顯示 111 222
?>
call_user_func_array函數也可以調用類內部的方法的
復制代碼 代碼如下:
Class ClassA
{
function bc($b, $c) {
$bc = $b + $c;
echo $bc;
}
}
call_user_func_array(array('ClassA','bc'), array("111", "222"));
//顯示 333
?>
call_user_func函數和call_user_func_array函數都支持引用,這讓他們和普通的函數調用更趨於功能一致:
復制代碼 代碼如下:
function a($b)
{
$b++;
}
$c = 0;
call_user_func('a', $c);
echo $c;//顯示 1
call_user_func_array('a', array($c));
echo $c;//顯示 2
另:call_user_func函數和call_user_func_array函數都支持引用。
復制代碼 代碼如下:
<?php
function increment(&$var)
{
$var++;
}
$a = 0;
call_user_func('increment', $a);
echo $a; // 0
call_user_func_array('increment', array(&$a)); // You can use this instead
echo $a; // 1
?>
『貳』 php匿名函數中的use有什麼用
php文檔中關於use的說明
所有支持命名空間的PHP版本支持三種別名或導入方式:為類名稱使用別名、為介面使用別名或為命名空間名稱使用別名。PHP5.6開始允許導入函數或常量或者為它們設置別名。
在PHP中,別名是通過操作符use來實現的.下面是一個使用所有可能的五種導入方式的例子:
Example#1使用use操作符導入/使用別名
<?php
namespacefoo;
useMyFullClassnameasAnother;
//下面的例子與useMyFullNSnameasNSname相同
useMyFullNSname;
//導入一個全局類
useArrayObject;
//importingafunction(PHP5.6+)
usefunctionMyFullfunctionName;
//aliasingafunction(PHP5.6+)
;
//importingaconstant(PHP5.6+)
useconstMyFullCONSTANT;
$obj=newnamespaceAnother;//實例化fooAnother對象
$obj=newAnother;//實例化MyFullClassname對象
NSnamesubnsfunc();//調用函數MyFullNSnamesubnsfunc
$a=newArrayObject(array(1));//實例化ArrayObject對象
//如果不使用"useArrayObject",則實例化一個fooArrayObject對象
func();//
echoCONSTANT;//
?>
『叄』 php調用自定義函數
&引用符號。
不加引用時候,你傳進去的$a被復制了一份,然後你在函數裡面改變$a實際上是改變復制的那個,原來的那個不變,退出函數後$a還是原來那個值。
加了引用符號後裡面的$a就是外面的$a的引用,修改了函數裡面的$a就等於修改了外面的$a。
『肆』 php 問題 unexpected T_FUNCTION
整理了一下格式,代碼沒有問題,三次輸出中第一個和第三個都能正常顯示,第二個會提示全局變數里沒有index v1,因為你的$v1是定義在function裡面的,所以提示沒有也是正確的。
如果還報錯就檢查一下各種括弧的匹配對不對,還不行就報一下PHP版本
functionfunc1(){
$v1=10;
$v2=20;
$func2=function()use($v1,&$v2){
$v1++;
$v2--;
var_mp($v1,$v2);
//11,19
var_mp($GLOBALS['v1']);
};
$func2();
var_mp($v1,$v2);
//10,19
}
『伍』 php 使用use 和直接傳參的區別
實際應用 1 : 在創建閉包時, 生成所use變數的快照, 下文再次調用閉包函數時, 快照變數不改變
$a = 5;
$b = function ($x) use ($a) {
$a += $x; echo $a;
};
$a = 10; // 這個變數被再次賦值, 但是在use語句中的'快照'是不會改變的
$b(100); // 輸出 : 105
實際應用 2 : 使用引用傳值, 生成所use變數的指針, 下文再次調用閉包函數時, 快照變數會改變(其實這樣做與直接傳參已經沒有區別, 所以這么做意義不大, 而且代碼可讀性降低)
$a = 5;
$b = function ($x) use (&$a) {
$a += $x; echo $a;
};
$a = 10; // 變數重新賦值, 上文中閉包所引用的變數值也被改變
$b(100); // 輸出 : 110
『陸』 php function括弧里(類名 變數名)這種寫法是什麼意思
php本來是弱類型語言,經過這幾年的發展,php也支持了類型判斷,比如可以聲明一個函數變數為
function test(int $a):int{}
對於類名,變數名這種寫法,是php5中引入的,這樣目的就是對參數進行限定,可以提前判斷出不符合類型的變數傳入。
依賴注入是一種設計模式,而它依賴的就是這個功能,通過注入不同的類來實現不同的功能。
『柒』 PHP匿名函數怎麼使用
這里的use實際上就是將全局的$message拷貝到局部函數中,所以很類似於global,不過和global不同的是:
use時:當你在函數中對$message更改的時候不會影響到全局的那個$message,也就是說使用use實際上是拷貝一份變數到函數中。
global時:正相反,在函數中對$message更改的時候會影響到全局的那個$message。我在後盾人視頻平台才看見教師講這個,沒想到就能幫到你,呵呵太有趣了
『捌』 php 函數內引用全局變數
<?php
$var1 = "Example variable";
$var2 = " ";
function global_references($use_globals)
{
global $var1, $var2;
if (!$use_globals) {
$var2 =& $var1; // visible only inside the function///???
} else {
$GLOBALS["var2"] =& $var1; // visible also in global context
}
}
global_references(false);//變數$var2賦值為對$var1的引用,但是它的值在函數外不可見,他是一個局部變數
echo "var2 is set to '$var2'\n<br>";
global_references(true);//將$var2注冊到全局變數數組中賦值為對變數$var1的引用,他是全局可見的
echo "var2 is set to '$var2'\n";
?>