PSR-4,是一套自动加载类的标准 .. Composer 支持我们在项目里用这个标准来自动载入类 .. 下面可以试一下 .. 先新建一个 php 类 .. 把它放在 app/ninghao/demo 的下面 .. 名字是 Greeting.php ... 表示问候 ..
一个 php 开始标记 .. 添加一个 class ... 名字是 Greeting .. 里面再添加一个公开的方法 ... 方法的名字是 hello ... 这个方法做的事就是 return 一个 hello ~
回到 index.php .. 如果不使用自动加载类的方法 .. 我们想在这个文件里使用在其它的文件里定义的类 .... 需要先在文件的顶部,使用 require .. 或者 require_once .. 去把类文件加载进来 ..
一个 require ... 文件是在 app/ninghao/demo 的下面 .. 名字是 Greeting.php .. .
添加一个变量,名字是 $greet .. 实例化一下 Greeting 这个类 .. 下面再用一下 $greet 里的 hello 方法 .. 可以输出这个方法返回的东西 ..
然后在命令行下面可以测试一下 .. 执行一下 php index.php ... 会输出一个 hello .. 这个字符是在 index.php 文件里载入进来的 Greeting.php 文件里定义的 Greeting 这个类里的 hello 这个方法返回的 ..
PSR-4
也就是每次你要在一个文件里使用在其它文件里定义的类,你都需要先把它载入进来 ... 这样做会比较麻烦 ... 下面我们可以使用 PSR-4 这种方法自动加载需要的类 ..
这套标准要求我们要使用 namespace,也就是命名空间 .. 这个命名空间里要加上类文件的目录结构 ..
比如在这个 Greeting.php 里定义这个类 .. 它的命名空间里要加上 App\ninghao\demo\ 因为这个类文件是在 App 目录下的 nignhao 下面的 demo 这个目录里 ..
添加一个 namespace .. App\ninghao\demo; 这里的 App 我用的是大写的 ... 它是一个基础名 .. 一会儿我们可以配置一下让大写的 App 表示的就是 app 这个目录 .. ninghao\demo 是目录的结构 ...
下面再配置一下 Composer .. 打开 composer.json ... 里面先添加一个 autoload ... 它里面再加上一个 psr-4 ... 设置一下用 psr-4 标准的自动载入 ... 注册一个 App\\,这个名字的后面要加上两条反斜线 .. 让App 这个名字对应就是项目根目录下的 app/ 这个目录 ..
生成 autoload 文件
然后再去生成一个 autload 文件 ... 在命令行的下面 ... 执行一下 composer dump-autoload ..
会提示 Generating autoload files .. 创建 autoload 文件 ..
回到项目 ..
现在项目的根目录下面会多了一个 vendor 目录 .. 它里面会存放项目的依赖,还有生成的一些 autoload 文件 ..
打开 composer 这个目录 ... 找到 autoload_psr4.php ... 在这里你会找到刚才我们配置的用 psr4 标准的自动载入 ..
在 vendor 下面,有个 autoload.php .. 我们需要在项目里 require 一下这个 php 文件 ...
使用 autoload
打开 index.php ..
require 一下 vendor 下面的 autoload.php ... 因为我们注册了一个 psr-4 标准的自动载入 .. 指定的目录是 app .. 也就是在这个目录下面的类,只要用了 psr-4 标准的命名空间,我们现在都可以直接在这里去使用这些类 .. 不需要再单独用 require 把它们载入进来了 ..
下面新建了一个 Greeting .. 这里我们得指定这个类的全名 ... 也就是这里要包含类的命名空间 ... App\ninghao\demo ..
到命令行去试一下 ... 执行一下 php index.php ... 会返回一个 hello ... 这个字符是 Greeting 类里的 hello 方法返回的 ..
回来再修改一下 .. 这里我们也可以在文件的上面,用一个 use,指定一下 App\ninghao\demo\Greeting ... 这样下面再实例化 Greeting 的时候,就不需要在前面加上它的命名空间了 ..
再试一下 .... 同样会返回一个 hello ..