类自动载入
来源:互联网 发布:魅丽文化网络编辑招聘 编辑:程序博客网 时间:2024/06/05 16:09
自动加载类
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件)。
在 PHP 5 中,不再需要这样了。可以定义一个 __autoload() 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
Example #1 自动加载示例
本例尝试分别从 MyClass1.php 和 MyClass2.php 文件中加载 MyClass1 和 MyClass2 类。
<?php
function __autoload($class_name) {
require_once $class_name . '.php';
}
$obj = new MyClass1();
$obj2 = new MyClass2();
?>
Example #2 另一个例子
本例尝试加载接口 ITest。
<?php
function __autoload($name) {
var_dump($name);
}
class Foo implements ITest {
}
/*
string(5) "ITest"
Fatal error: Interface 'ITest' not found in ...
*/
?>
Example #3 自动加载在 PHP 5.3.0+ 中的异常处理
本例抛出一个异常并在 try/catch 语句块中演示。
<?php
function __autoload($name) {
echo "Want to load $name.\n";
throw new Exception("Unable to load $name.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
以上例程会输出:
Want to load NonLoadableClass.Unable to load NonLoadableClass.
Example #4 自动加载在 PHP 5.3.0+ 中的异常处理 - 没有自定义异常机制
本例将一个异常抛给不存在的自定义异常处理函数。
<?php
function __autoload($name) {
echo "Want to load $name.\n";
throw new MissingException("Unable to load $name.");
}
try {
$obj = new NonLoadableClass();
} catch (Exception $e) {
echo $e->getMessage(), "\n";
}
?>
以上例程会输出:
Want to load NonLoadableClass.Want to load MissingException.Fatal error: Class 'MissingException' not found in testMissingException.php on line 4
参见
- unserialize()
- unserialize_callback_func
- spl_autoload()
- spl_autoload_register()
0 0
- 类自动载入
- php类自动载入
- 类自动载入
- php类自动载入
- [php] 类自动载入代码
- php类文件自动载入(autoload)
- php类文件自动载入(autoload)
- 浅谈 PHP类的自动载入
- gulp自动载入外挂
- PHP 自动载入
- PSR-4 自动载入
- PHP __autoload函数(自动载入类文件)的使用方法
- PHP __autoload函数(自动载入类文件)的使用方法
- 类文件的载入-自动加载机制spl_autoload_register
- 类自动载入、开发一个PSR-0的基础框架
- 页面载入自动触发事件
- php 的自动载入
- PHP 自动载入,实例化对象时自动include类文件(spl_autoload_register)
- pdb调试python
- PHP中使用COM类进行访问
- 黑马程序员——Jave面向对象一
- Python CGI编程
- shutdown和shutdownNow的区别
- 类自动载入
- 黑马程序员——C语言助记(一) 基础知识及规范
- Hadoop介绍、HDFS和MapReduce工作原理、Hadoop中的JobTracker 和TaskTracker
- Cocos2d-x碰撞检测原理与英雄要打死怪物--之游戏开发《赵云要格斗》(7)
- No resource identifier found for attribute 'parentActivityName' in package 'android'
- Python MySQL(MySQLdb)
- hibernate组件映射
- Python网络编程(Socket)
- [Telerik]RadDocking第01篇 初步介绍RadDocking布局控件