PHP オブジェクトのプロパティ(property)
プロパティ
プロパティ
- プロパティ は オブジェクトに関連付いたデータ(クラス内変数)
では、 クラス に プロパティ を設定してみましょう。プロパティ は「オブジェクトに関連付いたデータ」です。クラス内変数のようなものです。変数なので、名前と値があります。プロパティ の宣言で、変数名と初期値を決めることができ、変数名だけ決めておいて値を後から代入することもできます。また、変数名も値も決めずに プロパティ を宣言することも可能です。
プロパティ には アクセス権(可視化)の設定が3種類(public/private/protected)あります。アクセス修飾子 と言います。これらのキーワードでアクセス権を表現します。プロパティ を宣言する際、アクセス権の明示が必要です。public は誰でもアクセスが可能で制限がありません。private/protected にはアクセスに制限があります。順次説明します。
- public:クラス外からのアクセス可
- private:同クラス内の メソッド からのアクセス可
- protected:同クラス内と継承先クラスの メソッド からのアクセス可
プロパティの宣言
以下の例では、 $maker と $color の プロパティ を宣言しています。$maker には初期値として Pioneer を設定しており、 $color の初期値はありません。この場合 $color は NULL となります。アクセス修飾子 を public としています。アクセス権を指定しないとエラーになります。
1 2 3 4 5 6 7 8 9 10 11 | <?php //クラス定義 class optical_drive{ //プロパティの宣言 public $maker = 'Pioneer'; public $color; } //インスタンス化 $obj = new optical_drive; var_dump($obj); ?> |
インスタンス の内容を ver_dump で確認すると プロパティ "maker" に 文字列 "Pioneer" が設定されています。プロパティ "color" は NULL となっています。次のように public $color = ''; 初期値を設定すれば NULL になりません。
※初期値として設定できるのは、単純な定数値です。 public $int = 100 * 100; のような形では動作しません。
宣言しないプロパティ
上記の例では、プロパティ $maker を 明示的に public $maker = 'Pioneer'; と宣言しましたが、宣言しなくても新規プロパティの追加は可能です。
1 2 3 4 5 6 7 8 9 | <?php //クラス定義 class person {} //インスタンス化 $obj = new person(); //プロパティの追加 $obj->name = 'ウェピックス太郎'; var_dump($obj); ?> |
personクラス では何も宣言していない状態で、nameプロパティ に値を代入しています。var_dump で確認すると name プロパティ が作成されており、 ウェピックス太郎 という値が代入されています。
プロパティの呼び出し
プロパティ を呼び出す(参照する)には キーワード ->(アロー演算子) を使用します。
1 2 3 4 5 6 7 8 9 10 11 | <?php //クラス定義 class optical_drive{ //プロパティの宣言 public $maker = 'Pioneer'; } //インスタンス化 $obj = new optical_drive; //->でプロパティの呼び出し echo $obj->maker; ?> |
プロパティ を呼び出して echo で出力しました。
スタティックプロパティ
インスタンス化された オブジェクト の プロパティ だけでなく、クラス自身に変数を持たせてアクセスすることも出来ます。これを スタティックプロパティ(静的プロパティ) と言います。クラス の スタティックプロパティ にアクセスするには「::(スコープ定義演算子)」を使用します。
1 2 3 4 5 6 7 8 | <?php //クラス定義 class christianity { static $bible = '聖書'; } //プロパティの呼び出し echo christianity::$bible; ?> |
private や protected のメソッドを通してアクセス可
プロパティ のアクセス権 private や protected は継承で詳しく説明しますが、同クラス内のメソッドを通して操作することが出来ます。
直接アクセスするとエラーになります。$this は インスタンス 自体を示す特別な変数です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php //クラス定義 class car{ //プロパティの宣言 private $maker; protected $color; //メソッド function set_property($maker, $color){ $this->maker = $maker; $this->color = $color; } } //インスタンス化 $obj = new car; //$obj->maker = 'TOYOTA';//エラー //echo $obj->maker;//エラー $obj->set_property('TOYOTA', 'ブラック'); var_dump($obj); ?> |
クラス名やインスタンス名を変数に代入して呼び出し
クラス名 を変数に代入して キーワード new + 変数 の形で インスタンス化 させることも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php //クラス定義 class optical_drive{ //プロパティの宣言 public $maker = 'Pioneer'; } //クラス名を変数に代入 $device = "optical_drive"; //インスタンス化 $obj = new $device; //プロパティの呼び出し echo $obj->maker; ?> |
インスタンス名 を変数に代入して 変数-> の形で インスタンス化 させることも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php //クラス定義 class optical_drive{ //プロパティの宣言 public $maker = 'Pioneer'; } //クラス名を変数に代入 $device = "optical_drive"; //インスタンス名を変数に代入 $objName = "obj_device"; //インスタンス化 $obj_device = new $device; //プロパティの呼び出し echo ${$objName}->maker; ?> |
タグ(=記事関連ワード)
日付
最終更新日: