翻译

使用Composer时的PHP部署最佳实践

Composer是PHP应用程序的事实依赖管理器,最初在大约8年前于2012年3月发布。

在PHP中使用Composer可用于提高代码的可重用性,并使您的项目能够轻松地集成来自主要PHP Composer仓库Packagist的维护的PHP库。今天,我们将重点介绍一些部署最佳实践。

composer会变慢

这篇文章将重点介绍如何使Composer更快,以及在每次部署应用程序时无需重新安装Composer就可以安装软件包。

Magento是需要大量内存的Composer项目的一个示例。您能想象如果需要为每个部署进行composer安装时需要多少内存?Composer可能会因“内存不足”错误而失败,此错误将在此Stack Overflow帖子中进行介绍

尽管将软件包添加到项目很容易,但出于以下原因,在Amezmo,我们采用保守的方法添加新的项目依赖项。

  • 减慢初始 composer install
  • 每个composer软件包都会增加出现新安全问题的机会

最佳实践

这是不言而喻的。审核我们的composer.json文件,当然删除所有不需要的程序包引用。

第二个,这就是我发表这篇文章的原因,是要确保您使用以下标志运行composer。

composer
    --no-ansi \
    --no-interaction \
    --optimize-autoloader \
    --no-progress 
        

PHP 8的 Attributes新特性介绍

从PHP 8开始,我们将能够使用Attributes。Attributes(在许多其他语言中也称为annotations)的目标是将元数据添加到类,方法,变量等中;以结构化的方式。

attributes的概念根本不是什么新概念,多年来,我们一直在使用docblock来模拟其行为。但是,通过添加attributes,我们现在有了该语言的一等公民来表示这种元数据,而不必手动解析docblock。

那它们长什么样呢?我们如何制作自定义attributes?有什么警告吗?这些是本文将要回答的问题。让我们深入!…

    

一文详解 PHP 8 的新特性

 

PHP 8 将于 2020 年 11 月 26 日发布。这是一个新的主要版本,这意味着它将引入一些突破性的更改,以及许多新功能和性能改进。现在 PHP 8 在功能冻结中,这意味着不能再添加任何新功能了。

由于重大更改,您需要在代码中进行一些更改才能在 PHP 8 上运行。但是,如果您已经跟上最新版本,升级应该不会太难,因为大多数重大更改以前在 7.* 版本中已弃用。别担心,所有这些弃用都列在这篇文章中。

除了突破性变化外,PHP 8 还带来了一系列不错的新功能,如 JIT 编译器、联合类型、attributes等。

        

2020年的PHP

在Web开发人员和程序员之间,这并不是什么秘密:PHP的声誉不高。尽管它仍然是构建Web应用程序的最常用语言之一;多年以来,PHP赢得了混乱的代码库,经验不足的开发人员,不安全的代码,不一致的核心库等的美誉。

尽管许多反对PHP的论据仍然存在,但还有一个光明的一面:您可以用PHP编写干净,可维护,快速和可靠的应用程序。

在这篇文章中,我想看看PHP开发的光明面。我想向您展示,尽管有很多缺点,PHP是一种值得学习的语言。我想让您知道PHP 5时代即将结束。那就是,如果您愿意的话,您可以编写现代而干净的PHP代码,并抛弃10年前的混乱局面。

因此,让我们看一下过去几年中语言是如何变化,甚至成熟的。我想请您搁置几分钟的偏见,而今天的PHP可能会让您感到惊讶。…

    

PHP 7.4 FFI(外部函数接口):您需要知道的

PHP外部函数接口:FFI,是一个PHP扩展,允许您轻松地将一些外部库包含到PHP代码中。这意味着可以直接在PHP中使用C,Go,Rust等共享库​​,而无需在C中编写PHP扩展。这个概念在其他语言(如Python或Go)中已经存在多年了。

UUID生成

让我们从一个小例子开始:UUID生成。

使用PHP,有几种生成UUID的方法。最好的方法是使用PECL UUID扩展名。您可以在GitHub上阅读其代码。这个PHP扩展负责将PHP函数绑定到libuuid。要使其正常工作,您必须在系统上安装libuuid(不必担心,几乎总是这样)和PECL。

这就是我们从PHP用户代码调用uuid_create()时发生的情况:

+---------------------+
   |    your PHP code    |
   +---+-------------^---+
       v             ^
   +---v-------------+---+
   |     PHP engine      |
   +---+-------------^---+
       v             ^
   +---v-------------+---+
   |      UUID ext       |
   +---+-------------^---+
       v             
    

PHP 7.4中的类型化属性

类型化类属性已在PHP 7.4中添加,并为PHP的类型系统提供了重大改进。这些更改是完全可选的,并且不破坏以前的版本。

在本文中,我们将深入研究该功能,但首先让我们首先总结最重要的要点:

  • 它们自PHP 7.4起可用,该版本于2019年11月发布。
  • 他们只在类 上使用,并且需要访问修饰符:publicprotectedprivate; 或var
  • 允许所有类型,除了voidcallable

他们的实际情况是这样的:…

    

我们的程序是如何编译成二进制的

几乎你们每个人都必须编写一个程序,编译它然后运行它以查看你辛苦劳动的成果。终于看到你的程序正常工作感觉很好,不是吗?但为了使所有这些工作,我们还有其他人也要感恩。这就是你的编译器(当然,假设你使用的是编译语言,而不是解释的语言),这也在幕后做了很多努力。

在本文中,我将尝试向您展示您编写的源代码如何转换为您的机器实际上能够运行的内容。我选择Linux作为主机,C作为编程语言,但这里的概念足以应用于许多编译语言。

注意:如果您想在本文中进行操作,那么您必须确保在本地计算机上安装了gcc,elfutils。…

        

关于PHP的重新构想

PHP重新构想

这篇文章是讲我们如何来改变 PHP, 使它变得更好。这是一个非常主观的清单, 绝不是对核心团队正在做的工作的批评。

类默认为final

对 面向对象 编程的一个常见误解是, 基本都是关于继承的。继承和多态性有它们自己的位置, 但面向对象 远不止这些。

因为这些原则往往被程序员滥用, 他们声称他们写的是"面向对象"的 代码, 我认为语言应该有助于防止我们犯这些错误。

这就是为什么我会使所有类在默认情况下都是final的:…