Blogger Information
Blog 63
fans 8
comment 8
visits 50081
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP大牛成长之路:类的5中加载方式
周Sir-BLOG
Original
587 people have browsed it

文件目录如下:
IndexUser 两个类方法相同,均输出“PHP中文网欢迎您!方法是:xxx”

  1. namespace app\controller;
  2. use model\Users;
  3. class User
  4. {
  5. public static function show()
  6. {
  7. return 'PHP中文网欢迎您!方法是:'. self::getMethod();
  8. }
  9. public static function getMethod()
  10. {
  11. return __METHOD__;
  12. }
  13. }

加载方式1:传统方式:( include require require_once

  1. // 1、传统方式:( `include` `require` `require_once` )
  2. // ①加载类文件
  3. require_once 'app\controller\User.php';
  4. require_once 'app\controller\Index.php';
  5. // ②注册类别名[可选]
  6. use app\controller\User;
  7. use app\controller\Index;
  8. // ③调用类成员
  9. echo User::show();
  10. echo '<br>';
  11. echo Index::show();

加载方式2:注册自动加载函数 spl_autoload_register()

  1. // 2、注册自动加载函数 `spl_autoload_register()`
  2. // ①加载类文件
  3. spl_autoload_register(function($class){
  4. // 获取类的路径名称
  5. // DIRECTORY_SEPARATOR 可以随操作系统不同,使用不同的目录分隔符
  6. $path = str_replace('\\', DIRECTORY_SEPARATOR, $class);
  7. // 生成一个完整的类文件名
  8. $classFile = __DIR__ . '/' . $path . '.php';
  9. // 加载类文件
  10. require $classFile;
  11. });
  12. // ②注册类别名[可选]
  13. use app\controller\User;
  14. use app\controller\Index;
  15. // ③调用类成员
  16. echo User::show();
  17. echo '<br>';
  18. echo Index::show();

加载方式3:composer中的自动加载(files文件方式)

  • 第1步:创建composer.json文件
  1. # composer.json
  2. {
  3. "autoload": {
  4. "files": [
  5. "app/controller/User.php",
  6. "app/controller/Index.php"
  7. ]
  8. }
  9. }
  • 第2步:打开vscode终端,输入安装命令

composer install

得到composer支持文件:autoload.php 及相关配置文件

  • 第3步:引用composer自动加载文件并显示
  1. // 3、composer中的自动加载(`files`方式)
  2. // ①加载类文件(引用composer自动加载文件)
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. // ②注册类别名[可选]
  5. use app\controller\User;
  6. use app\controller\Index;
  7. // ③调用类成员
  8. echo User::show();
  9. echo '<br>';
  10. echo Index::show();

注意:当composer.json文件有更新, 需在终端执行命令: composer dumpautoload 命令, 使files字段生效。

加载方式4:composer中的自动加载(classmap类映射方式)

  • 第1步:创建composer.json文件
  1. # composer.json
  2. {
  3. "autoload": {
  4. "classmap": [
  5. "app/controller"
  6. ]
  7. }
  8. }
  • 第2步:打开vscode终端,输入安装命令

composer install

得到composer支持文件:autoload.php 及相关配置文件

  • 第3步:引用composer自动加载文件并显示
  1. // 3、composer中的自动加载(`files`方式)
  2. // ①加载类文件(引用composer自动加载文件)
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. // ②注册类别名[可选]
  5. use app\controller\User;
  6. use app\controller\Index;
  7. // ③调用类成员
  8. echo User::show();
  9. echo '<br>';
  10. echo Index::show();

注意:当composer.json文件有更新, 需在终端执行命令: composer dumpautoload 命令, 使files字段生效。

加载方式5:composer中的自动加载(psr-4类映射方式)

  • 第1步:创建composer.json文件
  1. # composer.json
  2. {
  3. "autoload": {
  4. "psr-4": {
  5. "app\\controller\\": "app/controller"
  6. }
  7. }
  8. }
  • 第2步:打开vscode终端,输入安装命令

composer install

得到composer支持文件:autoload.php 及相关配置文件

  • 第3步:引用composer自动加载文件并显示
  1. // 3、composer中的自动加载(`files`方式)
  2. // ①加载类文件(引用composer自动加载文件)
  3. require_once __DIR__ . '/vendor/autoload.php';
  4. // ②注册类别名[可选]
  5. use app\controller\User;
  6. use app\controller\Index;
  7. // ③调用类成员
  8. echo User::show();
  9. echo '<br>';
  10. echo Index::show();

注意:当composer.json文件有更新, 需在终端执行命令: composer dumpautoload 命令, 使files字段生效。

以上5种加载方式均输出同样结果:

总结:

从以上类的5种加载方式可以看出,使用composer自动加载更方便(推荐:psr-4方式)

  • 传统方式使用include require require_once方式逐个调用,非常繁琐;

  • 注册自动加载函数 spl_autoload_register()使用非常方便,如果不想使用composer管理,推荐使用该方式;

  • composer三种方式:filesclassmappsr-4 方式,推荐使用psr-4 方式。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:总结的不错, 一定要记住并常用
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post