※このページはデザインラボの技術のために掲載を行っております。

掲載してある内容は実験的な要素を含みますので、何卒ご理解ください。



プログラムを組む上でオブジェクト指向で組むことが求められていますので、 解説しながら書いてみます。
ざっくり書くと変数を持てるクラスの集合体です。

基本のクラス

<?php
class Product {
}
?>

クラスの定義にはまずはclassの後に好きなクラス名を記述します。

そして始まりと終わりには{}中括弧brace で閉じまます。
次に変数を中に設定します。


サンプルとして商品をクラスで登録してみます。

<?php
class Product {
private $name; // 商品名
private $price; // 価格
}
?>

商品には名前と価格がありますので、最初に変数を宣言してみます。
この変数はフィールド・メンバ変数とも呼びます。
最初にprivateという修飾子を書いていますが、これはスコープになります。

次に処理を書きます。これは関数でメソッドと言います。

<?php
class Product {
private $name; // 商品名
private $price; // 価格

// 商品名を取得する
   public function getName()
  {
   return $this->name;
  }
// 商品名を設定する
   public function setName($name)
  {
   $this->name = $name;
  }
}
?>

メソッドはユーザー関数と同じ様に書きますが、ここではpublicという文字が付いています。
これは修飾子で、フィールド(メンバ変数)のprivateと同じで外部から見れるかどうかを意味します。
publicは外部からアクセスが可能なという意味です。
またメンバ変数でvar を使ってアクセス権を明示せずに宣言した場合、 そのプロパティは public として定義されます。 参照>アクセス権

メソッド(関数)の中に$thisというのはクラス自信のメンバ(フィールド)を指します。

そしてその後の->はアロー演算子といい、クラスのメンバにアクセスする場合に使います。
$this->name で [ Productクラス自身の$nameの値 ] という意味になります。
注意点は->の後は$が省略されるという点です。

クラスの基本構造はこれだけです。
値を持つフィールドと処理するメソッドです。
そしてそれぞれ外部からアクセス可能にするかを設定するという事になります。

次に実際に使ってみます。 クラスだけは何も意味も持ちません。
これを元に実態を作ります。
オブジェクトの設計図はクラス
オフジェクトの実体はインスタンスになります。

<?php
$product = new Product();
?>

予め クラスが作られていれば、
new クラス名() でクラスのインスタンスが作られます。
上記では$product が実体になります。

<?php
// クラスを定義
class Product {
private $name; // 商品名
private $price; // 価格
// 商品名を取得する
   public function getName()
  {
   return $this->name;
  }
// 商品名を設定する
   public function setName($name)
  {
   $this->name = $name;
  }
}
//インスタンスを作る
$product= new Product();
// 商品名を設定
$product->setName("のこぎり");
// 商品名を取得
$productName = $product->getName();
var_dump($productName);
?>

実行結果
object(Product)#1 (2) { ["name":"Product":private]=> string(12) "のこぎり" ["price":"Product":private]=> NULL }

説明するとインスタンス(実体)を作ると、それぞフィールドが用意されます。
そして値を投げてreturnで戻るという形です。

つまりクラスが設計図なので、インスタンスは複数作れることになります。
試してみます。
上記のインスタンスを作る部分を増やしてみます。


$product01 = new Product();
$product02 = new Product();
$product01->setName("のこぎり");
$product02->setName("ハンマー");
var_dump($product01);
var_dump($product02);

object(Product)#2 (2) { ["name":"Product":private]=> string(12) "のこぎり" ["price":"Product":private]=> NULL }
object(Product)#3 (2) { ["name":"Product":private]=> string(12) "ハンマー" ["price":"Product":private]=> NULL }
ここで分かるように、それぞれインスタンスは別々に値を持てるということです。