2011-01-29 10 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(); 

オブジェクトは、(AとB)異なっているが、彼らはMyClassクラスの両方のオブジェクトです。青写真/建築のアナロジーに戻って、同じ青写真を使って2つの異なる建物を建てると考えてください。ここで

は、あなたがより多くのリテラルの例が必要な場合は、実際の建物について語っ別の抜粋です:それは古いとより静的OOPのパラダイムに従っているため

// 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;'を 'オブジェクト変数/プロパティ'と呼んでいます。 'public function __construct($ paint)'は 'クラスコンストラクタ'と呼ばれます。ですから、なぜ 'Class constructor'と同じではないかは、' Object variables/properties'ではなく 'Class variable/properties'と呼ばれています。 – codenext

関連する問題