2011-05-21 145 views
0

是否有可能得到這些值的函數中,並使用功能 這裏外面那些是我的代碼:如何從函數內部獲取值?

<? 
    function expenditure() { 
    $totalexpenditure = $sum1 + $sum2; 
    } 
    function income() { 
    totalincome = $sum1 + $sum2; 
    } 
    $profit = $totalincome - $totalexpenditure; 
    ?> 

現在我的問題是,我怎樣才能得到totalincome和toatalexpenditure的價值? 我正在學習php新功能,所以請幫助我。

+6

我必須失去了一些東西,你爲什麼不只是返回從功能上totalincome和totalexpenditure? – sverre 2011-05-21 11:13:16

+0

你是否知道你的功能:1)你將有'$ profit'等於零,除非2)不將值賦給'$ sum1'和'$ sum2',而不會讓它們成爲'global'將會產生另一個問題? – Tadeck 2011-05-21 11:58:07

+0

請你可以選擇第二個答案作爲答案? – dynamic 2011-06-15 12:31:17

回答

10
<? 
function expenditure ($sum1, $sum2) { 
    $totalexpenditure = $sum1 + $sum2; 
    return $totalexpenditure; 
} 

function income ($sum1, $sum2) { 
    $totalincome = $sum1 + $sum2; 
    return $totalincome; 
} 

$profit = income ($sum1, $sum2) - expenditure($sum1, $sum2) ; 
?> 

return statement

+1

不,這是不正確的 - '$ sum1'和'$ sum2'沒有被定義。 – Tadeck 2011-05-21 12:16:36

+0

但這不是問題,他在使用return語句方面存在問題。在他的例子中,最後一行是一個等式,所以我認爲他沒有任何問題,並且它並不重要...... – Roki 2011-05-21 12:24:10

+0

這個問題指出:「是否有可能在函數內部獲得這些值? 。)' - 所以這也是如何在函數內部傳遞和使用'$ sum1'和'$ sum2'的問題。 – Tadeck 2011-05-21 12:30:54

2

你的代碼是錯誤的,因爲:

  • 職權範圍內的變量沒有指定值(你應該通過函數參數中最好給它分配的,但另一個 - 工作,但錯誤 - 解決方案使它們成爲全局變量),
  • 在給出的示例中,$profit將始終爲0(零)。

的解決方案有三個:

解決方案沒有。 1:

function expenditure ($sum1, $sum2) { 
    $expenditure = $sum1 + $sum2; 
    return $expenditure; 
} 

function income ($sum1, $sum2) { 
    $income = $sum1 + $sum2; 
    return $income; 
} 

然後你就可以使用這樣的:

$profit = income(10, 200) - expenditure(20,18); 

解決方案沒有。 2:

class Finances { 
    public $expenditure = 0; 
    public $income = 0; 
    public function addExpense($expense) { 
     $this->expenditure = $this->expenditure + $expense; 
     return $this; 
    } 
    public function addIncome($income) { 
     $this->income = $this->income + $income; 
     return $this; 
    } 
    public function getProfit() { 
     return $this->income - $this->expenditure; 
    } 
} 

,然後你可以使用它像:

$my_finances = new Finances(); 
$my_finances->addExpense(20)->addExpense(18)->addIncome(10)->addIncome(10); 
$profit = $my_finances->getProfit(); 

解決方案沒有。 3:(避免使用!)

function expenditure() { 
    global $sum1, $sum2; 
    return $sum1 + $sum2; 
} 
function income() { 
    global $sum1, $sum2; 
    return $sum1 + $sum2; 
} 

然後你使用這樣的:

$sum1 = 10; 
$sum2 = 200; 
$expenditure = expenditure(); 
$sum1 = 20; 
$sum2 = 30; 
$income = income(); 
$profit = $income - $expenditure; 

我希望你看,爲什麼解決方案沒有。 3是一個壞主意(因爲通常使用global變量將某些東西傳遞給函數是個壞主意)。

+0

嘿謝謝你的答案,但我想要得到一個值的1 veriables請參閱我的完整代碼 – hamp 2011-05-21 12:39:56

+0

@hamp請描述它在很多更多的細節,最好使用示例。現在我不知道爲什麼解決方案不適合你,你需要什麼變量。如果你在說'$ profit'變量,那麼你提到的兩個解決方案(第一和第二)都適用。請提供更多細節。 – Tadeck 2011-05-21 12:43:46

+0

嘿我編輯的問題,請告訴我的方式? – hamp 2011-05-21 13:11:29

0

這涉及到另一個問題,您可能會在稍後階段面對。如果你想在一個函數中傳遞兩個變量並改變它們的值,會怎麼樣?

$var1 = 22; 
$var2 = 15; 

function multi2(&$x, &$y){ 
    $x = $x * 2; 
    $y = $y * 2; 
} 

multi2($var1, $var2); 
print $var1 . ", " . $var2; 

你會得到這樣的輸出

44, 30 

$x$y參數不是變量本身,而是一個參考(由&定義)通過的變量,這是如果有幫助您需要在內部更改外部變量的值。

鏈接瞭解更多http://php.net/manual/en/language.references.pass.php