【问题标题】:Phalcon PHP extend and override "update" and "insert" functionsPhalcon PHP 扩展和覆盖“更新”和“插入”函数
【发布时间】:2023-03-17 07:05:01
【问题描述】:

我想在 Phalcon PHP 中实现我自己的数据库方言。我想扩展和覆盖一些已经为 PDO 保留的功能。这就是我想要做的:

class DB extends \Phalcon\Db\Adapter\Pdo\Mysql{
    function _construct($connection_variables=array())
    {
        parent::_construct($connection_variables);
    }

    function update($table="",$variables="")
    {
        parent::execute($query);
    }
}

所以,当我尝试调用模型时:

$this->db->update('test',array('id'=>'1'));

它给了我一个错误说明:

Fatal error: Declaration of Libraries\DB::update() must be compatible with Phalcon\Db\AdapterInterface::update($table, $fields, $values, $whereCondition = NULL, $dataTypes = NULL) in ..... 

如何覆盖更新和插入函数? 谢谢

【问题讨论】:

    标签: php mysql class pdo phalcon


    【解决方案1】:

    你的update方法必须和Phalcon\Db\AdapterInterface接口中声明的方法匹配,应该是:

    function update($table, $fields, $values, $whereCondition = NULL, $dataTypes = NULL)
    {
        // ...
    }
    

    代替:

    function update($table="",$variables="")
    {
        // ...
    }
    

    signature/header 的方法必须与interface 中的方法相同。

    【讨论】:

    • 但是我想要一个自定义的更新功能。在 Phalcon 中,出于某种原因,您需要将数组中的字段与值分开 - 这并不漂亮。我想将值作为关联数组('field1'=>'value1','field2'=>'value2')传递,就像在 CodeIgniter 中一样。有没有办法通过扩展类来做到这一点?
    • 在这种情况下,您不能使用具有不同签名的相同方法,您必须使用相同的方法声明或以其他方式使用不同的方法。
    • 谢谢!看来我需要在方法命名方面发挥创意。
    • 嗯,这是interface 的本质,不客气 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2021-01-06
    • 2022-01-19
    • 1970-01-01
    • 2014-10-14
    相关资源
    最近更新 更多