PHP
class

php: class内の変数に外からアクセスするとき

教育用のメモ

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を使用します。

https://www.sejuku.net/blog/27679

<?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の話かな