手册中 Zend_Db_Table 的表关系例子的 E-R 图及部分解释

在 Zend Framework 的 9.8. Zend_Db_Table Relationships 章节中,介绍了使用 Zend_Db_Table 关联表的例子。我听过不少人都觉得这部分相当难理解。我觉得手册如果能给出例子中所用数据表的E-R图,那么能帮助大家更清晰的理解这个例子。

E-R 图:

Zend_Db_Table 例子中的 E-R 图

建表用 SQL 语句 (MYSQL 5.0):


— 表的结构 `accounts`

CREATE TABLE `accounts` (
`account_name` varchar(50) NOT NULL,
PRIMARY KEY (`account_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


— 表的结构 `bugs`

CREATE TABLE `bugs` (
`bug_id` varchar(50) NOT NULL,
`reported_by` varchar(50) NOT NULL,
`assigned_to` varchar(50) NOT NULL,
`verified_by` varchar(50) NOT NULL,
PRIMARY KEY (`bug_id`),
KEY `reported_by` (`reported_by`),
KEY `assigned_to` (`assigned_to`),
KEY `verified_by` (`verified_by`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; Continue reading 手册中 Zend_Db_Table 的表关系例子的 E-R 图及部分解释

Zend Framework 代码分析——Zend_Loader

Zend_Loader 应该是 Zend Framework 中相对简单的类。所有方法都为静态方法,用于加载(loading)类或文件(loadClass、loadFile、autoload、registerAutoload 方法),以及加载类或文件时进行的必要判断(isReadable 方法)。

Zend_Loader 从 3834 版本被加入 Zend Framework 并没有太多的改动。除了 4259 版本添加了 registerAutoload 方法。

public static function loadClass($class, $dirs = null)

方法是高效的加载类的方法。类的文件命名必须是 {$className}.php。当第二个参数 $dirs 为文件夹名或元素是文件夹名的数组时,将从这些文件夹中找到第一个匹配的文件进行加载。而如果 $dirs 为 null,则将类名的下划线作为分隔,划分为文件夹。例如 Zend_Foo_Bar,将会加载 Zend/Foo/Bar.php这个文件。若无法在上述所有地方找到可用的文件加载类,则将对 include_path进行搜索。

if (class_exists($class, false) || interface_exists($class, false)) {

return;

}

首先判断是否已经加载,这里使用了 interface_exists,在 php 中 interface 可以被认为是一种特殊的类。

if ((null !== $dirs) && !is_string($dirs) && !is_array($dirs)) {

require_once 'Zend/Exception.php';
throw new Zend_Exception('Directory argument must be a string or an array');

}
if (
null === $dirs) {

$dirs = array();

}
if (
is_string($dirs)) {

$dirs = (array) $dirs;

}

若类和接口没有被加载,则对 $dirs 进行验证,判断是否为合法的类型:null、字符串、数组,否则抛出异常。而最终 $dirs 都将转换为数组处理。 Continue reading Zend Framework 代码分析——Zend_Loader