Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Zend框架中,如果没有table类,如何创建新行?_Php_Oop_Zend Framework_Zend Db Table - Fatal编程技术网

Php 在Zend框架中,如果没有table类,如何创建新行?

Php 在Zend框架中,如果没有table类,如何创建新行?,php,oop,zend-framework,zend-db-table,Php,Oop,Zend Framework,Zend Db Table,我知道您可以让类用户扩展Zend_Db_Table_Abstract和类用户扩展Zend_Db_Table_Row_Abstract,将用户的$\u rowClass属性设置为User 要创建和保存新行,我只知道如何执行以下操作: $users = new Users() $user = $users->createRow(); $user->name = 'name'; $user->save(); 你能告诉我怎么做吗 $user = new User(); $user-&

我知道您可以让类用户扩展Zend_Db_Table_Abstract和类用户扩展Zend_Db_Table_Row_Abstract,将用户的$\u rowClass属性设置为User

要创建和保存新行,我只知道如何执行以下操作:

$users = new Users()
$user = $users->createRow();
$user->name = 'name';
$user->save();
你能告诉我怎么做吗

$user = new User();
$user->name = 'name';
$user->save();
作为补充说明,我还考虑尝试使用以下语法来获取特定行:

$user = new User($userID);
然而,考虑到这并不是试图创建一个新用户,而是为了获得一个现有用户,我认为下面的语法可能更具可读性-您认为呢

$users = new Users();
$user = $users->fetchRow($userID);

那么有三种选择:

  • 将其破解到zend框架基类中
  • 将它们子类化为您自己的抽象基类以提供此功能
  • 为每个类单独实现此功能
不用说,第二种选择是最好的。。。请注意,这并不那么酷:

$user = new User($userID);
每次您都必须将构造函数参数转发到抽象超类。。。这可能很烦人

当然,最后一个选择是使用一些不同的东西,它已经按照您描述的方式工作了,例如,我个人更喜欢它,因为它非常轻量级、小而简单,因此可以与其他框架很好地集成,此外,它的设计和集中性更好,使用它编写的代码看起来更直观。。。或者它可以启发你,如何修补zend框架,以你喜欢的方式为你工作

希望这有助于

格里茨


back2dos

嗯,有三种选择:

  • 将其破解到zend框架基类中
  • 将它们子类化为您自己的抽象基类以提供此功能
  • 为每个类单独实现此功能
不用说,第二种选择是最好的。。。请注意,这并不那么酷:

$user = new User($userID);
每次您都必须将构造函数参数转发到抽象超类。。。这可能很烦人

当然,最后一个选择是使用一些不同的东西,它已经按照您描述的方式工作了,例如,我个人更喜欢它,因为它非常轻量级、小而简单,因此可以与其他框架很好地集成,此外,它的设计和集中性更好,使用它编写的代码看起来更直观。。。或者它可以启发你,如何修补zend框架,以你喜欢的方式为你工作

希望这有助于

格里茨


back2dos

因为我不知道Zend DB表类和类似类是如何工作的,所以我提供了另一个选项:

对于许多不同的类来说,这很麻烦,而且可能需要做太多的工作,但是您可以做如下的事情

class User {
    public function __construct($userID) {
        //initialize the db
        $db = Zend_Db::factory(...);

        $sql = $db->quoteInto("select * from users where user_id = ?", $userID);

        $userObject = $db->query($sql)->fetchObject();

        //now $userObject has all the data of that particular user
    }

    public function save() {
        //first gather this user's data into an array, $userData
        //put the user id into $user_id

        $db->update('users', $userData, 'user_id = $user_id);

    }
}

这很草率,但这是我能马上想出的唯一选择。

因为我不知道Zend DB Table类和类似的类是如何工作的,所以我提供了另一个选项:

 class User extends UserModel {

        function __construct($userid=NULL){
           parent::__construct()

           if($userid!=NULL){
                return $this->find($userid);
           }else{
                return $this->createRow();
           }
        }
     }
对于许多不同的类来说,这很麻烦,而且可能需要做太多的工作,但是您可以做如下的事情

class User {
    public function __construct($userID) {
        //initialize the db
        $db = Zend_Db::factory(...);

        $sql = $db->quoteInto("select * from users where user_id = ?", $userID);

        $userObject = $db->query($sql)->fetchObject();

        //now $userObject has all the data of that particular user
    }

    public function save() {
        //first gather this user's data into an array, $userData
        //put the user id into $user_id

        $db->update('users', $userData, 'user_id = $user_id);

    }
}
这是草率的,但这是我能马上想出的唯一选择

 class User extends UserModel {

        function __construct($userid=NULL){
           parent::__construct()

           if($userid!=NULL){
                return $this->find($userid);
           }else{
                return $this->createRow();
           }
        }
     }
但老实说,这种差异是不值得的


但老实说,这种差异是不值得的。

下面介绍如何在没有表对象的情况下构造新的行实例:

class User extends Zend_Db_Table_Row_Abstract
{
  protected $_tableClass = "Users";
}

$user = new User();
$user->name = "name";
$user->save();  // performs an INSERT
下面介绍如何在没有表对象的情况下为数据库中的给定行构造行实例:

class User extends Zend_Db_Table_Row_Abstract
{
  protected $_tableClass = "Users";

  public function __construct(array $config = array())
  {
    if (isset($config["key"]) {
      $table = $this->_getTableFromString($this->_tableClass);
      $rowset = call_user_func_array(array($table, "find"), (array) $config["key"]);
      $row = $rowset->current();
      if ($row != false) {
        $config["data"] = $row->toArray();
        $config["stored"] = true;
      }
    }
    parent::__construct($config);
  }
}

$user = new User(array("key"=>$userid));
$user->name = "name";
$user->save(); // performs an UPDATE

注意:这些代码示例没有经过测试,我将把它留给您。

下面介绍如何在没有表对象的情况下构造新的行实例:

class User extends Zend_Db_Table_Row_Abstract
{
  protected $_tableClass = "Users";
}

$user = new User();
$user->name = "name";
$user->save();  // performs an INSERT
下面介绍如何在没有表对象的情况下为数据库中的给定行构造行实例:

class User extends Zend_Db_Table_Row_Abstract
{
  protected $_tableClass = "Users";

  public function __construct(array $config = array())
  {
    if (isset($config["key"]) {
      $table = $this->_getTableFromString($this->_tableClass);
      $rowset = call_user_func_array(array($table, "find"), (array) $config["key"]);
      $row = $rowset->current();
      if ($row != false) {
        $config["data"] = $row->toArray();
        $config["stored"] = true;
      }
    }
    parent::__construct($config);
  }
}

$user = new User(array("key"=>$userid));
$user->name = "name";
$user->save(); // performs an UPDATE
注意:这些代码示例没有经过测试,我将把它留给您