Zend_loader 文档翻译
来源:互联网 发布:数模动态最优化 编辑:程序博客网 时间:2024/05/17 01:38
Zend_loader
动态的读取文件和类
Zend_Loader类包含了许多方法去帮助你动态的读取文件
Tip
Zend_Loader vs. require_once()
Zend_Loader在你需要读取的文件名是变量时非常好用。例如,它是基于user input或者method argument。如果你读取的文件或类的名字是常量的话,那么Zend_Loader相比传统的PHP functions就没什么好处,如require_once()。
读取文件(Loading Files)
static方法Zend_Loader::loadFile()读取一个PHP文件。读取的文件可能包含任何PHP代码。这个方法是用PHP的include()封装的,在失败的时候会发出PHP warning(例如文件不存在的时候)。
Example #1 Example of the loadFile() Method
Zend_Loader::loadFile($filename, $dirs=null, $once=false);
$dirs参数指定了要search文件的文件夹。如果设为NULL,只有include_path会被search;如果值是string或array类型的话,对应的文件夹就会遵循include_path去search。
$once参数是boolean类型。如果是TRUE,Zend_Loader::loadFile()就会使用PHP函数include_once()来读取文件,否则就会使用PHP函数include()。
读取类(Loading Classes)
static方法Zend_Loader::loadClass(
Example #2 Example of the loadClass() Method
Zend_Loader::loadClass('Container_Tree', array( '/home/production/mylib', '/home/production/myapp' ));
这string通过替换下划线转换为相对路径的你的操作系统下的目录分隔符来指定class,并跟上‘.php’。在上面的例子中,‘Container_Tree’在Windows下变为’Container\Tree.php’。
如果
如果文件没被找到或者class在加载后不存在,Zend_Loader::loadFile()**throw a **Zend_Exception。
Zend_Loader::loadFile()是用来读取的,因此class name可能只包含字母数字字符和横岗“-”,下划线“_”,和点“.”。
Note:Loading Classes from PHP Namespaces
从1.10.0开始,Zend框架允许从PHP namespaces中读取class。这项支持遵循着和 PHP Framework Interop Group PSR-0相同的guidelines和implementation.
在这个guideline之下,以下的规则适用:
- 每个namespace separator会在读取文件系统的时候转换成一个DIRECTORY_SEPARATOR
- CLASS NAME中的每个“_”字符会被转换为DIRECTORY_SEPARATOR。
“_”字符在namespace中没有特殊含义
- 完全合格的namespace会在从文件系统读取的时候添加“.php”后缀。
例如:
- \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
- \namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
- \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
可读文件的测试(Testing if a File is Readable)
使用Autoloader
Zend_Loader类包含一个可以用PHP SPL autoloader来注册的方法
Zend_Loader::autoload()是一个回调方法。为了方便,Zend_Loader提供registerAutoload() function来注册autoload()方法。如果spl_autoload扩展在你的PHP环境中不存在,那么registerAutoload() method throw a Zend_Exceptioin。
Example #4 Example of registering the autoloader callback method
Zend_Loader::registerAutoload();
在Zend框架回调注册之后,你可以从Zend框架里引用类而不需要声明引用。autoload()方法会在你引用类的时候自动使用Zend_Loader::loadClass()。
如果你想扩展Zend_Loader类,你可以给registerAutoload()传参数,去指定从autoload()注册哪个类。
Example #5 Example of registering the autoload callback method from an extended class
因为PHP静态方法引用的语义问题,你必须把loadClass()和autoload()都实现,同事autoload()必须调用self::loadClass(),然后它将会在父类里调用,而不是子类
class My_Loader extends Zend_Loader{ public static function loadClass($class, $dirs = null) { parent::loadClass($class, $dirs); } public static function autoload($class) { try { self::loadClass($class); return $class; } catch (Exception $e) { return false; } }}Zend_Loader::registerAutoload('My_Loader');
你可以删除一个autoload回调。registerAutoload()第二个参数默认为TRUE,如果是FALSE,autoload回调会从SPL autoload stack中注销掉。
- Zend_loader 文档翻译
- 10. Zend_Loader
- 翻译文档
- 文档翻译
- Zend FrameWork 之 Zend_Loader
- zend_loader 源码 分析
- MongoDB文档翻译-引言-文档
- GSM0222 文档的翻译
- Tomcat文档翻译
- Tomcat文档翻译二
- OpenKM 文档翻译
- dhtmlxtree文档翻译
- NHibernate文档翻译
- dhtmlxtree文档翻译
- dhtmlxtree文档翻译(转)
- WinPcap文档翻译第一章
- 预备翻译C99文档
- Squirrel 文档翻译( Introduction )
- 莫言:自尊就是吃饱了撑的
- 比你牛的人,多数因为比你努力
- 请放弃这些没用的社交
- 谢谢你的好意,可我不需要
- 姑娘,其实你从来不缺机会
- Zend_loader 文档翻译
- 被告知孩子学校偷钱后
- 爱情~
- 你暖,所以你孤独
- 知乎过万点赞回答:年轻一定要奋斗…
- 不要忙着挤进别人的圈子
- 一棵受伤的树
- 脾气好的领导,不是好领导
- 家是文艺腔,更是烟火气