为了账号安全,请及时绑定邮箱和手机立即绑定

求大神,我该如何避免php的require_once?

/ 猿问

求大神,我该如何避免php的require_once?

123456qqq 2019-10-21 18:14:25

如何避免php的require_once


查看完整描述

4 回答

?
沧海一幻觉

常用的避免require/include的方法。1、使用魔术函数__autoload php5可以使用__autoload来避免require,用的好的话,代码里头甚至看不到几个require,真是不错的东西。测试结果表明,使用__autoload之后比 require_once然后再实例化大概要快3倍左右。这个函数最大的用处就是在实例化一个未明确定义的类时去寻找相应的文件并载入(是动态加载哦~)。<?php function __autoload($class_name) { require_once $class_name . '.php';}$obj = new MyClass1(); $obj2 = new MyClass2(); >ps:为了减少与其它第三方类库产生冲突的可能,建议不要直接使用__autoload,而是使用spl_autoload_register(PHP 5 >= 5.1.0RC1)。ZEND框架用的就是spl_autoload_register 2、require前检查用class_exists或者function_exists检查一下,确认没有载入过再出手,至少比require_once能快上3倍。php4也可以用上。class_exists('MyClass') or requir('/path/MyClass.class.php'); 还有其他的方法来解决这个问题,但我没使用过。

查看完整回答
反对 回复 2019-10-26
?
弑天下

列一下俺常用的避免require/include的方法。 使用__autoload php5可以使用__autoload来避免require,用的好的话,代码里头甚至看不到几个require,实在是安逸啊。测试结果表明,使用__autoload之后的new Foo; 比require_once ‘foo.php’; new Foo; 大概要快3倍左右。 补充:为了避免autoload冲突,可以考虑使用spl_autoload_register(PHP 5 >= 5.1.2)来改变魔术函数__autoload的行为。 使用defined检测是否载入过 在代码开头使用defined检测是否定义过对应的常量,如果有的话,直接return。

查看完整回答
反对 回复 2019-10-26
?
慕函数4003404

1. require_once()和include_once()是 PHP 4.0.1pl2 中新加入的.(为了兼容肯定不能把include()和require()一下子就抛弃)

2.require_once()和include_once()需要额外的去查看系统是否已经调用过这个文件. 因为它们在一个opcode缓存下的调用非常慢.所以效率上比其它两个函数要差一些.(据说php5.2.*以后效率问题被解决)

3.php说不定以后就会把include()实现成include_once()的"名字连接",象implode()和join(),exit()和die()一样...(这个是我瞎猜的....)

查看完整回答
反对 回复 2019-10-26
?
一只甜甜圈

 在php中使用require_once/include_once虽然方便,但是代价昂贵,据测试数据来看,require_once比require慢3-4倍,所以在php开发中,我们应该尽量使用require/include。
  为了避免autoload冲突,可以考虑使用spl_autoload_register(PHP 5 >= 5.1.2)来改变魔术函数__autoload的行为。
  使用defined检测是否载入过
  在代码开头使用defined检测是否定义过对应的常量,如果有的话,直接return。

查看完整回答
反对 回复 2019-10-26

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信