最佳 PHP 实践解释

初学者可能很难理解为什么有些做法更安全。

不过,以下一些技巧可能超出了 PHP 的范围。

始终使用大括号
让我们看一下下面的代码:

if (isset($condition) && true === $condition) 
    echo 'this is a success';

没有 PHP 错误,但是发生了什么:

if (isset($condition) && true === $condition) 
    foreach (range("A", "Z") as $letter)
        echo $letter . PHP_EOL;
        echo 'this is a success';

尽管如此,没有 PHP 错误,并且“这是成功的”最终只出现了 1 次,这可能是一个陷阱:)

哼……等等!$condition = false;没有 PHP 错误,但是如果您之前编写会发生什么:

这是成功的

糟糕!我们不希望这样。您现在明白为什么大括号很重要了吗?

省略括号通常会导致不必要的副作用。此外,阅读代码要困难得多。所以这样写:

$condition = false;
if (isset($condition) && true === $condition) {
    foreach (range("A", "Z") as $letter) {
        echo $letter . PHP_EOL;
    }
    echo 'this is a success';
}

跳过else部分
在使用任何变量之前对其进行初始化是一个很好的做法。考虑以下因素:

if (isset($condition) && true === $condition) {
    $main = 'chocolate';
} else {
    $main = 'vanilla';
}

您可能认为这没问题,但是如果您添加几个elseif条件怎么办:

if ($condition) {
    $main = 'chocolate';
    $time = 2;
} elseif($otherCondition)) {
    $main = 'strawberry';
    $time = 3;
} elseif($otherOtherCondition)) {
    $main = 'apple';
    $time = 1;
} else {
    $main = 'vanilla';
    $time = 9;
}

代码已经很重了。当在每个 .txt 文件中添加逻辑时,您很可能会忘记某些变量elseif。

而是写:

$main = 'vanilla';
$time = 9;

if ($condition) {
    $main = 'chocolate';
    $time = 2;
} elseif($otherCondition)) {
    $main = 'strawberry';
    $time = 3;
} elseif($otherOtherCondition)) {
    $main = 'apple';
    $time = 1;
}

这样,每个人都知道 m a i n 并且 main并且 main并且time应该始终被定义。代码看起来更具可读性。

不要使用@运算符
它是 PHP 中的错误控制运算符。它隐藏了错误,但没有人想要这样。

相反,您应该尝试捕获错误并使用错误日志。

该运算符有巨大的缺点,例如将任何调试变成一场噩梦或使代码变慢!

每次运行代码时,它都会调用 INI 设置将 error_reporting 设置为 0,然后将其设置回原始值。

如此浪费资源。我认为根本不使用它更安全。

关于三元的一些想法
虽然三元运算符可能很方便,但代码可能更难阅读。

不要过度使用三元运算符
三元组允许快捷地使用 if-else 部分:

$main = ($condition) ? "chocolate" : "vanilla";

意思是 :

if ($condition) {
    $main = "chocolate";
} else {
    $main = "vanilla";
}

这个还可以,但我已经看到了以下内容:

$output = ($condition) ? ($otherCondition) ? 'ok' : 'ko' : 'unknown';

不建议使用链接或嵌套三元组。

谨慎使用“Elvis”运算符
Elvis 运算符是一个特殊的运算符。

$foo = $bar ?: "baz";

上面的意思是:

$foo = $bar ? $bar : "baz";

可以这样写:

if ($bar) {
    $foo = $bar;
} else {
    $foo = "baz";
}

不管你信不信,正如维基百科所说:

“猫王运算符”这个名字是指当它的常用符号 ?: 从侧面看时,它就像埃尔维斯·普雷斯利 (Elvis Presley) 的表情符号。

小心空合并运算符
自 PHP 7 以来,空合并运算符已可用:

语法糖用于需要与 结合使用三元的常见情况isset()。

所以 :

$result = isset($_GET['result']) ? $_GET['result'] : "default";

可以这样写:

$result = $_GET['result'] ?? "default";

尝试用空合并运算符替换三元运算符和 Elvis 运算符时要格外小心!

null 合并运算符从不检查条件是否为 true,它的目的是检查 var 是否已设置且不为 null(这正是 的概念isset())。

总结

我希望您喜欢这些编程技巧。我想说的最后一件事是:请不要为了简洁而牺牲清晰度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Q shen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值