2014-09-26 46 views
-4

我需要能夠調用存儲在一個函數如下不同的參數:如何從PHP中的相同函數調用不同的參數?

function foo() { 

    if(get_option('option_1')) { 
     $argument_1 = 'this one'; 
    } else { 
     $argument_1 = 'that one'; 
    } 

    if(get_option('option_2')) { 
     $argument_2 = 'this two'; 
    } else { 
     $argument_1 = 'that two'; 
    } 

} 

現在我需要調用在不同的文件中,這些參數如下(僞代碼):

<?php echo foo($argument_1); ?> 

<?php echo foo($argument_2); ?> 

何我能做到嗎?謝謝。

+0

那麼問題是什麼?你在正確的軌道上。 – 2014-09-26 17:46:19

+0

@Jay Blanchard對不起,請參閱最新的問題。 – 2014-09-26 17:47:22

+0

難道你不能把它分成兩個功能?一個返回$ variable_1,另一個返回$ variable_2 – DaveS 2014-09-26 17:49:37

回答

2

你正在考慮這個倒退。 foo()沒有暴露其變量爲其他代碼看到,它們完全被包含在其範圍內。相反,函數可返回值(可能來自其內部變量之一)。

當你的調用該函數時,你可以提供它來確定返回的內容。因此,相反,你可能有這樣的結構:

function foo($option) { 

    if($option == 'option_1' ) { 
     return 'this one'; 
    } else { 
     return 'that one'; 
    } 

} 

然後,當你調用該函數,你爲它提供它需要執行計算的信息:

<?php echo foo(get_option('option_1')); ?> 

的想法是,對該函數的整個調用(將其值傳遞給它)計算爲單個結果值。因此,foo(get_option('option_1'))在執行時邏輯上與this one相同。

所以你不問foo「你擁有的變量的價值是什麼?」封裝意味着消費代碼既不知道也不關心foo的內部。相反,你問foo「這是你要計算的東西,結果是什麼?」

+0

接受!最好! – 2014-09-26 18:15:59

1

你的意思是一個的論點?隨着函數參數(有時稱爲參數),你可以一個變量或值傳遞給函數,並把它作爲一個局部變量:

function foo($localVariableName) 
{ 
    echo $localVariableName . $localVariableName; 
} 

foo('abc'); // echoes abcabc 

你可以有更多的還有:

function foo($parameter1, $parameter2) 
{ 
    echo "$parameter1 - $parameter2"; 
} 

$a = "abc"; 
$x = "def"; 
foo($a, $x); // echoes abc - def 
foo($x, $a); // echoes def - abc 

還有其他的可能性,所以看看PHP.net - Function arguments

+0

謝謝,但實際上我會使用超過20個參數,所以這個函數foo($ parameter1,$ parameter2,$ parameter2,...... )'看起來不太好我猜...任何建議? – 2014-09-26 17:55:25

+0

@LiviuCostache:在這一點上,你有幾個選項,根據問題中過分簡化的例子,沒有一個可以特別推薦。如果函數做了很多不同的事情,那麼很可能它應該被分離成不同的函數。如果它根據許多不同的信息完成一件複雜的事情,那麼這些不同的信息應該可以合併到一個對象中,並且該對象完整地傳遞給該函數。 (那個對象可以有內部邏輯來維護這些多個值彼此之間的關係。) – David 2014-09-26 18:18:13

相關問題