PHP是開發界討論最多的程式語言之一。有人稱之為無效的程式語言,有人稱之為令人討厭的程式語言,沒有約定或體系結構,我同意其中的一些觀點,因為他們有公平的觀點。但是,在這裡,我將分享我這些年來用PHP進行程式設計的經驗。其中一些技巧僅在最新的PHP版本中可用,因此它們在舊版本中可能無法使用。
類型提示和返回類型
就資料類型而言,PHP並不是完美的語言,但是您可以使用類型提示和返回類型來提高程式碼品質並防止進一步的類型衝突。使用PHP的這些功能的人並不多,並不是所有的PHP程式設計師都知道這是可能的。
<?php function greet_user(User $user, int $age): void { echo "Hello" . $user->first_name . " " . $user->last_name; echo "\nYou are " . $age . " years old"; }
可以在參數變數之前使用類型的名稱或類別宣告類型提示,並在冒號後的函數簽名之後宣告傳回類型。
在像Laravel這樣的框架中設計控制器時,可以更高級地使用它:
<?php class UserController extends Controller { // User sign up controller public function signUp(Request $request): JsonResponse { // Validate data $request->validate([ 'plateNumber' => 'required|alpha_num|min:3|max:20|unique:users,plate_number', 'email' => 'required|email|unique:users', 'firstName' => 'required|alpha', 'lastName' => 'required|alpha', 'password' => 'required|min:8', 'phone' => 'required|numeric|unique:users' ]); // Create user $new_user = new User; $new_user->plate_number = trim(strtoupper($request->input('plateNumber'))); $new_user->email = trim($request->input('email')); $new_user->first_name = trim($request->input('firstName')); $new_user->last_name = trim($request->input('lastName')); $new_user->password = Hash::make($request->input('password')); $new_user->phone = trim($request->input('phone')); $new_user->save(); return response()->json([ 'success' => true, ]); } }
三元運算子
三元運算子是幾乎70%的程式設計師都知道並廣泛使用的東西,但是如果您不知道三元運算子是什麼,請參見以下範例:
<?php $age = 17; if($age >= 18) { $type = 'adult'; } else { $type = 'not adult'; }
可以使用三元運算子將此程式碼簡化為以下程式碼:
<?php $age = 17; $type = $age >= 18 ? 'adult' : 'not adult';
如果滿足條件,則不將第二部分指派給該變數。
如果要使用條件的值(如果它被評估為真實值),則還有一種更短的方法。
<?php $url = 'http://example.com/api'; $base_url = $url ? $url : 'http://localhost';
如您所見$url,既用作條件又用作條件為真的結果。在這種情況下,可以轉義左側運算元:
<?php $url = 'http://example.com/api'; $base_url = $url ?: 'http://localhost';
#空合併運算子
就像三元運算子一樣,您可以使用空合併運算子來查看值是否存在,請注意,因為false本身就是值,所以現存值與錯誤值不同。
<?php $base_url = $url ?? 'http://localhost';
現在$base_url等於,http://localhost但是如果我們將其定義$url為false,則$base_url變數將等於false。
<?php $url = false; $base_url = $url ?? 'http://localhost';
使用此運算符,您可以檢查先前是否定義了變量,以及是否未為其分配值:
<?php $base_url = 'http://example.com'; $base_url = $base_url ?? 'http://localhost';
您可以使用空合併分配運算符來縮短此程式碼
<?php $base_url = 'http://example.com'; $base_url ??= 'http://localhost';
所有這些nall合併技術都可以在陣列值上實現。
<?php $my_array = [ 'first_name' => 'Adnan', 'last_name' => 'Babakan' ]; $my_array['first_name'] ??= 'John'; $my_array['age'] ??= 20;
上面的陣列將具有first_nameas,Adnan因為它已經被定義,但是將定義一個名為的新鍵,age並為其指定編號20,因為它不存在。
飛船運算子
當您想知道哪個操作數更大而不是只知道一側是否更大時,太空船算子是一個非常有用的運算符。
飛船操作者將返回的一個1,0或-1值時,左邊的操作數較大時,當兩個操作數是相等的,並且當右操作數分別是較大的。
<?php echo 5 <=> 3; // result: 1 echo -7 <=> -7; // result: 0 echo 9 <=> 15; // result: -1
很簡單,但非常有用。
當您意識到太空船操作員也可以比較其他事物時,這將變得更加有趣:
<?php // String echo 'c' <=> 'b'; // result: -1 // String case echo 'A' <=> 'a'; // result: 1 // Array echo [5, 6] <=> [2, 7]; // result: 1
箭頭函數
如果您曾經編寫過JavaScript應用程序,尤其是使用其最新版本進行編程,則應該熟悉箭頭功能。箭頭函數是一種定義沒有範圍的函數的較短方法。
<?php $pi = 3.14; $sphere_volume = function($r) { return 4 / 3 * $pi * ($r ** 3); }; echo $sphere_volume(5);
上面的程式碼將引發錯誤,因為$pi未在此特定函數的範圍內定義變數。如果我們想使用它,我們應該稍微改變一下我們的功能:
<?php $pi = 3.14; $sphere_volume = function($r) use ($pi) { return 4 / 3 * $pi * ($r ** 3); }; echo $sphere_volume(5);
因此,現在我們的函數可以使用$pi在全域範圍內定義的變數。
但是做這些事情的更短的方法是使用箭頭功能。
<?php $pi = 3.14; $sphere_volume = fn($r) => 4 / 3 * $pi * ($r ** 3); echo $sphere_volume(5);
如您所見,它非常簡單整潔,預設可以存取全域範圍。
推薦教學:《PHP》