2011-12-05 29 views
6

Với OOP truyền thống, tôi sẽ (hoặc có thể, chứ không phải) tạo ra một mô hình/đối tượng đại diện cho một User, với những đặc tính đó phản ánh điều đó, tức là name, id, job title, vvLàm thế nào tôi có thể khởi tạo nhiều phiên bản của cùng một đối tượng trong Codeigniter?

Sau đó tôi có thể tạo ra một thể hiện mới của đối tượng đó và gán nó cho một biến, và nếu tôi đang lặp qua một tập kết quả, tôi có thể tạo một cá thể cho mỗi biến. Với người viết mã, điều này có vẻ không thể, như đang thực hiện:

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

Instantiates nó và đặt nó để sử dụng tại $this->user.

Không có cách nào để sử dụng các mô hình làm đối tượng theo cách truyền thống hơn ?, nhưng không có cách nào để hack cách làm việc của CI?

Tôi hiểu rằng bạn có thể gán mọi thứ cho một tên đối tượng khác bằng cách sử dụng $this->load->model('User', 'fubar'), nhưng nó không phải là động như chỉ định một cá thể cho một biến.

Bất kỳ thông tin chi tiết nào về vấn đề này được mọi người đánh giá cao.

EDIT: cảm ơn những người trả lời, tôi nghĩ rằng tôi đã bỏ lỡ một phần quan trọng trong cách làm việc "Codigniter Way", nhưng tôi vừa xem qua thư viện đóng góp và thực hành sử dụng cùng một ví dụ (được gán cho không gian tên codeigniter) nhưng xóa các biến cá thể sau mỗi lần sử dụng, có vẻ là một cách tuyệt vời để làm việc để loại bỏ các đặt chỗ của tôi.

Một lần nữa - cảm ơn sự trợ giúp và câu trả lời.

Trả lời

5

Bạn không phải sử dụng các chức năng load(). Bạn chỉ có thể sử dụng require_oncenew User(), như bình thường.

Sử dụng load() chỉ nên dành cho những thứ bạn muốn trong không gian tên CI toàn cầu. Như bạn có thể thấy, nó bị ô nhiễm rất nhanh nếu bạn cố gắng sử dụng nó cho mọi thứ.

+0

Cảm ơn, tôi đoán tôi biết tôi vẫn có thể làm điều này, nhưng tự hỏi liệu có điều gì tôi có thể làm để tránh sử dụng không(), và vẫn sử dụng tải của CI. I E. tôi có thể làm: '$ this-> load-> model ('User');' sau đó lấy các bản sao với '$ var = new $ this-> user'? –

+0

Hoặc các phiên bản mới, thay vào đó. –

+0

Daniel: xem mục đầu tiên trên bài viết này: http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/ –

0

Bạn vẫn có thể tạo nhanh đối tượng trong trình mã hóa giống như cách bạn làm bình thường.

$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

Có thats những gì tôi nghĩ, không có liên quan đến câu hỏi này. – Anil

0

Vâng, những gì JustAnil và minboost nói được đúng, tuy nhiên, thực hành tiêu chuẩn cho cách đa số các nhà phát triển CI viết mã là với cú pháp sau

$this->mymodel->mymethod(); 

Bạn đang tìm kiếm một đặc biệt vấn đề hoặc vấn đề khi bạn đang cố gắng để viết như thế này? Hay nó khác với phong cách bạn thường viết? Vui lòng giải thích về trường hợp sử dụng "không phải là động như chỉ định một cá thể cho biến" :)

Các vấn đề liên quan