2013-01-02 177 views
1

可能重複:
Any way to specify optional parameter values in PHP?
How would I skip optional arguments in a function call?是否可以在函數調用中省略隨機參數?

我有這樣的聲明:

public function table_creator($thread, $table_body, $class='datagrid', $caption=null){ 
    some code 
} 

,當我執行它像:

<?php echo SomeClass::table_creator($this->report_keys, $report, $caption="Answers"); ?> 

在變量$class有「答案」insted的「datagrid」,有沒有辦法不通過$class它的工作?

+0

參數傳遞採用在函數中聲明它們的順序。它不知道哪一個可以作爲默認值逃脫。 –

回答

2

PHP沒有命名參數(或關鍵字參數)。我建議您嘗試以下樣式:

public function table_creator($thread, $table_body, $options=array()){ 
    $default_options = array(
    "class" => "datagrid", 
    // you can add more default options here 
); 
    $options = array_merge($default_options, $options); 
    // some code 
} 

然後,你可以這樣調用:

echo SomeClass::table_creator($this->report_keys, $report, 
           array("caption" => "Answers"); 
0

PHP不起作用,您需要更改該用法的$class$caption參數的順序才能正常工作。通過在函數調用中使用$caption="Answers",您正在分配一個變量值並將一個字符串「Answers」作爲該函數的第三個參數。

0

如果傳遞空值對於類參數將通過取值數據網格工作作爲默認的

您必須聲明爲靜態,直接使用::

調用函數

所以申報是應該的,

public static function table_creator($thread, $table_body, $class='datagrid', $caption=null){ 
    some code 
} 

那麼,你爲什麼要通過將值傳遞的第三個參數,

更改下面的代碼從

<?php echo SomeClass::table_creator($this->report_keys, $report, $caption="Answers"); ?> 

TO

<?php echo SomeClass::table_creator($this->report_keys, $report, "Answers"); ?> 

OR

<?php echo SomeClass::table_creator($this->report_keys, $report); ?> 
+0

這不回答這個問題。 – scoota269

0

聲明有四個參數,你傳遞只有三個。如果你想覆蓋的第四個參數的默認值,你必須明確地傳遞第三和:

echo SomeClass::table_creator($this->report_keys, $report, 'datagrid', "Answers"); ?> 

你現在使用PHP不工作的方法,雖然它在一些其他語言工作。

如果你需要經常這樣,你可以創建一個函數來爲你做它:

function createTableDataGrid($keys, $report, $caption) 
{ 
    echo table_creator($keys, $report, 'datagrid', $caption); ?> 
} 

如果類是你的編輯,你可以在類的額外的方法做到這一點,而不是一個單獨的功能。

+0

是啊我知道例如在Python中:D – Viszman

0

代替$標題= 「回答」 用這個代碼調用成員函數

$字幕= 「答案」 回波SomeClass的:: table_creator($這 - > report_keys,$報告,$字幕); ?>

+0

這不會有任何不同,以目前的情況。 – scoota269

1

參數傳遞採用在函數中聲明的順序。它不知道哪一個可以作爲默認值逃脫。

默認參數將被覆蓋從左到右。

如果你知道'datagrid'將會是$class的值,爲什麼不通過它呢?

<?php 
echo SomeClass::table_creator($this->report_keys, $report,'datagrid',$caption='Answers'); 
?> 
0

在PHP中,在函數中有聲明的同一順序接收參數。 因此,如果你的函數收到4個參數,而你只傳遞3個參數,那麼最後一個參數什麼都沒有。

也只是因爲您使用$caption="Answers"並不意味着被調用的函數會將其接收到它的$caption參數中。長話短說,確保參數匹配。如果您想跳過一個參數,請使用null,以便使用聲明的默認值。

這樣你就可以像這樣解決問題:

<?php 
echo SomeClass::table_creator($this->report_keys, 
           $report, 
           null, 
           $caption="Answers"); ?> 

正如一個側面提醒,您正在訪問的實例方法,就好像它是一個類/靜態方法。你可能想改變它。

相關問題