如何在Codeigniter中实例化一个带有结果对象的类?

时间:2011-09-01 11:18:00

标签: codeigniter instantiation

result() 的文档说我们可以传递一个类的名称来为每个结果对象实例化:http://codeigniter.com/user_guide/database/results.html

我无法找到正确的方法。我需要将几个字段从结果对象传递给构造函数。

$query = $this->db->query("SELECT * FROM users;");

foreach ($query->result('User') as $user)
{

  echo $row->name; // call attributes
  echo $row->reverse_name(); // or methods defined on the 'User' class
     

}

如果有更好的方法,请告诉我!

2 个答案:

答案 0 :(得分:0)

你不能。

实例化的对象不能传递任何参数,这意味着您需要创建一个方法来将这些字段传递给实例化的对象:

$query = $this->db->query("SELECT * FROM users;");

foreach ($query->result('User') as $user)
{

  $row->init_my_fields('field1', 'field2'); //instead of passing the fields through the __construct()
  echo $row->name; // call attributes
  echo $row->reverse_name(); // or methods defined on the 'User' class

}

答案 1 :(得分:0)

您可以在User类中创建一个静态Class方法来创建用户或用户实例。您需要将适当的实例变量添加到User类。

var $username = FALSE;
var $password = FALSE;

public static function get_user_by_id($id)
{
      $CI =& get_instance();
      $query = $CI->db->get_where('users', array('id' => $id));
      $user = $query->row(0, 'User');
      return $user;
}

在示例中,我获取了对CodeIgniter实例的引用以访问数据库。因为您不能从Class方法访问数据库,因为它不是对象实例。