1. 程式人生 > 程式設計 >淺談定義一個PHP函式

淺談定義一個PHP函式

概述

<?php
function divide($dividend,$divisor){
    return $dividend / $divisor;
}
echo divide(12,4);
echo divide('sa','sd');
www.cppcns.com

這段程式碼乍一看沒毛病,但是如果你向它傳遞「任意」引數,它就會出問題。

寫出好的程式碼是一個學無止境的過程。讓我們來改進我們編寫 PHP 函式的方式。 看下上面的程式碼,想想第二個函式呼叫那裡會發生什麼情況? 它會接受你輸入的任何引數,並且嘗試執行然後丟擲一個數學錯誤。 但是我們怎麼才能讓一個函式嚴格接收能使其正確執行的引數呢? 現代的 PHP 解決了這個問題,並且有更多妙法能讓你的程式碼質量更進一層,沒有 bug。

函式引數與它們的資料型別

你可以嚴格控制你的函式,使其只接收讓它正確執行的引數。讓我們改變上面的函式定義:

<?php
function divide(int $dividend,int $divisor){
    return $dividend / $divisor;
}
echo divide(12,'sd');

現在,第二次呼叫這個函式將會丟擲一個致命錯誤,指出其需要的引數必須是整數型別。你可以用不同的方式處理引數。

<?php
// 可選引數
function getName(string $firstName,string $lastName = ''){
    return $firstName . ' ' . $lastName;
}
echo getName('Muhammad','Nauman'); // Muhammad Nauman
echo getName('Adam'); // Adam
function divide(int $dividend,int $divisor = 2){
      return $dividend / $divisor;
}
echo divide(12,4); // 3
echo divide(12); // 6
// 僅接收 Request 類的例項引數 $request
function getReuestParams(Request $request){
    return $request->only('name','email');
}

在定義的時候,將可選引數或帶預設值的引數作為最後一個引數。

PHP 7.1 也給可迭代資料介紹了一種偽型別。它能接收任何可迭代的資料。

淺談定義一個PHP函式

上圖是使用了iterable資料型別的函式。

現在通過程式碼,我們可以控制的更多了,不是嗎?沒錯,確實如此!

函式與它們的返回值

正如你可以控制傳遞給指定函式的引數型別一樣,你也可以控制函式的返回值型別。它能確保你的函式總是返回同一個資料型別,並且不會崩潰。我們改變一下上面的程式碼:

<?php
// 可選引數
function getName(string $firstName,string $lastName = '') : string {
    return $firstName . ' ' . $lastName;
}
echo getName('Muhammad'www.cppcns.com
,int $divisor = 2) : int { return $dividend / $divisor; } echo divide(12,4); // 3 echo divide(12); // 6 // 僅接收 Request 類的例項 $request 作為引數 function getReuestParams(Request $request) : array { return $request->only('name','email'); } // 返回 void 型別 程式設計客棧$attribute = 2; function changeAttribute(string &$param,$value) : void { $param = $value; } changeAttribute($attribute,5); echo $attribute; // 5

PHP 逐漸引入了這些功能,如:5.1 版引入的陣列型別作為引數,5.4 版引入的可呼叫型別(callable type),以及 7.1 版引入的 void 返回型別等。

可選引數 VS 可空引數

除了可選引數外,你還可以定義可空(nullable)引數,這意味著你可以定義一種可空引數型別。我們來看個例子:

<?php
function nullab程式設計客棧leParameter(?string $name)
{
    return $name;
}
echo nullableParameter(null); // 不會返回任何東西
echo nullableParameter('Nauman'); // Nauman
echo nullableParameter(); // 致命錯誤
function nullableParameterWithReturnType(?string $name) : string
{
    return $name;
}
echo nullableParameter(null); // 致命錯誤,必須返回 string 型別
echo nullableParameter('Nauman'); // Nauman
function nullableReturnType(string $name) : ?string
{
    return $name;
}
echo nullableParameter(null); // 致命錯誤,$name 應該是 string 型別
echo nullablePar程式設計客棧ameter('Nauman'); // Nauman

顯然,可空引數不是可選引數,你必須傳遞一個值或者是null。我個人喜歡使用空值作為可選引數,但這取決於你的任務需求。

以上就是淺談定義一個PHP函式的詳細內容,更多關於定義一個PHP函式的資料請關注我們其它相關文章!