class Product
{
public $name;
}
$prduct = new Product();
$prduct ->name = 'スパナ';
echo '商品は'.$prduct ->name . 'です。';
上記のような形でショッピングサイトで$prductに商品名を入れて処理を上記で行う場合、
class Product
{
public $name;
}
$prduct = new Product();
$prduct ->name = 'スパナ';
$name = '未設定';
// もし$prduct->nameが設定されてなかったらの分岐
if ($prduct ->name != '')
{
//$nameを$prduct ->nameに入れる
$name = $prduct ->name;
}
修正が出た場合、分岐してある部分を洗い出して修正しなければならない事になります。
逆にフィールドをprivateにした場合を書いてみます。
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() . 'です。';
続いて未設定だった場合の分岐をします。
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()
内に分岐を入れてそこで処理をしています。
テストテスト
テストprivateを出力
変更テスト
もし”100円”など出力があった場合、変数に数値がないものが入った場合などはどうでしょう。
やはりバリゲードが必要になります。
フィールドはprivateにし、隠すものは隠してセットゲットする。というのが基本になります。
それがカプセル化です。