PHP5におけるメンバ変数

この記事はだいぶ前に書かれたものなので情報が古いかもしれません

Cakephp2.0はPHP4系を捨てたっぽいので、メンバ変数がvarからpublicとかに変わってます。

4系の頃はメンバ変数と言ったらvarの一つしかなかった……んだっけ? 確かそうだったと思うんだけど、PHP5になってからは3つくらいに増えました。

じゃあその違いは何かと言うと、どこから参照できるかという違いがあります。

public・・・どこでも使える
protected・・・変数を定義しているクラスとそれを継承するクラスでしか使えない
private・・・自分のクラスでしか使えない

こんな説明で良いのかしら。

publicはvarのときと挙動は一緒です。protectedは、親クラスなどでは使うことができるんですが、新たにオブジェクトを生成して呼び出そうとした場合はエラーになります。privateは親クラスであっても呼び出すことはできないです。

class Sample {
    public $sample_public = 'public';
    protected $sample_protected = 'protected';
    private $sample_private = 'private';
}

class SampleChild extends Sample {
    function test() {
        echo $this->sample_public; //"public"が出力される
        echo $this->sapmle_protected; //"protected"が出力される
        echo $this->sample_private; //エラーになる
    }
}

//オブジェクトを生成する場合
$obj = new SampleChild();

echo $obj->sample_public; //"public"が出力される
echo $obj->sample_protected; //エラーになる
echo $obj->sample_private; //エラーになる

こんな感じですね。状況に応じて使い分けるのが良いですね。

でも面倒な場合はとりあえず全部publicにしちゃう?

Cakephp2.0について書いた記事のまとめ - 日記の間 | あかつきのお宿 2012年04月12日 11:43:03
[...] ・ビューでのヘルパーで変更された部分……の一部 ・PHP5におけるメンバ変数 ・AppControllerを分けたときのhelperやcomponentのマージ [...]
ビューでのヘルパーで変更された部分……の一部 | 日記の間 | あかつきのお宿 2012年07月26日 11:15:05
[...] ↓これがその次回は~ってやつです。 PHP5におけるメンバ変数 [...]
もしかしたら何か関連しているかも?