什么是 PSR?
如果你不是刚入门 PHP 新手,那么你应该已经知道了 PSR 标准,不过为了照顾到不清楚的同学,这里还是要介绍一下。
PSR 即 PHP Standard Recommendations (PHP 推荐标准)的简写,由 PHP-FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。类似于 Java 的 JSR 标准,它提供了 PHP 编程概念的标准化。目的是通过各框架作者之间的讨论制定一个标准,各框架都应遵循该规范进行开发,避免了不同框架自行发展阻碍了 PHP 的发展。
PSR 标准:Github(英文) LearnKu(中文)
什么是 Composer?
Composer 我应该不用介绍了吧?(逃
Composer 是 PHP 的一个依赖管理工具。类似于 NodeJS 的 NPM,是用来管理依赖包的。为什么需要依赖管理呢?当我们开发一个项目的时候,总会用到一些第三方的 Library,而不同的 Library 的安装方式都不相同,使用的方式也不相同。但是可被复用的代码集或功能集,都应该以一致的方式编写和声明,并且发布到云端的仓库中。这样能够减少使用者的了解与学习成本,并且能够通过工具来管理。而包管理器就是那个工具,通过包管理器,我们可以以一致的方式引入 Library,使用 Library,当我们不需要的时候又能轻易的卸载不需要的 Library。
自动加载
PSR-4 自动加载规范 是一个给 PHP 自动加载器将命名空间映射到文件系统的规则,PSR-4 是对 PSR-0 的补充,PSR-4 是为了解决 Composer 目录层次的问题。
写 PHP 最麻烦的就是 require
和 include
了,而有了自动加载,我们就不需要再写麻烦的 require/include
了,利用 spl_autoload_register
PHP 就会在需要的时候自动加载,同时也不会遗漏或者把不必要的类加载进来,同时也不会因为大量的类而编写庞大的 require/include
代码。
自动加载带来的好处:
- 使用类或代码前无需使用
require/include
。 - 但有使用的时候才会
require/include
,实现了懒加载。避免了遗漏和多余。 - 无需考虑路径的问题,我们只需要按照规范编写代码即可。
初始化项目
利用 Composer 我们就无需直接编写自动加载器的规则,只需按照 PSR-4 的标准编写代码,Composer 会在我们需要的时候自动加载类和代码。
首先我们先找个一个文件夹,然后用 IDEA 打开它(你也可以用 PhpStorm,VSCode 等编辑器),然后打开终端,输入:
composer init
composer init
输入信息后 Composer 会在项目根目录(以下简称根目录)下生成一个 composer.json
的配置文件。
然后我们在根目录下新建一个 app
文件夹,作为框架的主要入口,同时在 composer.json
中添加 autoload
的配置项,完成后的 composer.json
如下:
{
"name": "syfxlin/xkphp",
"description": "一个轻量的 PHP 框架",
"type": "project",
"license": "Apache 2.0",
"authors": [
{
"name": "syfxlin",
"email": "syfxlin@gmail.com"
}
],
"autoload": {
"psr-4": {
"App\\": "app/"
}
},
"require": {}
}
{
"name": "syfxlin/xkphp",
"description": "一个轻量的 PHP 框架",
"type": "project",
"license": "Apache 2.0",
"authors": [
{
"name": "syfxlin",
"email": "syfxlin@gmail.com"
}
],
"autoload": {
"psr-4": {
"App\\": "app/"
}
},
"require": {}
}
其中 psr-4
指的是按 PSR-4 标准加载的命名空间,key
是命名空间,value
是路径,此时在 app
下的所有类如果按 PSR-4 标准进行编写,那么 Composer 就会自动加载了。
然后执行以下代码初始化 Composer 的 autoload 文件:
composer install
composer install
不过此时还不算完成,我们还需要写一个入口文件,作为网站的入口,这里我放到根目录下的 public
文件夹下,这样外部就无法直接访问根目录了。在 public
文件夹下建立 index.php
文件,内容如下:
<?php
// 定义根目录
define('BASE_PATH', dirname(__DIR__) . '/');
// 引入 Composer 的 autoload
require_once __DIR__ . '/../vendor/autoload.php';
<?php
// 定义根目录
define('BASE_PATH', dirname(__DIR__) . '/');
// 引入 Composer 的 autoload
require_once __DIR__ . '/../vendor/autoload.php';
此时 Composer 已经可以正常工作了,我们写一个类来测试下,在 app
目录下新建一个 Test
类:
<?php
namespace App;
class Test
{
/**
* @var string
*/
public $name = "Test";
}
<?php
namespace App;
class Test
{
/**
* @var string
*/
public $name = "Test";
}
然后在 index.php
下添加 echo (new Test())->name
,然后运行测试下:
结语
今天就简单介绍了下 Composer 和 PSR,下一篇文章不出意外就是 IoC 容器了,您可以先前往我之前的文章了解一下:
从零实现一个 PHP 微框架 - PSR & Composer
https://blog.ixk.me/post/implement-a-php-microframework-from-zero-2许可协议
BY-NC-SA
本文作者
Otstar Lin
发布于
2020/05/09
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!