PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP-ORM的算法是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我一直在寻找在PHP / mysql应用程序中使用的ORm.但是,在“ Hello world”测试之后,没有人吸引我的注意力.因此,我决定进行一些研究,并尝试编写自己的自定义ORm.但是我还没有找到代码级解释如何处理数据库关系的资源. ORM的工作原理很明确,但是当尝试在代码中进行布局时,我不知道最好的方法是什么.为每种可能的情况构建几个小的查询还是构建一个复杂的查询是最好的吗?欢迎对ORM的算法或体系结构有任何见解!

解决方法:

好吧,让我们即时制作一些ORM框架.当您标记PHP标签时,让我们用PHP对其进行编码.

但是在我们写它之前,我们必须知道一些基本概念或一些基本术语
关于orm相关主题.在此示例中,我们将具有:

> ORM框架-ORM框架负责处理服务器连接和服务器连接抽象. (完整的orm框架还支持自动的类到表的映射).
>数据层-这部分负责将类映射到表.
例如,数据访问层知道如何将特定的类对象保存到实际表中,以及如何将特定的表加载到特定的类对象中. (注意:几乎所有最新的ORM框架都可以避免您进入该层.例如@L_262_18@或Doctrine将支持该层的各个方面以及关系,甚至自动生成表).
>业务层-该层包含您实际的工作类,业务层通常代表模型或模型包含业务层

让我们从业务层或模型开始我们的示例.我们非常简单的项目可以保存和加载用户,它将具有一类业务层:

<?PHP
class user
{
    public $id;
    public $name
    public function __construct ($name=null)
    {
        $this->name = $name;
    }
}
?>

如您所见,您的业务层或模型不知道在何处以及如何保存或加载它.它只处理与项目相关的业务.这就是图层名称的来源.

其次,让我们建立一个简单的ORM框架:

<?PHP

//The connection link which can be changed any time
class link
{
    public $link;
    public function __construct ($hostname, $database, $username, $password)
    {
        $this->link = new \PDO ('MysqL:host='.$hostname.';dbname='.$database, $username, $password);
        $this->link->query('use '.$databasE);
    }
    public function fetch ($query)
    {
        $result = $this->link->query($query)->fetch();
    }
    public function query ($query)
    {
        return $this->link->query($query);
    }
    public function error ()
    {
        return $this->link->errorInfo();
    }
}

//A structure which collects all link(s) and table/class handlers togather
class database
{
    public $link;
    public $tables = array ();
    public function __construct ($link)
    {
        $this->link = $link;
        table::$database = $this;
    }
}

//A basic table handler class
//In recent ORM frameworks they do all the default mappings
class table
{
    public static $database;
}
?>

如您所见,ORM框架中的表类似乎非常差.但是如果这个框架是一个
一个复杂的框架,它将同时支持数据层,并具有所有功能以与任何表一起使用.

但是,因为您需要了解在这种情况下ORM框架的工作方式,所以我们将制作数据层
我们业务层中每个类的处理程序.

这就是您的数据层.它是如此自我描述,我认为它没有
需要任何文件

<?PHP
class users extends table
{
    public function create ($row)
    {
        $return = new user ();
        $return->id = $row[0];
        $return->name = $row[1];
        var_export($row);
        return $return;
    }
    public function load ($id=null)
    {
        if ($id==null)
        {
            $result = self::$database->link->fetch("SELEct * from users");
            if ($result)
            {
                $return = array();
                foreach ($result as $row)
                {
                    $return[$row[0]] = $this->create($row);
                }
                return $return;
            }
        }
        else
        {
            $result = self::$database->link->fetch("SELEct * from users where id='".$id."'");
            if ($result)
            {
                return $this->create(reset($result));
            }
            else
            {
                echo ("no result");
            }
        }
    }
    public function save ($user)
    {
        if (is_array($savE))
        {
            foreach ($save as $item) $this->save ($item);
        }
        if ($user->id==null)
        {
            return self::$database->link->query("insert into users set
                                                 name='".$user->name."'");
        }
        else
        {
            return self::$database->link->query("update users set name='".$user->name."'
                                                 where id='".$user->id."'");
        }
    }
    public function delete ($user)
    {
        self::$database->link->query ("delete from users where id='".$user->id."'");
    }
}
?>

>最后让我们初始化$database对象
>建立一些到某些sql Server的链接.
>将用户类处理程序添加数据库.
>使用它.

它在工作中:

<?
$database = new database (new link('127.0.0.1', 'system_db', 'root', '1234'));
$database->tables['users'] = new users();

if (!$database->tables['users']->save (new user('Admin')))
{
    var_export($database->link->error());
}

var_export($database->tables['users']->load(2));
?>

如果您需要深入了解PHP ORM的其他概念,请随时访问

>教义-http://www.doctrine-project.org/-功能齐全的复杂PHP ORM框架
> db.PHP-http://dbphp.net/-功能齐全,但非常简单的PHP ORM框架.

大佬总结

以上是大佬教程为你收集整理的PHP-ORM的算法是什么?全部内容,希望文章能够帮你解决PHP-ORM的算法是什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: