LoginSignup
3
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-27

教育用のメモ

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

3
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3