本文目錄一覽:
- 1、php有沒有辦法獲取函數的參數名
- 2、PHP里如何獲取函數的調用者名稱
- 3、php怎麼獲取父函數名
- 4、php有沒有什麼函數可以獲取一個方法中的參數名和參數類型的
- 5、php如何調用函數
- 6、什麼是PHP的函數?
php有沒有辦法獲取函數的參數名
可以哦,使用 Reflection 反射函數,例子:
function a($b, $c)
{
return $b.$c;
}
$reflection = new \ReflectionFunction(‘a’);
$parameters = $reflection-getParameters();
foreach ($parameters as $parameter) {
echo $parameter-name;
echo ‘br’;
}
輸出 b , a
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怎麼獲取父函數名
函數是沒有父子關係的,所以無法獲取父函數名。
對象具有父子關係,但是方法名稱和父類的方法名稱必然是同名的。
另一種可能是你想問誰調用的當前函數,可以列印堆棧信息。print_r(debug_backtrace());
php有沒有什麼函數可以獲取一個方法中的參數名和參數類型的
/**
* 獲取一個函數的依賴
* @param string|callable $func
* @param array $param 調用方法時所需參數 形參名就是key值
* @return array 返回方法調用所需依賴
*/
function getFucntionParameter($func,$param=[]) {
if(!is_array($param)) {
$param = [$param];
}
$ReflectionFunc = new \ReflectionFunction($func);
$depend = array();
foreach($ReflectionFunc-getParameters() as $value) {
if(isset($param[$value-name])) {
$depend[] = $param[$value-name];
}elseif($value-isDefaultValueAvailable()){
$depend[] = $value-getDefaultValue();
}else{
$tmp = $value-getClass();
if(is_null($tmp)) {
throw new \Exception(“Function parameters can not be getClass {$class}”);
}
$depend[] = $this-get($tmp-getName());
}
}
return $depend;
}
function test($a,$b=20) {
echo $a,’,’,$b;
}
$depend = getFucntionParameter(‘test’,[‘a’=30,’b’=40]);
call_user_func_array(‘test’,$depend); // 30,40
上面的函數是我開發的框架的容器的方法。
php提供了很完整的反射機制。不但可以反射函數,還可以反射方法,反射類構造函數。
php如何調用函數
PHP函數調用與Java/C/C++是一樣的額,通過函數名(參數列表)就可以了,
舉個栗子:
圖中,有兩處函數調用,一開始的session_start()是調用的PHP函數,validate_user($username, $password)是用戶自定義函數,同樣的方式調用。
什麼是PHP的函數?
PHP 用戶定義函數
除了內建的 PHP 函數,我們可以創建我們自己的函數。
函數是可以在程序中重複使用的語句塊。
頁面載入時函數不會立即執行。
函數只有在被調用時才會執行。
在 PHP 創建用戶定義函數
用戶定義的函數聲明以關單 “function” 開頭:
語法
function functionName() {
被執行的代碼;
}
注釋:函數名能夠以字母或下劃線開頭(而非數字)。
注釋:函數名對大小寫不敏感。
提示:函數名應該能夠反映函數所執行的任務。
在下面的例子中,我們創建名為 “writeMsg()” 的函數。打開的花括弧({)指示函數代碼的開始,而關閉的花括弧(})指示函數的結束。此函數輸出 “Hello world!”。如需調用該函數,只要使用函數名即可:
?php
function writeMsg() {
echo “Hello world!”;
}
writeMsg(); // 調用函數
?
PHP 函數參數
可以通過參數向函數傳遞信息。參數類似變數。
參數被定義在函數名之後,括弧內部。您可以添加任意多參數,只要用逗號隔開即可。
下面的例子中的函數有一個參數($fname)。當調用 familyName() 函數時,我們同時要傳遞一個名字(例如 Bill),這樣會輸出不同的名字,但是姓氏相同:
?php
function familyName($fname) {
echo “$fname Zhang.br”;
}
familyName(“Li”);
familyName(“Hong”);
familyName(“Tao”);
familyName(“Xiao Mei”);
familyName(“Jian”);
?
下面的例子中的函數有兩個參數($fname 和 $year):
?php
function familyName($fname,$year) {
echo “$fname Zhang. Born in $year br”;
}
familyName(“Li”,”1975″);
familyName(“Hong”,”1978″);
familyName(“Tao”,”1983″);
?
PHP 默認參數值
下面的例子展示了如何使用默認參數。如果我們調用沒有參數的 setHeight() 函數,它的參數會取默認值:
?php
function setHeight($minheight=50) {
echo “The height is : $minheight br”;
}
setHeight(350);
setHeight(); // 將使用默認值 50
setHeight(135);
setHeight(80);
?
PHP 函數 – 返回值
如需使函數返回值,請使用 return 語句:
?php
function sum($x,$y) {
$z=$x+$y;
return $z;
}
echo “5 + 10 = ” . sum(5,10) . “br”;
echo “7 + 13 = ” . sum(7,13) . “br”;
echo “2 + 4 = ” . sum(2,4);
?
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/206965.html