本文阐述了PHP面向对象自动加载机制的原理和用法。分享给大家参考,如下:
学习PHP的面向对象时,你会知道很多“语法糖”,也就是神奇的方法。有一个添加自动加载的神奇方法,叫做:_ _ autoload();
先看一段代码
?PHP function _ _ autoload($ class name){ $ filename='。/'.$classname。PHP ';include _ once($ filename);} new a();这里实例化了一个类A,但是代码块中没有与类A相关的代码。因为找不到对应的A类,所以应该报错,这是常识,但是如果使用autoload()自动加载函数,结果可能会不一样。
从上面的流程图来看:如果在页面上实例化一个新的类,首先会在当前目录中找到对应的类代码;如果没有,你会去自动加载栈找到对应的自动加载功能;如果有,你会自动加载类;如果没有,您将抛出一个错误。
这是PHP自动加载的机制。然后把注意力放在后面。如果我有多个自动加载功能呢!
PHP提供了一个SPL函数
spl _ autoload _ register();//Register自动加载功能官方:spl_autoload_register()提供了更灵活的方式来实现类的自动加载。因此,不再建议使用__autoload()函数,该函数在未来版本中可能会被弃用。
但是这个功能在PHPexecl和PHPWord中是用来自动加载的,但是两者有区别!
自动加载PHPexecl的方法(这里作者估计是Python工程师,否则没有花括号,用缩进表示)
公共静态函数Register(){ $ functions=spl _ autoload _ functions();foreach($函数为$ function)spl _ autoload _ unregister($ function);$ functions=array _ merge(array(array(' PHPExcel _ Autoloader ',' Load ')),$ functions);foreach($函数为$ function)$ x=spl _ autoload _ register($ function);返回$ x;}PHPWord的自动加载方法
公共静态函数Register(){ return spl _ autoload _ Register(array(' PHPWord _ Autoloader ',' Load ')));}这两种方法可以完成重定义和自动加载,但是有区别吗?如果代码是独立运行的,两种情况都可以运行,但是如果它被集成到一个框架中,比如YII框架。PHPWord的自动加载无效。
因为YII框架自动携带自动加载功能,该功能在代码运行时已经注册,spl_autoload_register()将在自动加载队列后面加载新的自动加载功能。当所有PHPWord都在运行时,
它调用YII框架定义的自动加载机制,不是PHPWord的加载模式。
所以如果你反过来看PHPexecl的加载函数,你就会明白了。
更多对PHP相关内容感兴趣的读者可以查看本网站的话题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》、《php常见数据库操作技巧汇总》、0103010。
希望本文对PHP编程有所帮助。