LoginSignup
10
11

More than 5 years have passed since last update.

どう解決? PHP 7 では、static でないメソッドを静的にコールすることが非推奨

Last updated at Posted at 2016-01-11

以下の内容は
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のシングルトンあたりから何かめんどくさいな・・・・

10
11
1

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
10
11