こんにちは。でんすけ(@notgeek_densuke)です。
今回はPHPのクラス変数や関数について。
static、constの扱いとか、
宣言時の書き方とか、
使う時に$が付くのかどうか、とか。
ややこしくてこんがらがりがち。
なのでまとめてみようと思います。
ちなみに、動作はideoneで手軽に確認してます。
確認時のPHPバージョンは7.1.0です。
スポンサーリンク
PHPクラスのメンバ変数(プロパティ)宣言
まずは宣言の仕方。
通常の変数、static、constはそれぞれこんな感じ。
<?php class myclass{ private $world = "hello world"; // OK static $staticworld = "hello static world"; //OK const CONSTWORLD = "hello const world"; // OK } new myclass(); ?>
PHPで通常のメンバ変数(プロパティ)宣言
通常のプロパティ宣言は、
private $world;
のように、アクセス修飾子が必須です。
あるいはvarを付けるか。
ただし、これは古いPHPとの互換性のために残されたもので、publicと同じとみなされます。
通常は、public、protected、privateどれかで宣言すべし。
// OK case public $world = "hello world"; protected $world = "hello world"; private $world = "hello world"; var $world = "hello world"; // error case $world = "hello world";
あ、当然ながら、このコードをそのまま書いたら重複定義になってエラーになるのであしからず。
PHPでstaticメンバ変数(プロパティ)宣言
staticプロパティは、アクセス修飾子が必須じゃないです。
付けてもいいし、付けなくてもいい。
付けない場合はpublicです。
ただし、varはダメ。
// OK case static $staticworld = "hello static world"; //public private static $staticworld = "hello static world"; static private $staticworld = "hello static world"; // error case var static $staticworld = "hello static world"; static var $staticworld = "hello static world";
PHPでconstメンバ変数(プロパティ)宣言
constの場合、$をつけないで宣言します。
$を付けるとエラーになります。
また、staticと同じく、constプロパティは、アクセス修飾子が必須じゃないです。
付けてもいいし、付けなくてもいい。
付けない場合はpublicです。
ただしvar、てめぇはダメだ。
そして、なぜか「const private」のようにconstを先に書くとだめっぽいです。なんでや。
また、変数を大文字で宣言するのが通例っぽいですが、小文字でも大丈夫。
大文字小文字が違うと別物の変数になります。
// OK case const CONSTWORLD = "hello const world"; private const CONSTWORLD = "hello const world"; const constworld = "hello const small world"; // another variable // error case const private CONSTWORLD = "hello const world"; // error!! "private" after "const". const $CONSTWORLD = "hello const world"; // error!! "$" is error
PHPでメンバ変数(プロパティ)を使う
さて、プロパティを宣言したら、次は使い方。
・通常のプロパティは $this->変数名
・staticプロパティは self::$付き変数名
・constプロパティは self::変数名
です。
動作確認はこんな感じ。
<?php class myclass{ private $world = "hello world"; static $staticworld = "hello static world"; const CONSTWORLD = "hello const world"; function __construct(){ print($world . "\n"); // empty $world = "world in function"; print($world . "\n"); // world in function print($this->world . "\n"); // hello world print($this->$world . "\n"); // empty print(self::$staticworld . "\n"); // hello static world //print(self::staticworld . "\n"); // error!! print($this->staticworld . "\n"); // empty print($this->$staticworld . "\n"); // empty print(self::CONSTWORLD . "\n"); // hello const world print($this->CONSTWORLD . "\n"); // empty } } new myclass(); ?>
通常のプロパティの「$this->」をつけ忘れると関数内で宣言された変数だと思って動きます。
その他、書き方を間違えると、ただの空変数だったり、エラー扱いだったりするので注意です。
PHPでconstメンバ関数の呼び出し方
今度は関数の方。
<?php class myclass{ function __construct(){ //test(); // error!! $this->test(); self::test(); //statictest(); // error!! $this->statictest(); self::statictest(); } static function statictest(){ print("static test\n"); } static function test(){ print("test\n"); } } new myclass(); ?>
PHPでstatic関数からのプロパティ呼び出し
static関数からのプロパティ呼び出しは、基本的にはstatic変数しかできない。
<?php class myclass{ private $world = "hello world"; static $staticworld = "hello static world"; const CONSTWORLD = "hello const world"; function __construct(){ self::statictest(); } static function statictest(){ //print($this->world . "\n"); // error!! world is not static print(self::$staticworld . "\n"); // hello static world print(self::CONSTWORLD . "\n"); // hello const world } } new myclass(); ?>
と思ってたけど、意外とconstの変数も呼べたわ。
まとめ
ということで、PHPのメンバ変数、メンバ関数の使い方について確認してみました。
<宣言のしかた>
・通常の変数はアクセス修飾子付きで宣言する
・staticは$付き変数名で
・constは$無し。大文字で定義するのが通例。
<使い方>
・通常のプロパティは $this->変数名
・staticプロパティは self::$付き変数名
・constプロパティは self::変数名
<static関数>
・staticなメンバ関数からは、static、constプロパティのみ使える
てな感じです。
いろいろ、$付けたり付けなかったり、$thisだかself::だか、
ややこしいですが、整理していきましょう。
それではまたー。
コメント
コメントはありません。