PHP命名空间与自动加载类详解
发布:smiling 来源: PHP粉丝网 添加日期:2021-10-27 15:31:59 浏览: 评论:0
这篇文章主要介绍了PHP命名空间与自动加载类,结合实例形式详细分析了php自动加载类与命名空间原理、使用方法及相关操作注意事项,需要的朋友可以参考下
本文实例讲述了PHP命名空间与自动加载类,分享给大家供大家参考,具体如下:
今天我要给大家介绍的是PHP的命名空间 和 自动加载类
我先简单的分开演示 在放在一起
大家请看:
什么是自动加载类?
想必大家都应该知道__autoload 这个魔术方法
- $db = new DB();
- function __autoload($className)
- {
- echo $className;
- exit();
- //在这个里面引用类
- }
在运用这个类只能加载一次 ,在很多时候我们要引入的不止一个类这个时候怎么办呢!
牛逼的php大神们 出了个新方法 来解决 这个问题 请看就是这个函数
spl_autoload_register() 满足了此类需求。 它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。相比之下, __autoload() 只可以定义一次。
这个函数的用法有很多 这里先给大家介绍一种使用方法
如下:
- function load1($className)
- {
- echo 1;
- require $className . '.php';
- }
- spl_autoload_register('load1'); //将load1函数注册到自动加载队列中。
- $db = new DB(); //找不到DB类,就会自动去调用刚注册的load1函数了
- //php 5.3之后,也可以像这样支持匿名函数了。
- spl_autoload_register(function($className){
- if (is_file('./lib/' . $className . '.php')) {
- require './lib/' . $className . '.php';
- }
- });
多个spl_autoload_register的使用
判断是否有此文件
如果有引入 如果没有 没有如果了,哪来的如果
- function load1($className)
- {
- echo 1;
- if (is_file($className . '.php')) {
- require $className . '.php';
- }
- }
- function load2($className)
- {
- echo 2;
- if (is_file('./app/' . $className . '.php')) {
- require './app/' . $className . '.php';
- }
- }
- function __autoload($className)
- {
- echo 3;
- if (is_file('./lib/' . $className . '.php')) {
- require './lib/' . $className . '.php';
- }
- }
- //注册了3个
- spl_autoload_register('load1');
- spl_autoload_register('load2');
- spl_autoload_register('__autoload');
- $db = new DB(); //DB就在本目录下
- $info = new Info(); //Info 在/lib/Info.php
我们可以打印spl_autoload_functions()函数,来显示一共注册了多少个自动加载:
- var_dump(spl_autoload_functions());
- //数组的形式输出
- array (size=3)
- 0 => string 'load1' (length=5)
- 1 => string 'load2' (length=5)
- 2 => string '__autoload' (length=10)
命名空间
一个php文件里 是不支持 new 两个名字的
这个时候我们就能用的到命名空间了
- namespace app;
- class new{
- public function ten()
- {
- echo "85";
- }
- }
- namespace hii;
- class new{
- public function ten()
- {
- echo "85";
- }
- }
spl_autoload_register自动加载+namespace命名空间 的使用
废话不多数 看例子
AutoLoading\loading
- <?php
- namespace AutoLoading;
- class loading {
- public static function autoload($className)
- {
- //把 \ 转换层 / , 便于兼容Linux文件找。Windows 下是通用的
- //由于namspace 很规格,所以直接很快就能找到
- $fileName = str_replace('\\', '/', DIR . '\\'. $className) . '.php';
- if (is_file($fileName)) {
- require $fileName;
- } else {
- echo $fileName . ' is not exist'; die;
- }
- }
- }
上面就是一个自动加载的核心思想方法。下面我们就来spl_autoload_register来注册这个函数:
index.php
- <?php
- //定义当前的目录绝对路径
- define('DIR', dirname(__FILE__));
- //加载这个文件
- require DIR . '/loading.php';
- //采用`命名空间`的方式注册。php 5.3 加入的
- //也必须是得是static静态方法调用,然后就像加载namespace的方式调用,注意:不能使用use
- spl_autoload_register("\\AutoLoading\\loading::autoload");
- // 调用三个namespace类
- //定位到Lib目录下的Name.php
- Lib\Name::test();
- //定位到App目录下Android目录下的Name.php
- App\Android\Name::test();
- //定位到App目录下Ios目录下的Name.php
- App\Ios\Name::test();
由于我们是采用PSR-O方式来定义namespace的命名的,所以很好的定位到这个文件的在哪个目录下了。很爽。对不对。
APP\Android\Name
- namespace App\Android;
- class Name
- {
- public function __construct()
- {
- echo __NAMESPACE__ . "<br>";
- }
- public static function test()
- {
- echo __NAMESPACE__ . ' static function test <br>';
- }
- }
所以就会很容易找到文件,并输出:
Lib static function test
App\Android static function test
App\Ios static function test
好了。基本的东西就讲完了.
Tags: PHP命名空间 PHP自动加载类
相关文章
- ·php命名空间学习笔记(2014-06-13)
- ·php中命名空间namespace用法介绍(2015-05-09)
- ·php命名空间学习详解(2020-09-27)
- ·PHP命名空间(Namespace)简明教程(2021-02-11)
- ·PHP命名空间(namespace)的使用基础及示例(2021-04-02)
- ·PHP中的命名空间相关概念浅析(2021-05-08)
- ·PHP使用Memcache时模拟命名空间及缓存失效问题的解决(2021-07-12)
- ·PHP命名空间namespace及use的简单用法分析(2021-10-22)
- ·php命名空间设计思想、用法与缺点分析(2021-12-05)
- ·PHP命名空间定义与用法实例分析(2021-12-11)
- ·php的命名空间与自动加载实现方法(2021-12-12)
- ·PHP命名空间与自动加载机制的基础介绍(2021-12-12)
- ·PHP命名空间用法实例分析(2021-12-15)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)