PHP
クラス
今回も前回に引き続いてクラスについて記載していきたいと思います。
クラス内の静的なメソッドへのアクセスについて
以前にもクラス内の静的なメソッドへのアクセスについて記述しましたが、
今回も再度クラス内のメソッドなどへのアクセス方法について記述していきたいと思います。
単純な静的メンバ変数や静的メンバメソッドの呼び出し
以下のようにするとオブジェクトを作成しなくても
クラス内のメンバ変数やメンバメソッドにアクセスすることができます。
クラス内のメンバ変数やメンバメソッドにアクセスする方法の1つに以下のようにしてアクセスる方法があります。
クラス名::$メンバ変数名
クラス名::メンバメソッド名
<?php
class class01{
public static $var = "111<br>"; //staticの記述を抜くとエラーになります。
public static function func01(){ //staticの記述を抜くと警告になります。
echo "class01内のfunc01<br>";
}
}
echo class01::$var;
class01::func01();
?>
オブジェクトを作成した上での呼び出し
以下のようにしてアクセスする場合は static の記述は入れません。
<?php
class class01{
public $var = "111<br>"; //staticの記述を入れるとエラーになります。
public function func01(){ //staticの記述を入れると警告になります。
echo "class01内のfunc01<br>";
}
}
$obj = new class01();
echo $obj->var;
$obj->func01();
?>
静的なメンバ変数の値の変更
また静的なメンバ変数は以下のように値をちゃんと変えることができます。
クラス内でも 「クラス名::メンバ変数名やメンバメソッド名」のようにすれば静的にアクセスができます。
<?php
class class01{
public static $var = "111<br>";
public static function func01(){
class01::$var = "333<br>";
}
}
echo class01::$var;
class01::$var = "222<br>";
echo class01::$var;
class01::func01();
echo class01::$var;
?>
結果は以下のようになります。
static 宣言していないメンバ変数やメンバメソッドへの静的なアクセス
以下のようにして static宣言していないメンバ変数やメンバメソッドにアクセスしようとするとエラーになる。
<?php
class class01{
public $var = "111<br>";
public function func01(){
echo "class01内のfunc01<br>";
}
}
echo class01::$var;
class01::func01();
?>
これらのことから以下のようなことがわかります。
・static を用いてメンバ変数やメンバメソッドを宣言した場合は、オブジェクトとは別のメモリ上に確保され、いろいろな場所から共有されることになる。
・static を用いてメンバ変数やメンバメソッドを宣言した場合は、オブジェクトで扱うことはできない。
static 宣言していないメンバ変数へのクラス内での静的なアクセス
たとえクラス内から「クラス名::メンバ変数名」のようにアクセスしてもエラーになりアクセスできません。
<?php
class class01{
public $var = "111<br>";
public function func01(){
class01::$var = "222<br>";
}
}
$obj = new class01();
echo $obj->var;
$obj->func01();
echo $obj->var;
?>
static 宣言していないメンバ変数に対してオブジェクト経由でアクセスする場合
static宣言していないメンバ変数の値を変更したいならオブジェクトを作成して、
「$this->メンバ変数名」のようにしてアクセスする必要があります。
<?php
class class01{
public $var = "111<br>";
public function func01(){
$this->var = "222<br>";
}
}
$obj = new class01();
echo $obj->var;
$obj->func01();
echo $obj->var;
?>
static宣言しているメンバ変数に対してオブジェクト経由でアクセスした場合
static 宣言しているメンバ変数に対して $this を使用して値を書き換えようとすると
やっぱり同じようにエラーになります。
<?php
class class01{
public static $var = "111<br>";
public static function func01(){
$this->var = "222<br>";
}
}
echo class01::$var;
class01::func01();
echo class01::$var;
?>
static宣言しているメンバ変数に対してオブジェクト経由でアクセスして値を変える場合
しかし以下のようにすれば static 宣言しているメンバ変数もオブジェクト経由で値を変えることができます。
<?php
class class01{
public static $var = 10;
public function func01(){
class01::$var = class01::$var + 10;
}
}
$obj = new class01();
echo class01::$var."<br>";
$obj->func01();
echo class01::$var."<br>";
?>
結果は以下のようになります。

[styled_images width=”300″ height=”250″]
[image title=”ブラウザ確認画像”]https://techpjin.sakura.ne.jp/techpjin_new/wp-content/uploads/2013/08/class_static8.png[/image]
[/styled_images]
[clearboth]
これらのことから以下のようなことがわかります。
・static宣言したメンバ変数やメンバメソッドに対しては、::(スコープ演算子)を使った静的なアクセスをする必要がある。
・static宣言していないメンバ変数やメンバメソッドに対しては、$this を使ってアクセスをする必要がある。
・static宣言したメンバ変数などもオブジェクト経由で静的にアクセスすれば値を変えることができる。
今回はここまでで次回からもクラスについて記載していきたいと思います。






