我們主要使用函數參數來取得函數內部的外部資料以進行進一步處理。類似地,我們從 PHP 函數傳回值以存取函數外部已處理的資料。您可以在 PHP 中定義帶或不帶返回值的函數。
雖然 PHP 中的函數可以有多個參數,但它不可能有多個回傳語句。在本教程中,我將向您展示如何從 PHP 中的函數傳回多個值。
PHP 中的函數可以有一個可選的 return
語句。當從函數內部呼叫時,返回語句會立即停止任何進一步程式碼的執行。這也包括其他返回語句。這是一個例子:
<?php function multiple_returns($a, $b) { $x = 2*$a; $y = 3*$b; return $x; if($y%3 == 0) { echo "Y is: ".$y; } return $y; } $m = 0; $n = 0; $m = multiple_returns(5, 18); // list($m, $n) = multiple_returns(5, 18); // Outputs: Values are: 10 and 0 echo "Values are: ".$m." and ".$n; ?>
請注意,執行上述程式碼不會回顯有關 $y
值的語句。這是因為函數在第一個 return 語句後停止執行。如果取消註解我們使用list()
指派變數值的行,則$m
和$n
都會是NULL
因為list()
僅適用於數組,且該函數僅傳回一個數字。
我們知道 return 語句可以傳回任何類型的值。因此,我們也可以使用它來傳回一個數組,其中包含我們實際想要傳回的所有值。我們可以將上面的範例重寫如下以傳回多個值:
<?php function multiple_returns($a, $b) { $x = 2*$a; $y = 3*$b; return [$x, $y]; } list($m, $n) = multiple_returns(5, 18); // Outputs: Values are: 10 and 54 echo "Values are: ".$m." and ".$n; ?>
從 PHP 的角度來看,您仍然會傳回單一值,但該單一值是一個可以包含多個其他值的陣列。這是 PHP 中模擬函數傳回多個值的最簡單方法之一。
在上面的範例中,我們只傳回兩個值。但是,當涉及更多值時,事情可能會變得有點棘手,因為您必須記住傳回值的正確順序。
從 PHP 7.1 開始,您可以將 list()
與關聯陣列一起使用。這意味著傳回元素的順序不會影響分配的值。這是一個例子:
<?php function multiple_returns($a, $b) { $x = 2*$a; $y = 3*$b; return ['m' => $x, 'n' => $y]; } list('m' => $m, 'n' => $n) = multiple_returns(5, 18); // Values are: 10 and 54 echo "Values are: ".$m." and ".$n; list('n' => $n, 'm' => $m) = multiple_returns(5, 18); // Values are: 10 and 54 echo "Values are: ".$m." and ".$n; ?>
您可以看到變數 $m
和 $n
在兩種情況下都獲得相同的值,因為現在是根據鍵而不是數字索引來分配值。
從 PHP 7.1 開始,您甚至不需要使用 list()
,因為 PHP 現在支援解構語法。我們可以將前面的範例重寫為:
<?php function multiple_returns($a, $b) { $x = 2*$a; $y = 3*$b; return ['m' => $x, 'n' => $y]; } ['m' => $m, 'n' => $n] = multiple_returns(5, 18); // Values are: 10 and 54 echo "Values are: ".$m." and ".$n; ['n' => $n, 'm' => $m] = multiple_returns(5, 18); // Values are: 10 and 54 echo "Values are: ".$m." and ".$n; ?>
從 PHP 函數傳回多個值的另一種方法是傳回一個物件。我們可以使用公共成員變數定義具有不同屬性的類別。這種技術的一個缺點是您必須編寫更多程式碼,因此它將消耗更多記憶體來儲存類別的多個實例。優點是您可以在多個地方使用同一組變數。
<?php class ValueStore { public $m; public $n; } function multiple_returns_class($a, $b) { $my_values = new ValueStore(); $my_values->m = 2*$a; $my_values->n = 3*$b; return $my_values; } $values = multiple_returns_class(5, 18); // Values are: 10 and 54 echo "Values are: ".$values->m." and ".$values->n; ?>
如您所見,我們只需建立一個物件並將值指派給其各種屬性,就可以成功地從函數中取得多個值。
在本教學中,您了解到 PHP 不允許您直接從函數傳回多個值。但是,您可以將多個值打包為數組或物件來繞過該限制。之後,您只需從函數返回數組或對象,然後訪問這些值。
以上是如何從一個PHP函數傳回多個值的詳細內容。更多資訊請關注PHP中文網其他相關文章!