PHP自动加载 spl_autoload_register
2017-05-07 00:03
826 查看
内容描述:
刚开始自学PHP的时候,一个功能类单独写一个文件,引入类文件时用 require_once "类文件路径";后来工作中接触thinkPHP3.2.3框架,发现框架中引入类文件的方式用的是 命名空间 配合 spl_autoload_register() 实现的自动加载;
MyClass1.class.php文件内容:
MyClass2.class.php文件内容:
index.php文件内容:
运行效果:https://www.httpsdomain.com/index.php
This is MyClass1
This is MyClass2
END
OK
/Animal/Cat.class.php文件内容如下:
/Anima/Dog.class.php文件内容如下:
如果不使用自动加载,按照原有的require_once,那么
/index.php文件内容如下:
如果使用自动加载,那么/index.php文件内容如下:
运行结果:
如果不在代码开头写 user Animal\Cat;那么在实例化类时,就必须写完整的类路径。/index.php文件内容如下:
运行结果:
/Logic/Activity/ActivityOne.class.php文件内容如下:
/index.php文件内容如下:
运行结果:
2.类文件的后缀名必须统一:如以’.class.php'结尾
刚开始自学PHP的时候,一个功能类单独写一个文件,引入类文件时用 require_once "类文件路径";后来工作中接触thinkPHP3.2.3框架,发现框架中引入类文件的方式用的是 命名空间 配合 spl_autoload_register() 实现的自动加载;
一、无命名空间同一个目录下
目录结构:MyClass1.class.php文件内容:
<?php class MyClass1 { function __construct() { echo 'This is MyClass1 <br>'; } }
MyClass2.class.php文件内容:
<?php class MyClass2 { function __construct() { echo 'This is MyClass2 <br>'; } }
index.php文件内容:
<?php //自动加载 spl_autoload_register(function ($class_name) { require_once $class_name . '.class.php’; }); $obj = new MyClass1(); $obj2 = new MyClass2(); echo 'END <br>’;
运行效果:https://www.httpsdomain.com/index.php
This is MyClass1
This is MyClass2
END
OK
二、有命名空间,不在同一个目录中的类,
目录结构如下:/Animal/Cat.class.php文件内容如下:
<?php namespace Animal; class Cat { function __construct() { echo 'This is a Cat Class!<br>'; } }
/Anima/Dog.class.php文件内容如下:
<?php namespace Animal; class Dog { function __construct() { echo 'This is a Dog Class!<br>'; } }
如果不使用自动加载,按照原有的require_once,那么
/index.php文件内容如下:
<?php require_once "Animal/Dog.class.php"; $dog = new Dog(); echo 'END <br>’;
如果使用自动加载,那么/index.php文件内容如下:
<?php //自动加载 spl_autoload_register(function ($class_name) { $class_name = str_replace('\\','/', $class_name); /*将 use语句中的’\’替换成’/‘,避免造成转移字符导致require_once时会报错*/ require_once $class_name . '.class.php'; /*文件的后缀名是 .class.php*/ }); use Animal\Dog; $dog = new Dog(); echo 'END <br>’;
运行结果:
如果不在代码开头写 user Animal\Cat;那么在实例化类时,就必须写完整的类路径。/index.php文件内容如下:
<?php //自动加载 spl_autoload_register(function ($class_name) { $class_name = str_replace('\\','/', $class_name); /*将 use语句中的’\’替换成’/‘,避免造成转移字符导致require_once时会报错*/ require_once $class_name . '.class.php’; /*文件的后缀名是 .class.php*/ }); use Animal\Dog; $dog = new Dog(); $cat = new \Animal\Cat(); echo 'END <br>';
运行结果:
不同命名空间的类 不同路径的类文件
如/Logic/Activity/ActivityOne.class.php文件 与 /Animal/Dog.class.php文件,目录如下:/Logic/Activity/ActivityOne.class.php文件内容如下:
<?php namespace Logic\Activity; class ActivityOne { function __destruct() { echo 'This is a ActivityOne Class!\Logic\Activity\ActivityOne.class.php<br>'; } }
/index.php文件内容如下:
<?php //自动加载 spl_autoload_register(function ($class_name) { $class_name = str_replace('\\', '/', $class_name); $file_name = $class_name . '.class.php'; if (file_exists($file_name)) { require_once $file_name; } }); use Animal\Dog; use Logic\Activity\ActivityOne; $dog = new Dog(); $A = new ActivityOne();
运行结果:
注意:
1.命名空间与文件路劲的对应关系:如use Animal\Dog; Dog类的存放路径必须是在Animal文件夹中,否则引入文件是会报错找不到文件。2.类文件的后缀名必须统一:如以’.class.php'结尾
相关文章推荐
- php命名空间+spl_autoload_register实现类的自动加载
- PHP spl_autoload_register实现自动加载研究
- PHP自动加载类—__autoload()和spl_autoload_register()
- PHP自动加载类—__autoload()和spl_autoload_register() (补充)
- php spl_autoload_register类库自动加载,省去引入类文件
- PHP自动加载之spl_autoload_register()
- php面向对象(OOP)—spl_autoload_register()注册自定义的自动加载函数
- php自动加载类的实现 spl_autoload_register
- PHP自动加载上——spl_autoload_register
- PHP 命名空间与自动加载机制介绍,spl_autoload_register, __autoload 函数
- PHP spl_autoload_register实现自动加载研究
- PHP自动加载机制[2]---spl_autoload_register操作详解
- PHP自动加载类—__autoload()和spl_autoload_register() (补充)
- PHP (雏形)框架之类的自动装载 spl_autoload_register
- 自动加载类PHP中spl_autoload_register函数的用法
- 12-31--PHP函数spl_autoload_register实现自动加载研究
- php类文件的自动加载机制__autoload,spl
- spl_autoload_register 让类在需要的时候自动加载
- PHP spl_autoload_register 自动装载
- php: __autoload 与 sql_autoload_register 自动加载区别