如何编写一个不同的 PHP 程序?
类型提示和返回类型
三元运算符及其更简写方式
空合并算子
飞船运营商
箭头函数
✨飞船操作员🚀
由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!
嗨,DEV.to 社区的各位。
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 值不同,因为 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';
所有这些合并技术也可以应用于数组值。
<?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 应用程序,尤其是使用过最新版本的 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);
如您所见,它非常简单简洁,并且默认情况下具有全局作用域。
希望您喜欢这篇文章,我还计划继续撰写这个系列文章。
如果我遗漏了什么或者您有任何其他想法,请在下方评论区告诉我。
文章来源:https://dev.to/adnanbabakan/how-to-write-a- Different-php-1joo