はじめに
PHPのオブジェクト思考について学習している際に、static修飾子の挙動がわかりづらかったので調べました。(自分メモ)
アクセス修飾子
アクセス修飾子としてよく使われるものは3つ。
- public・・・どこからでもアクセス可能
- private・・・同じクラス内からアクセス可能
- protected・・・クラス内とクラスを継承した子クラスからアクセス可能
static修飾子とは
・あるクラスの全てのオブジェクトが一つの変数を共有したい時にグローバル変数を使わずに共有可能。
・クラスのインスタンスを生成することなく(つまりnewせずに)、staticで定義されたプロパティやメソッドを利用できる。
animal.php
//動物クラスを定義
class Animal {
public $name;
public static $category = "動物";
}
$cat = new Animal();
$cat->name = "ネコさん";
$dog = new Animal();
$dog->name = "イヌさん";
echo $cat->name; //ネコさん
echo $cat::$category; //動物
echo $dog->name; //イヌさん
echo $dog::$category; //動物
// newしなくても使える
echo Animal::$category; //動物
上記の$cat::$category;
は$dog::$category;
はインスタンスとして静的プロパティを用いているが、Animal::$category;
はインスタンスを生成せずにプロパティを用いることができている。このようにオブジェクトのインスタンスを生成せずに呼び出すことができる。
このため、擬似変数$thisは、staticとして宣言されたメソッドの中から呼び出すことはできない。