教育用のメモ
static
https://www.sejuku.net/blog/23753
しかし、クラスのインスタンスを生成しなくても、クラスのメンバにアクセス可能なメンバのことを静的(static)メンバと呼びます。
class直なら
言語によってはクラスメンバと言う場合もあります。その際、メソッドの場合はクラスメソッド、プロパティをクラス変数などと呼びます。
instanceで作ったら
その場合、逆に普通のメソッドやプロパティのことを、インスタンスメソッド、インスタンス変数などとも言います。
classはインスタンス化して使うのが基本
なので、 普通=インスタンスでアクセス
という考え方がベースのベース
逆に静的なメンバは、クラスのインスタンスから参照するときに使用する矢印演算子->によるアクセスはできません。
static変数はclass/インスタンスから ::
でアクセスできるが、非staticはclass/インスタンスともにアクセスできない。
staticを呼ぶ例
<?php
class SampleClass
{
//プロパティの宣言
//class/インスタンスから :: で参照ok
public static $var = 'This is Sample Class.';
// インスタンス必須
public $var2 = 'This is Sample Class.';
}
//インスタンスの生成
$ins= new SampleClass();
echo "class direct\n";
echo SampleClass::$var;
echo "instanceから\n";
echo $ins::$var;
echo "\n--------------\n";
echo "staticはinstance変数ではとれない\n";
echo $ins->var; // error
echo $ins->var2; // staticじゃないのはとれる
インスタンスで使ってる時にstatic変数が必要になったら、::
を使う。 ->
はエラーになる。
constはclass内でしか宣言できない
なお、変数や配列などをクラス内で定数化したい場合はconstを使用します。
<?php
class ConstClass
{
//定数を定義する
const FRUITS1 = 'apple';
}
echo ConstClass::FRUITS1;
インスタンスからは ::
で使う
<?php
class ConstClass
{
//定数を定義する
const CONSTSTR1 = 'Samurai';
}
echo ConstClass::CONSTSTR1; // Samurai
$ins= new ConstClass();
echo $ins::CONSTSTR1; // Samurai
echo $ins->CONSTSTR1; // これはエラー
constにはstaticが不要。
あとpropertyの話かな