staticとは
通常クラスの中で定義した変数(プロパティ)やメソッドを呼び出すためにはインスタンスを生成する必要がある。
元々存在しないものを生み出すのでdynamig(動的)なメソッド・プロパティ。
一方、static(静的)では、インスタンスを生成せずクラスを直接指定して、変数やインスタンスを呼び出せるメソッド・プロパティのこと。
名称
動的(dynamic)な変数
インスタンスごとに管理されるため、
・インスタンス変数
と呼ばれる
静的(static)な変数
各インスタンスで異ならないもの。
・static変数
・クラス変数
と呼ばれる
staticのメリット
アプリケーションの中で複数回登場する関数やプロパティを定義するときに使え、staticはそのクラスを呼びした場合のみ使えるため、
プロパティ名やメソッド名が被りそうな場合や、ある特定の目的のプロパティをメソッドまとめる場合に使うと、処理がまとまるという利点がある。
→static変数を変更した場合、すべてのインスタンスに変更が反映される
staticの使用例
<?php
class TestClass
{
public $name = "名前";
public static $staticname = "staticな名前";
}
//クラスの外部で呼び出し
echo TestClass::$staticname;
// "staticな名前が表示
echo TestClass::$name;
// インスタンスを生成していないのでエラー
次に実際にインスタンス化を行って例を示す。
// 人間クラスを定義
class Human {
// メンバ
public $name; // 「名前」というインスタンス変数
public static $family = ""ヒト科""; // 「科」というstatic変数/クラス変数
}
// 「名前」が青木という人間
$aoki = new Human();
$aoki->name = ""青木"";
// 「名前」が山田という人間
$yamada = new Human();
$yamada->name = ""山田"";
// static変数はクラスから直接呼び出せます!
echo Human::$family.PHP_EOL; // ヒト科
// それぞれのインスタンについて確認してみましょう!
echo $aoki->name.PHP_EOL; // 青木
echo $aoki::$family.PHP_EOL; // ヒト科
echo $yamada->name.PHP_EOL; // 山田
echo $yamada::$family.PHP_EOL; // ヒト科
// static変数を変更してみると、クラスとすべてのインスタンスで共有しているので、全部に影響します!
Human::$family = ""哺乳類"";
echo Human::$family.PHP_EOL; // 哺乳類
echo $aoki::$family.PHP_EOL; // 哺乳類
echo $yamada::$family.PHP_EOL; // 哺乳類