2011-01-29 3 views
22

В чем разница между объектом и классом в PHP? Я спрашиваю, потому что, я действительно не вижу смысла для них обоих.Разница между объектом и классом в PHP?

Не могли бы вы рассказать о разнице с хорошим примером?

+1

Классы необходимы в PHP, потому что следует старшую и более статическую ООП парадигмы. В [прототипных языках (JavaScript, Lua)] (http://en.wikipedia.org/wiki/Prototype-based_programming) вам действительно нужны только объекты. Поэтому путаница в необходимости занятий не является необоснованной. – mario

ответ

46

Предполагаю, что у вас есть read the manual на базовом PHP OOP.

Класс, который вы используете для , определяет свойства, методы и поведение объектов. Объектами являются вещи, которые вы создаете вне класса. Подумайте о классе как о проекте , а в качестве фактического здания вы строите, следуя чертежу (классу). (Да, я знаю, что план/строительство аналогия была сделана до смерти.)

// 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(); 

Объектов здесь различны (А и В), но оба они являются объектами MyClass класса. Возвращаясь к аналогии проекта/здания, подумайте об этом, используя тот же план, чтобы построить два разных здания.

Вот еще один отрывок, который на самом деле говорит о зданиях, если вам нужен более буквальный пример:

// 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 обрабатывает объекты так же, как ссылки или дескрипторы, что означает, что каждая переменная содержит ссылку на объект, а не копию всего объекта +1 – kjy112

+4

+1 Очень хороший и педагогический пример! Начинающие часто путают класс и экземпляр (объект). –

+0

У меня есть один вопрос, почему 'private $ number_of_floors = 5;' и 'private $ color;' называются 'Object variables/properties'? 'Public function __construct ($ paint)' называются конструкторами классов. Итак, почему не такие же, как «Конструктор классов», они называются «Переменная/свойства класса» вместо «Объектных переменных/свойств». – codenext