2009-12-09 80 views
1
function get_tags_by_criteria($gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%", $tag="") { 

時,我只是想通過標籤參數,讓別人在默認情況下,我怎麼寫?幫助,傳遞參數的功能

我試過這個,但它沒有工作。

get_tags_by_criteria("", "", "", "", "", "", computer); 

回答

2

您可以使用關聯數組模擬命名參數:

function my_function($options) 
{ 
    extract($options); 
} 

然後調用

my_function(array("parameter1" => "value1", "parameter2" => "value2")); 

,與強大的檢查和內部功能的默認值表結合,做工非常漂亮,我。

缺點:沒有phpDoc慣例來記錄參數,並且當您鍵入時,您的IDE將無法顯示可用的參數。您必須將可用參數輸入到@desc塊中,這取決於您的IDE,可能會或可能不會很好。

對此的一種解決方法是聲明函數中的所有參數,但使所有參數都可用,但第一個參數是可選的。第一個可以是包含值的關聯數組。

+0

你可以在這裏閱讀更多關於'extract':http://php.net/manual/en/function.extract.php – Steven 2010-10-07 00:23:46

0

這在PHP中是不可能的。

+0

我應該怎麼做,然後有選擇哪些參數相同的效果來傳遞的,哪些我想使用的默認值?我不想爲此創建7個不同的功能。 – 2009-12-09 00:47:12

+0

對不起,但創建7個不同的功能是唯一的選擇,儘管OOP可能會幫助你。 – 2009-12-09 00:48:57

+1

這是爲什麼被低估? – 2009-12-10 10:55:27

2

首先把標籤參數:

function get_tags_by_criteria($tag="", $gender="%", $min_age_of_birth="%", $max_age_of_birth="%", $country="%", $region="%", $city="%") 

,並調用它是這樣的:

get_tags_by_criteria(computer); 
1

可惜你不能做到這一點 - 未指定可選的參數必須總是在末端一個函數參數列表。相反,你可以做的是使用NULL作爲你不想指定的參數,然後讓你的函數檢查一下參數是否爲NULL,並將其賦值爲默認值。

+0

好的答案,null或任何其他值。 – 2009-12-09 00:50:23

+1

是的,任何隨機值都可以工作,但是我傾向於使用NULL,因爲它不可能與您想要傳遞的任何實際的非默認值重疊。 :) – Amber 2009-12-09 00:52:50

2

在PHP中沒有傳入命名參數。一般來說,如果你有超過4參數,其中很多都是可選的,你可能要考慮使用改用數組或對象:

function get_tags_by_criteria($args) { 
    ... 
} 

get_tags_by_criteria(array('gender' => 'M', 'tag' => 'php')); 

您可以明確地設置通過使用對象,而不是允許的參數。

0

CakePHP框架經常使用關聯數組來指定一組選項。它甚至可以讓你指定單個參數或一個關聯數組。以模型類的find methods爲例。

這是我在讓你的功能更加靈活的嘗試:

<?php 
function get_tags_by_criteria(
    $gender = '%', 
    $min_age_of_birth = '%', 
    $max_age_of_birth = '%', 
    $country = '%', 
    $region = '%', 
    $city = '%', 
    $tag = '') 
{ 
    if (is_array($gender)) 
    { 
     $options = $gender; 
     $gender = '%'; // reset to default 
     extract($options); 
    } 

    $msg = "gender=$gender, min_age=$min_age_of_birth, " . 
     "max_age=$max_age_of_birth, country=$country, region=$region, " . 
     "city=$city, tag=$tag"; 
    return $msg; 
} 
?> 
<p><?php echo get_tags_by_criteria('M'); ?></p> 
<p><?php echo get_tags_by_criteria('M', 10); ?></p> 
<p><?php echo get_tags_by_criteria(array(
    'country' => 'ca', 
    'tag' => 'sample')); ?></p>