メンバ変数をprivateにすることで、生成したインスタンスのプロパティに直接アクセスさせない。
下記みたいにプロパティにアクセスして表示させたりしていると、この変数に対して何か加工をしようとした時に、表示させているすべての箇所をテストしたり、修正する必要が出てくるかもしれない!
$obj = new Product($data); echo $obj->name; // プロパティにアクセスできちゃうの?
- メンバ変数を表示させたい場合は、getName()など、表示させる用の関数にしておくと良い。
- そうすればgetName()関数を修正するだけで全体の修正が出来る。
Product.class.php
<?php class Product { private $name; public function __construct($name) { $this->name = (string) $name; } public function getName() { return $this->name; } }
index.php
<?php require_once 'Product.class.php'; $data = "おこめ"; $obj = new Product($data); echo $obj->getName();
/demo/Design-Pattern-Primer-by-PHP/Encapsulation/