PHP 命名空间和自动加载原理与用法实例分析

2025-05-29 0 86

本文实例讲述了PHP 命名空间自动加载原理与用法。分享给大家供大家参考,具体如下:

PHP 命名空间

php5.3 之后引入了命名空间的特性,从本质上讲,命名空间就是一个容器,你可以将类、函数和变量放在其中,在命名空间中,你可以无条件地访问这些项,在命名空间之外,必须导入或引用命名空间,才能访问它所包含的项。

声明命名空间

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16
namespace my;

require_one 'outputter3.php';

class outputter {

// 输出数据

public function helloworld() {

echo "hello world!";

}

}

namespace useful;

class outputter {

}

namespace 关键字用于创建命名空间,而且一般声明命名空间时,namespace 必须发到文件中的第一句,PHP还支持声明嵌套的命名空间,如

?

1
namespace com\\getinstance\\util;

使用命名空间

在本命名空间内部可以直接调用命名空间中的类或函数、变量,

因为我已经位于命名空间中了,所以不必在类名前加任何种类的路径,

如果打算从命名空间环境之外访问类,可以使用:

?

1
com\\getinstance\\util\\Debug::helloworld();

以下代码将会报错:

?

1

2

3
namespace main;

com\\getinstance\\util\\Debug::helloworld();

因为使用的相对命名空间,PHP会在 main 命名空间中寻找 com\\getinstance\\util,但没有找到,就像创建绝对 URL 和文件路径时,以分隔符作为开始一样,你也可以使用这种方式创建绝对命名空间,如下:

?

1

2

3
namespace main;

\\com\\getinstance\\util\\Debug::helloworld();

前导的反斜杠告诉 PHP 从根命名空间而不是从当前命名空间开始搜索。

但是如果每次调用命名空间都需要写这么长的一串前缀是不合理的,PHP 可以使用 use 关键词为当前命名空间中的其他命名空间起别名,如下:

?

1

2

3

4
namespace main;

use com\\getinstance\\util;

util\\Debug::helloworld();

导入 com\\getinstance\\util,并隐式地为其使用了别名 util

如果不想引入命名空间,可以导入 Debug 类本身:

?

1

2

3

4
namespace main;

use com\\getinstance\\util\\Debug;

util\\Debug::helloworld();

关键字 use 之后使用 as,可以将别名 Debug 修改为 uDebug

?

1

2

3

4
namespace main;

use com\\getinstance\\util\\Debug as uDebug;

uDebug::helloworld();

命名空间中访问全局空间(非命名空间),可以在该全局类前加反斜杠:

?

1

2

3

4

5
namespace com\\getinstance\\util;

require "global.php";

\\Lister::helloworld(); //访问全局空间

Lister::helloworld(); //访问本地命名空间

使用 __NAMESPACE__ 常量可以输出当前的命名空间,在调试时有用。

自动加载

PHP5 引入了 __autoload() 方法来自动包含类文件,当 PHP 引擎遇到试图实例化未知类的操作时,会调用 __autoload() 方法(如果已经定义),并将类名当作字符串参数传递给它,编写 __autoload() 时,应该定义一种策略来定位和包含缺失的类文件。如下:

?

1

2

3

4
function __autoload($classname) {

include_once("$classname.php");

}

$product = new ShopProduct();

希望本文所述对大家PHP程序设计有所帮助。

原文链接:https://www.cnblogs.com/ryanzheng/p/9632531.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 PHP 命名空间和自动加载原理与用法实例分析 https://www.kuaiidc.com/91250.html

相关文章

发表评论
暂无评论