Tôi cần tạo khoảng. 5-7 lớp, mỗi lớp sẽ chứa rất nhiều thành viên (chúng ta hãy nói mỗi lớp sẽ chứa 20 thành viên). Tôi có thể tạo chúng bằng cách sử dụng quyền truy cập công cộng, như:PHP OOP rất nhiều người định cư, getters
class A {
public $myPropertyOne = '';
public $myPropertyTwo = '';
...
}
Cách ưa thích của khóa học để làm cho các thành viên này riêng tư và tạo phương thức get/set cho từng thuộc tính. I E.
class A {
private $myPropertyOne = '';
private $myPropertyTwo = '';
public function getMyPropertyOne() {
return $this->myPropertyOne;
}
public function setMyPropertyOne($myPropertyOne) {
$this->myPropertyOne = $myPropertyOne;
}
public function getMyPropertyTwo() {
return $this->myPropertyTwo;
}
public function setMyPropertyTwo($myPropertyTwo) {
$this->myPropertyTwo = $myPropertyTwo;
}
}
Nhưng xem xét một lớp học sẽ có 20 thuộc tính, tôi sẽ bổ sung thêm 40 phương pháp này. Và mối quan tâm của tôi ở đây là làm thế nào điều này sẽ làm chậm kịch bản và bộ nhớ nhiều hơn nữa điều này sẽ yêu cầu (nhớ tôi sẽ có một số lớp học như thế này).
Một giải pháp khác có thể là sử dụng các hàm ma thuật __set, __get nhưng tôi không muốn, vì việc hoàn thành mã trong phát triển IDE sẽ không đề xuất các thuộc tính quan trọng đối với tôi.
Nếu đây là ngôn ngữ biên dịch (như C++), tôi sẽ không có câu hỏi và sử dụng giải pháp với getters, setters nhưng vì ngôn ngữ PHP được hiểu là tôi quan tâm đến kịch bản của mình sử dụng ít RAM hơn nhanh nhất có thể.
Xin cảm ơn trước, mọi suy nghĩ về câu hỏi này sẽ được nhiều người đánh giá cao!
Ý kiến của tôi
Cảm ơn tất cả các bạn cho câu trả lời của bạn, tôi chỉ muốn chia sẻ ý kiến của tôi trong trường hợp ai đó sẽ tìm kiếm một câu trả lời cho câu hỏi này.
Tôi hoàn toàn không đồng ý với những người nói rằng bạn không nên quan tâm đến hiệu suất vì đây là nhiệm vụ của trình tối ưu hóa, tôi nghĩ đây là yếu tố quan trọng (ít nhất là đối với tôi), khi chúng tôi đang xử lý ngôn ngữ thông dịch như PHP chúng ta sẽ luôn phải suy nghĩ về bộ nhớ và tốc độ (tất cả điều này nhắc nhở tôi về thời gian khi tôi đang phát triển các ứng dụng hệ thống cho DOS, heh :) và bạn luôn bị giới hạn với CPU và kilobyte của RAM, vì vậy bạn sẽ vui nếu bạn có thể lưu thêm một byte), trong PHP phát triển bạn có cùng một hình ảnh như bất kể có bao nhiêu máy chủ bạn thêm, số người dùng sẽ luôn cao hơn để bạn luôn phải quyết định xem bạn có muốn theo phương thức cổ điển/an toàn/thích hợp hay không để tránh điều này và tăng tốc độ hoặc bộ nhớ. Vì vậy, .... ý kiến của tôi là cách tốt nhất ở đây là sử dụng truy cập công cộng cho tất cả thành viên và tránh getters/setters cho tất cả các thuộc tính và sử dụng truy cập riêng với get/set phương pháp cho các thuộc tính yêu cầu xác thực dữ liệu hoặc khởi tạo trước khi giá trị được đặt.
Ví dụ:
class B {
public $myPropertyOne = '';
public $myPropertyTwo = '';
private $myPropertyThree = array();
public function getMyPropertyThree() {
return $this->myPropertyThree;
}
public function setMyPropertyThree($val) {
if(!is_array($val)) {
return;
}
$this->myPropertyThree = $val;
}
}
Cảm ơn bạn đã dành thời gian vào câu hỏi của tôi!
đây là tối ưu hóa vi mô, và bạn nên * không bao giờ * lo lắng về nó. –
Vâng, vâng, một viễn cảnh để thêm 280 phương pháp (cho 7 lớp học, 20 thành viên riêng) chỉ cho điều này một chút sợ tôi từ bộ nhớ/tốc độ standpoint.Và hãy nói hệ thống phát triển và tôi sẽ mở rộng các lớp học với số lượng 15 .. sau đó tôi sẽ nhận được 600 phương pháp. phía bên kia tôi nhận ra rằng các phương thức get/set này sẽ được thực thi chỉ khi cần nhưng đồng thời tôi giả định rằng khi PHP phân tích mã nguồn, nó sẽ xây dựng một bảng các phương thức trong bộ nhớ, sẽ thực hiện phân tích cú pháp và tất cả điều này có thể làm chậm công việc của kịch bản rất nhiều, là giả định của tôi phải không? – user1476490
Bộ nhớ là tương đối rẻ và phương thức chi phí trên mỗi lớp (không phải cho mỗi trường hợp). PHP cũng thực hiện các thủ thuật như xử lý nhiều yêu cầu trong cùng một quá trình (qua mod_php, vv) để thời gian tải ban đầu (tầm thường như nó có thể) có thể bị bỏ qua hoàn toàn ... trong mọi trường hợp, * điểm chuẩn đầu tiên * (trong điều kiện thực tế) để xem phần "chậm" của hệ thống là gì. (FWIW, giả định rằng có 600 phương pháp, và mỗi phương pháp "lãng phí" 1kb. Một whopping 600kb là "lãng phí". Không thực sự nhiều trong kế hoạch của sự vật ... đặc biệt là xem xét bao nhiêu * mỗi biến * trong PHP đã " chất thải ";-) –