PHP 7 对 PHP 进行了巨大改进
PHP 在我心目中有一个不好的形象。(这是我个人的感受)
你是否认为PHP有一种不太好的印象?
我以前也是这样的。
当我还是学生的时候,我使用Java、Scala和Ruby。我在就业后接触到PHP。即使我现在是学生,我也不会学习PHP,而是会学习Python和Go。
然而,使用PHP开发的Web应用程序非常广泛。 PHP具有大量方便的功能,专为Web应用程序而设计。
另外,从 PHP 7 开始,在类型方面有很多改进,与以前的 PHP 相比,有了天翻地覆的变化。
为什么 PHP 有一个负面形象?
为什么许多人讨厌 PHP 呢?我认为原因在于它的“非严格比较运算符 ==”。
在PHP 8中,这个比较运算符的变化成了话题。
【PHP8.0】现在的松散比较运算符==行为将会有所变化。
在这篇Qiita文章的例子中也提到了,
"true" == 0 // true => PHP 8 からはこれが false に
0 == "0" // true
"true" == "0" // false
这个的奇特之处在于,”true” == 0,而且 0 == “0”,但是 “true” == “0” 得出的结果却是 false。这就是一个 A = B 且 B = C 的情况,但却没有满足 A = C 的不协调之感。
“true” == 0 为什么会变成true?这是因为当试图将字符串转换为整数时,如果字符串不是以数字开头,则被转换为0。
(int)"true" // 0
(int)"100" // 100
(int)"100abc" // 100
(int)"abc100" // 0
这个在 PHP 的文档中也写了。
这个演员的行为在 PHP 8 中没有改变。只是修复了等于号的行为。
PHP 的混乱类型比较表可以说是非常出名的。我认为看过一次会觉得很有趣。
我会不自觉地想要一个进行详细比较的表格。
PHP 7 带来了许多改进之处
函数的参数、返回值和属性等,现在可以写上类型了。
class Something
{
private int $id;
public function setId(int $id)
{
$this->id = $id;
}
public function getId(): int
{
return $this->int
}
}
或许与过去相比,你会觉得这真的是 PHP 吗?但事实就是,这就是现在的 PHP。
虽然 == 的行为一如既往地不变,但类型开始变得更加严谨,一旦写得正确,我开始感觉它是一种非常易用的语言。
PHP 8 PHP 8
在PHP 8中,还添加了许多功能。
空安全运算符
联合类型等
class Number {
public function getSomething(): int|float
{
// int または float を返す
}
}
有许多方便的功能被添加上去。
PHP的优点
毫無疑問,這是一種專注於網頁的語言,擁有其他語言所無法比擬的許多功能。
以下のようなHTML文字列をエスケープする関数があります。
htmlspecialchars('<html>') // <html>
生成一个查询字符串的函数。
http_build_query(['a' => 1, 'b' => 2]) // a=1&b=2
只需要一种选择,将以下内容改写为中文: 一个将数据转换为JSON格式的函数。
json_encode(['a' => 1, 'b' => 2]); // "{"a":1,"b":2}"
获取日出时间的函数以及其他(用于什么呢)
$now = time();
date_sunrise($now); // 04:30
只要涉及到关于网络的函数,就有诸如这样的东西。对于开发Web应用程序非常方便。
剩下的事情,由于有很多用户使用,网上有很多知识可以参考,这真是太好了。只要搜索一下,大多数问题都可以解决。
PHP 的不足之处
我实际上长年使用 PHP,但总体来说,执行速度无法与编译语言相比。PHP 7 提升了相当多的速度。PHP 8 采用了 JIT 编译,预计会进一步提高速度,但由于不擅长异步处理,它仍然较慢。
在公司的新人培训中,我们使用Scala开发了应用程序,也用Scala制作了https://lgtmoon.dev/,尽管服务器非常脆弱,但依然能够获得相当高的性能。
由于对Scala的了解太少,现在的话我会选择Go。如果那时Go很出名的话,我相信我会选择Go。
总结
虽然写得有点啰嗦,但是与以前相比,我认为 PHP 已经变成了一门相当好的语言,所以我建议大家不要对它进行过多的批评,不妨亲手去尝试一下。