Sử dụng toàn cầu làm cho mã của bạn khó kiểm tra do đó dễ bị lỗi hơn, không an toàn và không thể đoán trước. Đó là lý do tại sao chúng ta truyền các biến mà chúng ta muốn bên trong một hàm / đối tượng. Vì vậy, câu hỏi của tôi rất đơn giản:
$ _POST, $ _GET, v.v có vi phạm nguyên tắc đóng gói không?
Tôi nghĩ rằng, để duy trì quyền kiểm soát các biến đó theo cách OO, một giải pháp lý tưởng sẽ là thêm một số dòng như thế này vào mã:
// Convert the $_GET array to an object
$get = json_decode(json_encode($_GET), FALSE); // stackoverflow.com/a/1869147
// Stop it from being included from anywhere
unset($_GET);
// Small example of what could be done later on
$DB = new PDO(/* ... */);
$Person = new Person($DB, $get->id);
Tôi chưa thấy điều này ở bất cứ đâu, thậm chí không có hướng dẫn cũng như khuyến nghị. Ngoài ra, chúng ta có thể thấy rõ cách mã ở trên dễ kiểm tra hơn nhiều so với mã bao gồm $Person = new Person($DB, $_GET['id']);
hoặc thậm chí (xấu xí) $Person = new Person($DB);
khi bạn có thể sử dụng một $get
đối tượng giả .
Là mã ở trên đúng hướng hay tôi đang thiếu một cái gì đó?
EDIT: Sau một số cuộc điều tra ( khung Zend và Cake PHP ) như Alexander Kuzmin đề xuất, có vẻ như đó là điều đúng đắn. Chúng có thể quá lớn đối với tôi để đào sâu vào mã ATM, nhưng tôi sẽ ghi nhớ nó.