PHP进阶指南丨探索高阶学习资源的路径

不同于其他编程语言那样资源丰富,现在很少有资源可以深度学习PHP。

我总结的这些资源不是针对初学者的,不会解释基础的编程概念,而是直接切入PHP的独特之处,并推荐一些高质量的学习资源。

首先需要建立一个本地开发环境 

即使你不打算使用像Symfony或Laravel这样的主要框架……

建立了一个可以运行这些框架的环境,你将拥有大多数PHP开发所需的一切。

包括:

PHP - 编程语言

MySQL - 数据库

NGINX或Apache - 网络服务器

Composer - PHP的包管理器

喜欢用虚拟机Homestead,专为PHP开发定制。

喜欢用Docker?试试:

Laradock

How to Create PHP Development Environments With Docker Compose | DigitalOcean

想要/已有一个本地网络服务器?

XAMPP是最受欢迎的解决方案之一。它是一个包含了MariaDB和PHP的Apache发行版。

如果你已经在本地安装了Apache或NGINX,并且喜欢在没有虚拟机的情况下进行本地开发 - 你可以直接安装PHP及其最流行的扩展。这些是我在Ubuntu(Linux)上安装PHP的命令

sudo add-apt-repository -y ppa:ondrej/php 
sudo apt-get update 
sudo apt install -y php7.4 php7.4-common php7.4-cli php7.4-fpm libapache2-mod-php7.4 php-pear php7.4-bcmath php7.4-bz2 php7.4-curl php7.4-dev php7.4-gd php7.4-intl php-gettext php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-soap php7.4-sqlite3 php-xdebug php7.4-xml php7.4-xmlrpc php7.4-zip 

在Windows上,许多开发者使用WAMP。你也可以直接使用WSL(Windows子系统)安装它,或使用PHP官方手册中的Windows安装指南。转向WSL2意味着Windows用户可以或多或少地遵循Linux指南。Laragon是另一个适用于Windows的开发环境。

Mac用户经常使用ServBay

我是Mac用户,所以我使用的是ServBay,一个更加便利的本地环境,5分钟不到就能部署好开发环境,还整合了数据库等工具,自定义程度很高。

我建议你们自行下载探索,我不再赘述。

Windows: https://dev.to/bantar7/how-to-install-and-configure-xampp-on-windows-2c23

Mac: https://dev.to/servbay/effortless-deployment-build-your-web-development-environment-in-just-3-minutes-45ln

试试看

当你能在命令行运行:

php -v 

并看到PHP版本信息时,你就知道准备好了。

PHP有一个内置的命令行交互模式,允许你输入并运行PHP命令进行尝试。输入:

php -a 

它会给你一个提示符,你可以输入PHP代码行,当你按回车键时,它会运行这些行并显示输出。如果你喜欢使用这样的东西,我推荐使用更高级的PsySH,它做同样的事情但更好。

你可以像这样从命令行运行一个PHP文件:

php index.php 

PHP还有一个内置的网络服务器,你可以使用它而不是安装Apache或NGINX。这对于快速测试很好用。事实上,我的很多开发工作都使用这个内置的网络服务器和本地安装的MySQL。我有Apache,但经常不需要它。在一个包含.php文件的目录内运行内置的网络服务器,像这样:

php -S localhost:8000 

这将启动网络服务器,监听给定的主机和端口。然后,如果你在浏览器中访问http://localhost:8000/,你可以执行存在于该目录中的PHP应用程序。

注意,index.php文件是大多数PHP应用程序的入口点。上述URL默认会调用index.php。

PHP语言概述

PHP是一种解释型语言,意味着你的PHP程序不会提前编译。当浏览器向网络服务器请求PHP资源(通常是.php文件)时,网络服务器提供请求的所有细节(例如URL GET参数、POST值、cookie、头信息等)给PHP解释器,它执行请求的PHP文件。如果你在服务器上编辑一个PHP文件,那个更改将立即生效。

大多数时候,index.php文件是PHP应用程序的入口点,它通常执行一些引导操作并执行框架来处理请求值,这些请求值通常被打包在一个Request对象中。较老的应用程序可能不使用Request对象,在这种情况下,请求中的值可以在$_GET, $_POST, $_COOKIE, $_SERVER超全局数组中找到,这些数组在应用程序的任何地方都可以访问。现代框架将这些值放入一个Request对象中,然后清除那些超全局值,以防止全局变量的陷阱。

随着PHP程序的执行,输出被返回给浏览器。一些程序使用echo()语句和类似的命令以临时方式发送输出,这些命令将输出发送到标准输出流(回到网络服务器,然后发送给浏览器……或者发送给命令行)。现代应用程序将所有输出收集到一个Response对象中,然后在程序执行结束时一次性发送给浏览器(框架的最后几个步骤之一)。

PHP默认情况下是无状态的。当程序为一个请求执行时创建的所有变量、对象和连接,不会为下一个请求保留。PHP清除在该请求期间使用的内存,并且不知道一个请求到下一个请求之间的任何事情。进入服务器的多个请求可以并发执行。

PHP开发者使用一些机制在请求之间维护一些内存或状态。最常见的方法是会话。PHP向浏览器发送一个会话ID值,通常存储在cookie中。浏览器将此ID与所有未来的请求一起发送回来。PHP使用该ID查找与该ID关联的存储在文件系统或数据库中(或像Redis或Memcached这样的数据存储中)的值。通过这种方式,PHP可以在请求之间“记住”访问者。然而,这些会话存储中的值必须在每个请求中从数据存储中读取。它们保存在一个叫做$_SESSION的超全局变量中,可以从应用程序中访问。许多框架将这个超全局变量放入它们自己的Session对象中。

这是一篇关于PHP工作原理的好文章(How does a PHP application work? | The Man in the Arena),包括关于PHP中的并发和多任务处理的话题。

PHP中的类型

PHP是一种动态的、弱类型的语言。变量不是用类型定义的(也不能这样做),而是通过赋给它的值来推断类型,并且如果赋予了新的值,类型可以改变。

$something = 1;//弱类型为整数。
$something = "Hello";  // 现在它是一个字符串。

这意味着你会发现在PHP程序中有很多类型检查和转换:

$age = intval($age);  //确保$age是一个整数。
if( is_int($age) ){ 
    // 做一些事情。 
} 

上述强制和检查类型的操作在PHP应用程序中非常常见。由于浏览器请求中传递给PHP的所有值都是字符串,PHP程序通常会将这些值转换为预期的类型。

近年来,PHP增加了严格类型特性。这意味着函数和方法参数可以为传入的参数明确设置类型,并且返回类型。如果传入的值不是预期的类型,将抛出运行时异常。如果你看到这个指令:

declare(strict_types=1); 

在文件的顶部,那么该文件中的类型将被视为严格的。这意味着文件中的类型严格性可能会有所不同。这使得大型应用程序可以一次一个文件地迁移到严格类型。

例如:

declare(strict_types=1);
function doSomething(int id): string {     
    $id = '' . $id;
    //在PHP中这是允许的:id现在是一个字符串。 
    }
doSomething('1'); // 这将触发一个TypeError。 
doSomething(1);   // 这将是正常的。 

类型前面的?表示该值是可空的(它也可以是null)。

PHP的类型系统可能是混乱或错误的来源。代码应该非常清楚变量在任何时候的类型是什么,以及它可以改变。许多人推荐尽可能使用严格类型。

关于PHP中的类型的更多信息:

PHP: Type declarations - ManualStrict Typing Mode in PHP – BrainBell

PHP数组 - 学会喜欢它们

PHP中最常见的数据结构类型之一是数组。PHP开发者使用数组做各种事情 - 通常代替数据对象,这可能不是最好的主意!PHP中的数组非常灵活,因为它们实际上是哈希图。这意味着数组键不必是顺序的,甚至不必是数字的。以不连续的整数索引填充数组并不意味着所有数组单元之间都会被保留:

$houses[0]=′Blue′;
$houses[55] = 'Red'; 
printf( array_key_exists(8, $houses));//0(假)

数组键可以是字符串

$config['username'] = 'tonystark'; 
$config['password'] = 'ironman123'; 
//这也可以这样定义:
$config = ['username' => 'tonystark', 'password' => 'ironman123'];

你也可以提前声明一个值为空数组,或者你可以分配许多值,它们将被赋予从0开始的顺序、数字键

$superheros = array(); // 空数组
$superheros=array(′Superman′,′Batman′,′BlackWidow′,′Ironman′);
printr($superheros); // [0] => Superman, [1] => Batman ...等 

PHP数组中的所有键甚至不必是同一种类型!PHP.net有很多关于数组的文档,PHP为排序和操作数组提供了许多内置函数。

PHP语法

PHP的语法与C稍有关系。一些亮点:

  • 所有变量都以$开头。类名、方法和函数名不这样。

  • 所有语句都以;结尾。

  • 控制结构用大括号{}包围。

  • 空白和缩进不重要。

  • PHP代码以<?php开头(有时简写为<?)并以?>结束。这段代码可以与常规HTML交错……但现代应用程序不再这样做。如果一个文件以PHP代码结束,关闭标签被省略。

  • 字符串可以用单引号或双引号包围。特殊字符(如\n表示换行符)只会在双引号中被识别。

  • 许多项目有一个编码标准指南或宽松的政策来保持事物的一致性。例如,类名以大写字母开头。

代码分析

PHP社区创建了许多优秀的工具,使您能够对PHP代码的风格、质量甚至正确性进行分析。这些静态分析工具对于保持项目遵循一套编码风格或在应用程序中发现代码异味很有价值。虽然有许多PHP分析工具可供选择,但一些流行的工具包括:

PHP Code Sniffer 

PHP Stan 

Psalm

Phan

自动加载和Composer

如果你的PHP应用程序入口点是index.php文件……除非它们被包含到请求的文件中,否则不会运行或引用其他源代码文件。所以如果你运行一个文件“test.php”,只有那个文件中的代码才会可用。历史上,项目会使用几个include或require语句来引入其他代码:

<?php 
// 文件 index.php 
require('config.php'); // 如果找不到这个文件,执行将停止。 
include('functions.php'); // 如果找不到文件,执行仍然会继续。 
require_once('user.php'); // 确保这个文件不会被多次包含。 

$foo = 'bar'; 

你可能会在index.php文件的顶部看到许多像上面这样的include,它们会引入应用程序所需的类定义、函数等。

现代PHP应用程序不再使用这样的include。Composer是PHP的包管理器。它还提供了一个自动加载器,它会自动包含类(对象定义)文件,只有在应用程序需要时才会这样做。这可以防止包含从未使用过的代码。在项目中配置Composer会创建一个vendor/目录,它将放置自动加载器和任何已安装的包。如果你看到一个vendor目录或项目根目录下的composer.json文件,这就是你可以知道Composer正在被使用的方式。不要惊讶如果许多旧的应用程序不使用它。PEAR是一个用于将包安装到PHP项目中的较旧系统。

在使用Composer自动加载的情况下,你会在应用程序的每个文件顶部看到这个

require_once 'vendor/autoload.php'; 

Composer让我们可以引入依赖项(如Packagist上找到的开源项目),它们将被安装在vendor目录中,立即可供我们的项目使用。我们可以将它们固定到某些版本号,更新我们的依赖项,并声明一些包仅用于开发环境(如测试和静态分析工具)。

了解和学习Composer对于现代PHP开发非常相关。

Composer的介绍在这里:https://getcomposer.org/doc/00-intro.md

PHP资源和展望未来

PHP是一种非常有历史的语言,你可能会在线上找到的关于PHP的教程、StackOverflow回答和博客文章可能非常过时,并包含许多安全漏洞。我建议不要使用超过3年前的资源或代码。

PHP的版本有一个定义的生命周期。确保你使用的是一个受支持的版本。

PHP拥有最好的官方文档之一,包括示例和用户贡献的评论。官方文档位于https://www.php.net/。

PHP的官方出版物(杂志)是php[architect]。我已经

订阅了几年,并且有时为杂志写文章。这里有很多高质量的针对性信息。

学习现代PHP的顶级资源之一是网站https://phptherightway.com/。

以下是一大批有用资源的列表:

https://odan.github.io/learn-php/。

https://laracasts.com

享受你的旅程

今天,PHP是一种现代的、灵活的、受欢迎的编程语言。社区非常庞大且包容度很高,关于PHP的资源丰富且多样。我喜欢使用PHP,而且不断接受核心更新和新版本,这些版本不断变得更好。

PHP 8最近刚刚发布。欢迎来到PHP的世界,感谢阅读!

  • 12
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值