PHP in 2020

2020-10-27  本文已影响0人  追梦人在路上不断追寻

在web开发人员和程序员中,这已经不是什么秘密了:PHP没有很好的的声誉。尽管PHP仍然是构建web应用程序最常用的语言之一,但多年来,PHP一直设法为自己赢得了混乱的代码库、缺乏经验的开发人员、不安全的代码、不一致的核心库等名声。

虽然许多反对PHP的论据至今仍然存在,但也有一个好的方面:您可以使用PHP编写干净、可维护、快速可靠的应用程序。

尽管PHP有很多缺点,但它是一种值得学习的语言。我想让你知道PHP5时代即将结束。如果你愿意的话,你可以编写现代而干净的PHP代码,并把10年前的混乱抛在脑后。所以让我们看看在过去的几年里,语言是如何变化的,甚至是成熟的。我想请您抛开偏见几分钟,并可能对PHP今天的表现感到惊讶。

历史总结

在深入讨论细节之前,让我们先回顾一下PHP这门语言目前是如何开发的。我们现在的版本是7.4,PHP8.0将在2020年底成为下一个版本。

从5.*时代后期开始,核心团队就试图保持一致的年度发布周期,并在过去四年中成功地做到了这一点。

一般来说,每一个新版本都会在两年内得到积极的支持,并且会获得另一年的“安全修复”。我们的目标是激励开发人员尽可能地保持最新:例如,每年进行一次小的升级比在5.4到7.0之间进行升级要容易得多。

最后,php5.6是最新的5.*版本,下一个版本是7.0。至于为什么没有版本6,你可以使用搜索引擎搜索一下便知道了。

现在PHP的开发是由一群志愿者完成的,他们中的一些人是由他们的雇主支付工资来全职工作的。关于语言如何演变的大多数讨论都是在[邮件列表]上进行的(https://externals.io/).

排除所有这些问题之后,让我们揭穿一些关于现代PHP的常见误解。

PHP的类型系统

PHP最初是一种非常弱的动态类型语言,在当时有它的优点。自从人们开始在更大的项目中使用PHP以来,它的类型系统的缺点就变得很明显了,因此需要更强大的类型支持。

现在,PHP仍然是一种非常强大的类型语言,但它仍然是一种非常独特的动态代码。与静态分析相结合,像《psalm》这样的工具(https://github.com/vimeo/psalm),phanPHPStan,您可以编写安全的、强类型的和静态分析的代码。

举个例子,看看这段PHP代码,完全使用它的现代类型系统:

<?php

declare(strict_types=1);

final class Foo
{
    public int $intProperty = 2;

    public string $nullableString = null;

    private Bar $bar;

    public function __construct(Bar $bar)
    {
        $this->bar = $bar;
    }

    public function withInt(int $value): self
    {
        $clone = clone $this;
        $clone->intProperty = $value;

        return $clone;
    }

    public function unionTypes(int|float $input): void     
    {         
        *// Union types will be added in PHP 8* 
    }
}

说实话,PHP的类型系统中仍然缺少一个重要特性:泛型。他们有希望被加入,但还没有具体的内容。对于类型化数组,您需要依赖docblocks来获得适当的IDE支持:

*/** @var int[] */* 
public array $arrayOfInts = [];

php语法

在语法方面,7.*时代在使PHP成为一种更成熟的语言方面做了很多好事。为了说明这一点,我列出了一个PHP中新事物的一些特性。

** 数组符号多值复制 **

[$a, $b] = $array;

** 空值合并 **

$value = $object->property ?? 'fallback if null'; $value = $array['foo'] ?? "fallback if key doesn't exists";

public function get(string $input): string
{
    return $this->cache[$input] ??= $this->sanitize($input);
}

** 数组延展符 **

$a = []; 
$b = []; $mergedArray = [...$a, ...$b];</pre>

** 可变函数 **

public function get(Foo ...$foos): void
{
    foreach($foos as $foo) {
        *// …* 
    }
}

扩展:

$this->get(...$arrayOfFoo);
public **int** $intProperty;

箭头函数:

$ids = array_map(fn(Post $post): int => $post->id, $posts);</pre>

生成器:

function make(array $input): Generator
{
    foreach ($input as $item) {
        yield $this->doSomethingWith($item);
    }
}

php的性能

php7的性能提升是php5的一倍以上。

随着php的到来,伴随着JIT的使用,性能还会有巨大的提升。

php框架

php除了wordpress之外,还有众多好用的框架和社区。

laravel,yii,ci,symfony这些都是非常优秀出色的框架。

总结

我希望我能够向您展示PHP在过去几年中的巨大发展,您完全能够用它编写干净且可维护的代码。

尽管这门语言肯定有它的缺点和20年的传承,但我可以自信地说,我喜欢用它工作。

根据我的经验,我能够创建可靠、可维护和高质量的软件。我为之工作的客户对最终的结果很满意,虽然使用PHP仍然有可能做很多乱七八糟的事情,但如果使用得当,我认为它是web开发的一个很好的选择。

上一篇下一篇

猜你喜欢

热点阅读