PHP namespace 自动加载

2 篇文章 0 订阅

PHP 命名空间(namespace)

PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物。 不过在PHP当中还是有着相当重要的意义。

PHP 命名空间可以解决以下两类问题:

  • 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  • 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

虽然使用了命名空间,但我们在使用的时候也需要引入PHP文件,这就造成命名空间有时候不会减少我们的工作量,反而增加了我们的工作量。

 自动加载

自动加载就是为了解决有了命名空间还让我们引入文件的问题。

文件结构:

自动加载有几种方式去实现:

  1. __autoload()方法

index.php文件
function __autoload($class){
    if ($class) {
        $file = str_replace('\\', '/', $class);
        $file .= '.php';
        if (file_exists($file)) {
            include $file;
        }
    }
}
$class = new \app\Index();
$class->index();

2.spl_autoload_register()方法,如果用spl_autoload_register,autoload就失效了。

index.php文件
spl_autoload_register(function ($class) {
    if ($class) {
        $file = str_replace('\\', '/', $class);
        $file .= '.php';
        if (file_exists($file)) {
            include $file;
        }
    }
});
$class = new \app\Index();
$class->index();

3.使用composer的自动加载实现。 

  1.   在文件的跟目录创建composer.json文件。"app\\": "app" 指向命名空间的文件存放的地址
    {
      "autoload": {
        "psr-4": {
          "app\\": "app"
        }
      }
    }
  2. 使用命令composer install,生成vendor文件
  3. 在根目录index.php 引入vendor/autoload.php
    require 'vendor/autoload.php';

PSR-0

PHP的命名空间必须与绝对路径一致。
类名首字母大写。
除了入口文件之外,其他的PHP文件必须是一个类,不能有执行的代码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值