Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

教育用のメモ

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away