2011-12-05 6 views
6

Z tradycyjnym OOP, chciałbym (lub może raczej) stworzenie modelu/obiektu, który reprezentuje User o właściwościach, które odzwierciedlać że, tj name, id, job title itpJak utworzyć instancję wielokrotnych wystąpień tego samego obiektu w kodzie sygnatur?

mogłem następnie utworzyć nową instancję ten obiekt i przypisać go do zmiennej, a gdybym przechodził przez zbiór wyników, mógłbym utworzyć instancję dla każdego z nich. Z CodeIgniter wydaje się to niemożliwe, jak robi:

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

instancję go i umieszcza go do użytku na $this->user.

Czy nie ma sposobu, aby używać modeli jako obiektów w bardziej tradycyjny sposób, ale bez hackowania sposobu działania CI?

Rozumiem, że można przypisać rzeczy do innej nazwy obiektu przy użyciu $this->load->model('User', 'fubar'), ale nie jest tak dynamiczne, jak po prostu przypisanie instancji do zmiennej.

Każdy wgląd w tę sprawę jest bardzo doceniany.

EDYTOWANIE: dziękuję za odpowiedzi, myślę, że przegapiłem ważną część pracy nad "Codigniter Way", ale właśnie przeglądałem bibliotekę, w której uczestniczyłem, i praktykę korzystania z tej samej instancji (przypisane do przestrzeni nazw kodów znaków), ale czyszczenie zmiennych instancji po każdym użyciu, wydaje się być świetnym sposobem pracy, który usuwa moje rezerwacje.

Jeszcze raz - dzięki za pomoc i odpowiedzi.

Odpowiedz

5

Nie musisz używać funkcji load(). Możesz po prostu użyć require_once i new User(), jak zwykle.

Korzystanie z load() powinno być możliwe tylko dla rzeczy, które mają się znajdować w globalnej przestrzeni nazw CI. Jak widać, bardzo szybko zostaje zanieczyszczony, jeśli spróbujesz go użyć do wszystkiego.

+0

Dzięki, chyba wiedziałem, że nadal mogę to zrobić, ale zastanawiałem się, czy jest coś, co mógłbym zrobić, aby uniknąć używania() i nadal używa ładowania CI. To znaczy. czy mogę zrobić: '$ this-> load-> model ('User');' następnie zabrać kopie z '$ var = new $ this-> user'? –

+0

Lub raczej nowe instancje. –

+0

Daniel: zobacz pierwszy artykuł w tym artykule: http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/ –

0

Możesz nadal tworzyć instancje obiektów w codeigniter w taki sam sposób jak robisz to normalnie.

$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

Tak, to co myślałem, nie ma znaczenia dla tego pytania. – Anil

0

Tak, co JustAnil i minboost że są prawidłowe, jednak standardowa praktyka dla jak większość twórców CI napisać kod jest z następującą składnią

$this->mymodel->mymethod(); 

Czy znalezienie szczególności problem lub problem, gdy próbujesz pisać w ten sposób? A może różni się od stylu, w którym przywykłeś pisać? Proszę opracować przypadek użycia, w którym "nie jest tak dynamiczny, jak po prostu przypisanie instancji do zmiennej" :)

Powiązane problemy