PHP类的自动加载与命名空间用法实例分析
发布:smiling 来源: PHP粉丝网 添加日期:2022-03-12 14:44:43 浏览: 评论:0
本文实例讲述了PHP类的自动加载与命名空间用法,分享给大家供大家参考,具体如下:
作为一名合格的程序员,必定会有一个从面向过程编程到面向对象编程的转化过程,在这个过程中诸如命名空间,类,继承,接口,类自动加载等等都是需要我们去掌握的,之前对这些概念都不是很熟悉,只是能够基础地使用,在这里系统的记录一下关于命名空间与类的自动加载知识。
类的自动加载
什么是自动加载类?
从字面意思上就可以大概知道,当调用一个当前页面未定义的类的时候能够自动加载。
相信如果你之前了解过php的魔术方法的话,肯定不会对__autoload这个魔术方法感到陌生,php官方手册解释:尝试加载未定义的类
void __autoload ( string $class )
class即为待加载的类名,php官方手册也有比较好的例子,这里引用一下:
./myClass.php
- <?php
- //在这里定义一个构造方法
- class myClass {
- public function __construct() {
- echo "myClass init'ed successfuly!!!";
- }
- }
- ?>
./index.php
- <?php
- // 将这些代码写在我们需要用到的地方
- function __autoload($classname) {
- $filename = "./". $classname .".php";
- include_once($filename);
- }
- // 实例化一个类
- $obj = new myClass();
- ?>
"在这一行,我们的"./myClass.php"会被包含进来,这个神奇效果正是我们想要的 你将会得到"myClass init'ed successfuly!!!"的返回结果.
所以,如果你调用了一个类似于"myClass"的类,文件将会包含"myClass.php",前提是该文件存在(如果不存在你将会得到一个引用错误),如果你调用了"Foo","Foo.php"会被引用,诸如此类...
你在也不需要像下面这样写了。"
- <?php
- include_once("./myClass.php");
- include_once("./myFoo.php");
- include_once("./myBar.php");
- $obj = new myClass();
- $foo = new Foo();
- $bar = new Bar();
- ?>
虽然说这个魔术方法确实很magic,但是他有一个缺点,那就是只能使用一次,当需要多条 autoload 函数的时候就不行了,所以官方不推荐使用,在后续版本可能会被移除。同时官方也给出了可以替代的函数spl_autoload_register,将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
直接用例子在说明吧,这里与命名空间一起讲:
#新建工程test
//首先新建应用目录app,然后在目录下新建一个Test文件夹,文件夹下新建两个类
test/app/Test/Beta.php
- <?php
- namespace app\Test;
- class Beta {
- public function index() {
- echo "app\Test\Beta\index";
- }
- }
test/app/Test/Test.php
- <?php
- namespace app\Test;
- class Test {
- public function index() {
- echo "app\Test\Test\index";
- }
- }
- //新建自动加载类
test/app/autoload/Loading.php
- <?php
- namespace app\autoload
- class Loading {
- public static function autoLoad() {
- //把 \ 转换层 / , 便于兼容Linux文件找。Windows 下是通用的
- $fileName = str_replace('\\', '/', DIR . '\\'. $className) . '.php';
- if (is_file($fileName)) {
- require_once $fileName;
- } else {
- echo $fileName . ' is not exist'; die;
- }
- }
- }
- //新建应用入口文件
test/index.php
- define('DIR', dirname(__FILE__));// /.../test
- //引入自动加载文件
- require DIR . "/autoload/Loading.php";
- //自动注册
- //这里就是为什么前面写成静态方法的原因
- spl_autoload_register("\\autoload\\Loading::autoLoad");
- //然后在下面就可以直接调用类了,只要在前面加上命名空间
- $beta = new app\Test\Beta();
- $beta->index();//输出 app\Test\Beta\index
- echo "\r\n";
- $test = new app\Test\Test();
- $test->index(); //输出 app\Test\Test\index
命名空间
看到这里相信你应该已经对命名空间有了一个大致的了解,起码知道怎么用。
什么是命名空间?
从广义上来说,命名空间是一种封装事物的方法,在很多地方都可以见到这种抽象概念,例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt,这个原理应用到程序设计领域就是命名空间的概念。
所以你可以将他理解为:文件夹。。。
Tags: PHP类自动加载 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-10-27)
- ·php命名空间设计思想、用法与缺点分析(2021-12-05)
- ·PHP命名空间定义与用法实例分析(2021-12-11)
- ·php的命名空间与自动加载实现方法(2021-12-12)
- ·PHP命名空间与自动加载机制的基础介绍(2021-12-12)
- ·PHP命名空间用法实例分析(2021-12-15)
- ·PHP 命名空间原理与用法详解(2022-02-28)
- ·PHP 命名空间和自动加载原理与用法实例分析(2022-03-04)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)