2011-12-05 26 views
6

Con OOP tradicional, lo haría (o podría, más bien) crear un modelo/objeto que representa un User, con propiedades que reflejan que, es decir, name, id, job title etc.¿Cómo puedo instanciar varias instancias del mismo objeto en Codeigniter?

pude a continuación, crear una nueva instancia de ese objeto y asignarlo a una variable, y si estaba recorriendo un conjunto de resultados, podría crear una instancia para cada uno. Con CodeIgniter, esto parece imposible, ya que al:

$this->load->model('User'); 

Crea una instancia, y lo coloca para su uso en $this->user.

¿No hay forma de utilizar modelos como objetos de una forma más tradicional ?, ¿pero sin hackear la forma de hacer las cosas de CI?

Entiendo que puede asignar cosas a un nombre de objeto diferente usando $this->load->model('User', 'fubar'), pero no es tan dinámico como simplemente asignar una instancia a una variable.

Cualquier idea sobre el asunto es muy apreciada chicos.

EDIT: gracias por las respuestas chicos, creo que me perdí una parte vital del trabajo del "Codigniter Way", pero he estado buscando a través de una biblioteca contribuido, y la práctica de utilizar la misma instancia (asignado al espacio de nombres codeigniter) pero al borrar las variables de instancia después de cada uso, parece ser una excelente manera de trabajar que elimina mis reservas.

Una vez más, gracias por la ayuda y las respuestas.

Respuesta

5

No tiene que usar las funciones load(). Simplemente puede usar require_once y new User(), como lo haría normalmente.

El uso del load() debe ser solo para las cosas que desee en el espacio de nombres de CI global. Como puede ver, se contamina muy rápido si intenta usarlo para todo.

+0

Gracias, supongo que sabía que aún podía hacer esto, pero me preguntaba si había algo que podría hacer para evitar el uso.(), y todavía usa la carga de CI. Es decir. podría hacer: '$ this-> load-> model ('User');' luego tomar copias con '$ var = new $ this-> user'? –

+0

O instancias nuevas, más bien. –

+0

Daniel: vea el primer artículo en este artículo: http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/ –

0

Aún puede crear una instancia de los objetos en codeigniter de la misma manera que lo hace normalmente.

$user1 = new Users(); // Instantiate 
$user2 = new Users(); 

$user1->property;  // Using it 
$user2->method() 

unset($user1);  // Unset it when done for good practice. 
-1
// User_model.php 

public function get_users() { 
    $query = $this->db->get('mytable'); 
    return $query->result(); 
} 

// User_controller.php 
public function show_users() { 
    $data['users'] = $this->User_model->get_users(); 
    $this->load->view('show_users', $data); 
} 

// show_users.php (view file) 
$x = 0; 
foreach ($users as $user) { 
    $x = $user; 
    $x++; 
} 
+1

Sí, eso es lo que pensé, no es relevante para esta pregunta. – Anil

0

Sí, lo dijo JustAnil y minboost son correctas, sin embargo, la práctica estándar de cómo la mayoría de los desarrolladores de CI escribir código es la siguiente sintaxis

$this->mymodel->mymethod(); 

¿Tiene la impresión de un particular, problema o problema cuando estás tratando de escribir de esta manera? ¿O es simplemente diferente del estilo en el que estás acostumbrado a escribir? Desarrolle un caso de uso donde "no es tan dinámico como simplemente asignar una instancia a una variable" :)

Cuestiones relacionadas