1

在上一个问题中,我询问了各种 ORM 库。事实证明,对于 ORM 而言,Kohana 看起来非常干净但功能强大。不过,我已经有一个正在使用的 MVC 框架。如果我不想将它作为框架运行,那么包含什么正确的文件集来只给我 DB 和 ORM 基类文件?

更新:

我跳进去开始查看 ORM 源​​代码。有一件事让我立即感到困惑。所有的 ORM 类的类名都附加了 _CORE,即 ORM_Core ORM_Iterator_Core,但到处的代码都在扩展 ORM 类。问题是,我已经以 6 种不同的方式搜索了整个代码库,但我从未见过普通的 ORM 类 def 或 ORM 接口 def 或任何东西。有人能告诉我魔法发生在哪里吗?

4

4 回答 4

5

为什么不只是有一个

class ORM extends ORM_Core {} 

在你的代码的某个地方?这消除了使用任何加载程序代码的需要。

您还需要 Kohana_Exception、数据库库(和适当的驱动程序)、Kohana::config()、Kohana::auto_load()、Kohana::log() 方法(在 Database.php 中搜索这些方法)。

Kohana 是一个很棒的 MVC 框架,但并不是真的被设计成像这样被分解成块。您可能还想研究Doctrine,这是 PHP 的另一个 ORM(它被设计为独立的)

于 2008-10-22T06:28:18.740 回答
3

事实证明,Kohana 使用了魔术类加载,因此,如果具有 _Core 扩展的已定义类不作为类存在

即 ORM_Core 存在,但 ORM 不存在,因此 Kohana 将神奇地定义一个 ORM 类,因为该包使用 100% 魔术类加载。

万一有人感兴趣,我在这里记录我的发现,以便每个人以后都可以找到它:

From Kohana.php in the system directory:

<-- snip if ($extension = self::find_file($type, self::$configuration['core']['extension_prefix'].$class))
{
// Load the extension
require $extension;
}
elseif ($suffix !== 'Core' AND class_exists($class.'_Core', FALSE))
{
// Class extension to be evaluated
$extension = 'class '.$class.' extends '.$class.'_Core { }';
-->

<-- snip

// Transparent class extensions are handled using eval. This is
// a disgusting hack, but it gets the job done.
eval($extension);

-->

所以它做了一个评估..

于 2008-10-22T02:58:06.947 回答
1

Zak,检查可维护框架的 ORM。http://framework.maintainable.com/mvc/3_model.php#c3.7 仔细阅读,我相信你会喜欢的。我将其更详细地发布在: PHP 最容易使用的 ORM 框架是什么?

于 2008-11-25T00:25:33.060 回答
0

http://obando.com.ve/2009/04/29/modelado-orm-rapido-y-facil/

这就是你所需要的!!

于 2009-05-01T04:12:08.370 回答