2011-01-29 67 views
22

Sự khác nhau giữa Object và Class trong PHP là gì? Tôi hỏi bởi vì, tôi không thực sự thấy điểm cho cả hai.Sự khác nhau giữa đối tượng và lớp trong PHP?

Bạn có thể cho tôi biết sự khác biệt với ví dụ tốt không?

+1

Lớp học là cần thiết trong PHP vì nó theo mô hình OOP cũ và tĩnh hơn. Trong [ngôn ngữ dựa trên nguyên mẫu (JavaScript, Lua)] (http://en.wikipedia.org/wiki/Prototype-based_programming), bạn thực sự chỉ cần các đối tượng. Vì vậy, sự nhầm lẫn về sự cần thiết cho các lớp học không phải là vô lý. – mario

Trả lời

46

Tôi giả sử bạn có read the manual trên OOP PHP cơ bản.

Lớp học là những gì bạn sử dụng để xác định các thuộc tính, phương pháp và hành vi của các đối tượng. Đối tượng là những thứ bạn tạo ra trong số một lớp. Hãy nghĩ về một lớp với tư cách là kế hoạch chi tiết và một đối tượng là tòa nhà thực tế bạn xây dựng bằng cách làm theo kế hoạch chi tiết (lớp). (Vâng, tôi biết sự tương tự kế hoạch chi tiết/tòa nhà đã được thực hiện cho đến chết.)

// Class 
class MyClass { 
    public $var; 

    // Constructor 
    public function __construct($var) { 
     echo 'Created an object of MyClass'; 
     $this->var = $var; 
    } 

    public function show_var() { 
     echo $this->var; 
    } 
} 

// Make an object 
$objA = new MyClass('A'); 

// Call an object method to show the object's property 
$objA->show_var(); 

// Make another object and do the same 
$objB = new MyClass('B'); 
$objB->show_var(); 

Đối tượng ở đây là khác biệt (A và B), nhưng họ đều là những đối tượng của lớp MyClass. Quay trở lại bản thiết kế/xây dựng tương tự, hãy nghĩ về nó như sử dụng bản thiết kế tương tự để xây dựng hai tòa nhà khác nhau.

Dưới đây là một đoạn mà thực sự nói về các tòa nhà nếu bạn cần một ví dụ đen hơn:

// Class 
class Building { 
    // Object variables/properties 
    private $number_of_floors = 5; // Each building has 5 floors 
    private $color; 

    // Constructor 
    public function __construct($paint) { 
     $this->color = $paint; 
    } 

    public function describe() { 
     printf('This building has %d floors. It is %s in color.', 
      $this->number_of_floors, 
      $this->color 
     ); 
    } 
} 

// Build a building and paint it red 
$bldgA = new Building('red'); 

// Build another building and paint it blue 
$bldgB = new Building('blue'); 

// Tell us how many floors these buildings have, and their painted color 
$bldgA->describe(); 
$bldgB->describe(); 
+4

PHP xử lý các đối tượng theo cách tương tự như tham chiếu hoặc xử lý, có nghĩa là mỗi biến chứa tham chiếu đối tượng chứ không phải là bản sao của toàn bộ đối tượng +1 – kjy112

+4

+1 Ví dụ rất tốt và sư phạm! Người mới bắt đầu thường nhầm lẫn giữa lớp và cá thể (đối tượng). –

+0

Tôi có một câu hỏi tại sao «private $ number_of_floors = 5;' và 'private $ color;' được gọi là 'Object variables/properties'? 'Public function __construct ($ paint)' được gọi là 'Class constructor'. Vì vậy, tại sao không giống như 'Class constructor' chúng được gọi là' Class variable/properties' thay vì 'Object variables/properties'. – codenext

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