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

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


クラス化・オブジェクト指向ではカプセル化という概念が出てきます。
これはどういう事か?と最初は悩むと思いますが、実際に解説してみます。
簡単に説明するとクラス外からの利用を制限し、修正を最低限に抑えるという事です。

クラス内のフィールド(メンバ変数)や処理(メソッド)は修飾子でアクセス制限をできます。
この制限はなぜするのかという事にもつながります。
実際にコードを書いてみます。


<?php
class Product
{
public $name;
}
$prduct = new Product();
$prduct ->name = 'スパナ';
echo '商品は'.$prduct ->name . 'です。';
?>


良くある処理ですが、商品名が無い場合は未登録という分岐させて処理を行わないとならない場合出た場合。


<?php
class Product
 {
  public $name;
 }
$prduct = new Product();
$prduct ->name = 'スパナ';
$name = '未設定';
// もし$prduct->nameが設定されてなかったらの分岐
if ($prduct ->name != '')
{
//$nameを$prduct ->nameに入れる
  $name = $prduct ->name;
}
?>

もし上記のような書き方で構築したら修正が出た場合、分岐してある部分を洗い出して修正しなければならない事になります。
逆にフィールドをprivateにした場合を書いてみます。

<?php
class Product
{
private $name;
public function setName($name)
 {
 $this->name $name;
 }
 public function getName()
 {
 return $this->name;
 }
}

$prduct = new Product();
$prduct->setName('スパナ');
echo '商品は'.$prduct->getName() . 'です。';
?>

続いて未設定だった場合の分岐をします。

<?php
class Product {
private $name;
public function setName($name)
{
$this->name $name;
}
public function getName()
  {
     if ($this->name == ''){ 

     return '未設定';  
     } else {
     return $this->name;
     }
  }
}

$prduct = new Product();
$prduct->setName('スパナ');
echo $prduct->getName() ;
?>

public function getName() 内に分岐を入れてそこで処理をしています。

こうする事で、クラスの一箇所を変更するだけ全てのコードを修正する事ができます。

ここで、var を使うケースも有るので、テストしてみます。

<?php
class test {
var $name1 = "テスト";
public $name2 = "テスト";
private $name3 = "テスト";
public function getName()
{
echo $this->name3."privateを出力";

}

}
$test = new test();
echo $test->name1;
echo $test->name2;
//echo $test->name3; ←これはエラーになります。
echo "<br>";
$test->getName();
$test->name1 = "変更テスト";
echo "<br>";
echo $test->name1;
//$test->name3 = "変更テスト";//←これはエラーになります。

?>


テストテスト
テストprivateを出力
変更テスト
ただ、 これだけはで別にvarやらpublicにする必要ないと思われる人もいるかもしれません。

C#や.netなどキャラクタ(変数)に厳密な言語だと当たり前な違う型があった場合なども追記してみます。
もし”100円”など出力があった場合、変数に数値がないものが入った場合などはどうでしょう。

やはりバリゲードが必要になります。

フィールドはprivateにし、セットゲットする。というのが基本になります。