Giúp đỡ về hướng đối tượng trong PHP MVC

Trong các project php mvc, các thuộc tính của đối tượng trong lớp model nên được xây dựng theo kiểu :
[DEAD IMG]

hay tạo một lớp thực thể như java và gọi đối tượng này vào lớp model để xử lý:
[DEAD IMG]

Kiểu thứ nhất bạn nhé.
Với cả bạn thử tìm hiểu về việc xây dựng model trong framework CodeIgniter xem cách thức - tất cả các lớp model được tạo đều thừa kế lớp CI_Model đã có sẵn trong framework.

1 Like

Cám ơn nhé, mình sẽ tìm hiểu thêm

Xin lỗi vì đào mộ nhưng mình có thắc mắc là khi mình gọi save() để lưu lại 1 user thì các thuộc tính không có data sẽ bị mất?
Các thuộc tính không có ví dụ như khi select chỉ select 1 vài trường dữ liệu như id, name, sau đó sửa name và lưu lại. Các thuộc tính không được select ra thì sẽ bị lưu lại là rỗng hoặc null vì trong array properties các trừong đó vẫn tồn tại các key.

Bạn có thể đọc code PHP phía trên, nó thực hiện quét toàn bộ các thuộc tính của Model. Do khi khởi tạo đối tượng, tất cả đều bị cho về empty, thuộc tính nào đã bị flag là edit thì nó sẽ !empty, và khi thực hiện save() sẽ quét lại 1 lần nữa để đảm bảo chỉ update các column đã bị edit.

Trường hợp của bạn là do code chưa chú ý các trường hợp xấu nên mới gây ra update cả empty. Cách giải quyết là tạo một biến lưu các đối tượng (columns) đã bị chỉnh sửa, ngay khi thực hiện set cho đối tượng đó, ta sẽ cho tên đối tượng ấy vào biến đó nhằm xác nhận cho thằng save() biết chính xác bạn cần update đối tượng nào.

Cách này gần giống với áp dụng ORM, tuy nhiên nếu giải quyết tốt sẽ giúp bạn không cần phụ thuộc vào ORM. Được biết ORM rất thuận tiện, tuy nhiên nó rất ảnh hưởng tới performance của ứng dụng. Tìm cách giải quyết tốt trong trường hợp này giúp cải thiện không những performance mà còn cả khả năng scale của app.

Mình cũng chưa xem ORM nhưng theo cách kiểm tra empty bên trên thì trong TH mà những filed khi update empty sẽ ko update. VD ban đầu field url là http://abc, upddate thành “” thì ko update được.

Thì mình mới nói là bạn tạo 1 mảng, khi thực hiện setter sẽ gắn flag vào mảng đó. Lúc save thì lặp 1 vòng kiểm tra biến đó đã thực hiện set chưa, nếu rồi thì update.
Sử dụng:

$$"variable_name"

để reflect trong PHP.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?