以下の内容は
1 [静的メソッド]と
2 [静的にコール]を
ゴッチャに理解した上での記事になってますので、忘れてください。(というか個人的メモとして残しておきます。)
http://php.net/manual/ja/language.oop5.static.php
PHP 7 では、static でないメソッドを静的にコールすることが非推奨になりました。 E_DEPRECATED レベルの警告が発生します。 将来的にはサポートされなくなる見込みです。
じゃあ、どうするの?
static.php
<?php
//01 警告対象
class AA{
public $data;
function __construct(){
$this->data = "data aa";
}
function getdata(){
echo $this->data;
}
}
$aa = new AA();
$aa->getdata(); //これが警告対象
//02 静的プロパティ,静的メソッドにしないとね。
class BB{
public static $itijidata = "bb";
static public function get_itijidata(){
echo self::$itijidata;
}
}
BB::get_itijidata();
//03 静的プロパティ,静的メソッド and インスタンスプロパティ、インスタンスメソッドが混在する場合
class CC{
public static $itijidata = "cc";
private $data;
function getdata(){
$this->data = "ccdata";
}
static public function get_itijidata(){
echo self::$itijidata;
// インスタンス プロパティにアクセスするには new する
$d = new self;
$d->getdata();
echo $d->data;
}
}
CC::get_itijidata();
//04 new 1回で済むようにシングルトンパターンに
class DD{
public static $itijidata = "dd";
private static $instance;
private $data;
function getdata(){
$this->data = "dddata";
}
static function getInstance()
{
if (self::$instance == null) {
self::$instance = new self();
}
return self::$instance;
}
static function get_itijidata(){
echo self::$itijidata;
// 複数回 new しないようにシングルトンにする
$d = self::getInstance();
$d->getdata();
echo $d->data;
}
}
DD::get_itijidata();
?>
参照
http://qiita.com/mpyw/items/41230bec5c02142ae691
静的メンバ
http://www.objective-php.net/basic/static
これ以外の方法があるのか、これがベストかはわからないが
04のシングルトンあたりから何かめんどくさいな・・・・