跟着辛星认识一下PHP的自动加载

作为一个框架,文件的加载机制是不能少的,那么我们应该怎么加载呢,这些PHP已经给我们想好了,所以我们只需要按照规则办事就可以了,PHP中有两个函数可以完成这个功能,第一个是__autoload,现在已经很少用了,取而代之的是功能更加强大的spl_autoload_register,它需要的版本是PHP5.2.1之后的版本,现在我们的主流版本都是支持的,因此可以放心使用。

在以前的PHP版本中,我们往往需要require一堆的文件名,比如配置文件、数据库连接文件、日志文件等等,后来我们有了__autoload函数,它是在一个函数内完成所有的导入工作,它的一个优点是可以用编程的方式来处理,比如用正则表达式一次可以导入n个文件,在一定程度上会很方便我们的操作,但是,我们必须在__autoload中把所有的类型都写到,否则自动加载会得不到很好的实现。

现在有了spl_autoload_register,它的功能就是可以注册n个加载函数,我们随时随地可以使用这个内置函数来指定我们需要加载的文件名,下面是它的函数原型:

bool spl_autoload_register ( [callback $autoload_function] )

下面我们用代码实战一下:

首先我们创建一个B.class.php,内容如下:

<?php
class B {
	private $name = "辛星";
	private $age = 23;
	function getmsg(){
		return "姓名是:".$this->name."   年龄是:".$this->age;
	}
}

然后我们在同级目录下新建一个a.php文件,内容如下:

<?php
//先定义一个加载函数
function xin_load($class){
	$file = $class.".class.php";
	if(file_exists($file)){
		require_once($file);
	}
}
//然后注册它
spl_autoload_register('xin_load');

$class = new B();
echo $class->getmsg();

这里的类B之所以能够被正确的实例化,就是因为当我们定义一个类B的实例的时候,系统发现需要去加载文件才行,于是他去找所有的加载函数,然后再B.class.php中找到了了B的定义,也就加载该文件,值得注意的是,这里的只有B.class.php被导入,其他的格式差不多的并不会被导入。

时间: 2024-10-12 07:25:56

跟着辛星认识一下PHP的自动加载的相关文章

跟着辛星深入探讨一下PHP的反射机制

早在之前学习Java的时候,清楚的记得是学完了多线程之后学习的反射,现在在PHP中当然也有反射机制,如果童鞋你还不明白,那就需要搞明白奥,毕竟反射的功能还是蛮强大的,学习它还是很具有现实意义的. 反射从简单去理解就是我们拿到一个类,得到这个类的一些信息,比如它有哪些方法.有哪些参数等等,当然我们还可以动态的去调用它的方法等等一些功能,它的用途就是可以自动加载插件.自动生成文档等等,从而达到扩展PHP语言的作用. 几乎所有的反射类都实现了reflector接口,所有的实现类都拥有一个方法,那就是e

跟着辛星一起用CSS美化商品列表

说实话,最近对CSS的关注还是蛮多的,不为别的,只是因为自己喜欢,感觉写CSS就像画家绘画一样,使用热情和激情去探索,没有了那份功利心,反而感觉是一种享受,特别有成就感,好啦,今天就分享一期自己用CSS美化商品列表的步骤把,不喜勿喷奥,有建议请留言. 首先看一下做好之后的效果图把: 如果读者特别不喜欢这个样式,可以点击右上角的关闭,省的自己看了心烦意乱,好,我们首先新建一个HTML文件,内容书写如下: <html> <head> <title>CSS新闻列表制作<

Yii2的深入学习--自动加载机制

Yii2 的自动加载分两部分,一部分是 Composer 的自动加载机制,另一部分是 Yii2 框架自身的自动加载机制. Composer自动加载 对于库的自动加载信息,Composer 生成了一个 vendor/autoload.php 文件.你可以简单的引入这个文件,你会得到一个自动加载的支持. 在之前的文章,入口文件的介绍中,我们可以看到如下内容: // 引入 vendor 中的 autoload.php 文件,会基于 composer 的机制自动加载类 require(__DIR__ .

ThinkPHP 3.2.3 自动加载公共函数文件的方法

方法一.加载默认的公共函数文件 在 ThinkPHP 3.2.3 中,默认的公共函数文件位于公共模块 ./Application/Common 下,访问所有的模块之前都会首先加载公共模块下面的配置文件(Conf/config.php)和公共函数文件(Common/function.php),即默认的公共函数文件为 ./Application/Common/Common/function.php. 例如,在 ./Application/Common/Common 下新建 function.php,

Spring boot 国际化自动加载资源文件问题

Spring boot 国际化自动加载资源文件问题 最近在做基于Spring boot配置的项目.中间遇到一个国际化资源加载的问题,正常来说只要在application.properties文件中定义正确的资源文件路径,Spring boot就启动时就会自动加载资源. spring.messages.basename=i18n/message 但是我的项目修改后获取消息时系统报错,找不到对应语言的资源配置.于是试图找到原因.Google好久都没找到,简直好像就我一个人遇到这鬼问题一样??.只好自

PHP面向对象之类的自动加载

类的自动加载 含义: 当某行代码需要一个类的时候,php的内部机制可以做到"自动加载该类文件",以满足该行需要一个类的这种需求. 什么时候需要一个类? 1,new一个对象的时候: 2,使用一个类的静态方法的时候: 3,定义一个类(B)并以另一个类(A)作为父类的时候: 条件和要求 1, 当需要一个类的时候,就会自动调用某个函数(默认是__autoload),并传入所需要的类的名字 2, 一个类应该保存到一个独立的"类文件中":即其中只有该类的定义,没有别的代码: 3

__autoload() 类文件自动加载函数

这个魔术方法是用来自动加载程序所用到类文件的PHP源文件,这样就避免了我们一个一个自动去require或者include了,这个函数会在试图使用尚未被定义的类时自动调用.通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类,但是我最近看过一篇文章,上面说__autoload()的效率不是很高.以下是示例代码: 1 <?php 2 功能:在当前页使用类时自动加载该类的文件 3 参数$className 为类的名称 可自定义 4 5 */ 6 7 function __auto

20150112--抽象类+接口+重载+自动加载机制-02

重载 重载:overload,被重新加载.在面向对象里,重载指的当一个函数(方法),具有不同的返回值或者参数列表的时候,可以有不同的存在形式(允许同名函数存在:返回值或者参数列表不一样) class Person{ public string function eat(){//吃饭方法;return '吃饱了';} public string function eat(水果){//吃水果;return '好吃';} public string function eat(主食){//吃主食;ret

20150112--抽象类+接口+重载+自动加载机制-01

回顾 面向对象:自动加载(__autoload),类常量访问(范围解析操作符),静态(属性和方法:self) 设计模式:单例模式(三私一公),工厂模式 面向对象三大特性:封装,继承和多态(PHP不支持) PHP继承:extends(对象继承:属性和非私有方法) PHP继承 方法重写 子类拥有与父类同名的方法. 除了私有的属性和方法之外,系统一律都是去子类中查找属性和方法,但是如果对应的属性和方法是私有的,那么系统一定要去判断$this所代表的上下文(类环境),在哪个类就访问哪个类的私有属性和方法