2012-08-17 57 views
0

在PHP中,是否有可能獲得編碼參數?php函數編碼的默認參數num

像這樣(僞代碼):

function($a=false , $b=true){ //the $a=true... is just parameters, with default values 
    echo func_num_args(); 
    echo ", "; 
    echo func_get_coded_params(); //how do i do this in PHP? 
} 

echo function(1 , 2); // output -> 2, 2 

echo function(1, 2, 3, 4, 5, a, b, c); // output -> 8, 2 

是否有辦法/虛函數(func_get_coded_params()),可以檢索默認編碼參數算什麼? 在這種情況下,編碼參數是$ a和$ b本身返回2. 如果我做function($a, $b, $c)它將返回3

+0

你爲什麼要這麼做?它在每個功能中都是不變的。 – 2012-08-17 15:53:31

+0

你不應該有$ a和$ b那裏,如果你使用func_num_args()或func_get_args() – Waygood 2012-08-17 15:53:48

+0

我仍然需要我的默認參數在我的功能,所以這就是爲什麼我需要$ a和$ b和VAR像 – tom91136 2012-08-17 15:55:23

回答

4

使用ReflectionFunction並調用getNumberOfParameters方法。

可以使用創建當前函數的一個實例:

$func = new ReflectionFunction(__FUNCTION__); 

而且使用

$func->getNumberOfRequiredParameters(); 

編輯

對於類使用得定義參數的數量。

$func = new ReflectionMethod(__CLASS__, __FUNCTION__); 
+0

+1你學習正是我要找的東西每一天 – Waygood 2012-08-17 16:01:47

+0

新! – tom91136 2012-08-17 16:04:55

+0

等待,如果我想在__construct()中執行此操作,該怎麼辦?我試圖把這個結構和拋出一個異常說__construct()沒有找到...... – tom91136 2012-08-17 16:08:30

2

PHP有許多有用的Reflection類可以使用。

function whatever($a, $b, $c) 
{ 
    $reflection = new ReflectionFunction(__FUNCTION__); 
    echo func_num_args() . ', ' . $reflection->getNumberOfRequiredParameters(); 
} 

whatever(1,2,3,4,5); // Prints 5, 3 

檢查http://www.php.net/manual/fr/class.reflectionfunction.php

0

這將你需要的東西:

class x 
{ 
    function __construct($a=1,$b=2) 
    { 

     $constructor = new ReflectionMethod(__CLASS__,__FUNCTION__); 
     $params = $func->getNumberOfParameters(); 
     echo func_num_args().",".$params; 
    } 
} 
$x = new x(1,2,3,4); //output -> 4,2 

注意,因爲你有在構造函數中的參數,定義的默認值,你需要調用的是getNumberOfParameters()而不是getNumberOfRequiredParameters()(因爲沒有必需的參數,它們都有默認值)