LoginSignup
0

More than 5 years have passed since last update.

【PHP】抽象クラスで地味につまづいた

Last updated at Posted at 2018-12-10

はじめに

PHPの抽象クラスを使っていて地味につまづいたのでログとして残しておく

内容


abstract class BaseBar
{
    protected $model;

    public function __construct()
    {
        $this->model = new Model();
    }

    protected function foo(int $id)
    {
        var_dump($this->model);//null
    }
}

class Bar extends BaseBar
{
    public function __construct()
    {
    }

    public function index($id)
    {
        $this->foo($id);
    }
}

こんな感じで抽象クラス内で別クラスをインスタンス化したところ、nullに。


abstract class BaseBar
{
    public function __construct()
    {
    }

    protected function foo(int $id, $model)
    {
        var_dump($model);//object
    }
}

class Bar extends BaseBar
{
    public function __construct()
    {
    }

    public function index($id)
    {
        $model = new Model();
        $this->foo($id, $model);
    }
}


abstract class BaseBar
{
    public function __construct()
    {
    }

    protected function foo(int $id)
    {
        $model = new Model();
        var_dump($model);//object
    }
}

class Bar extends BaseBar
{
    public function __construct()
    {
    }

    public function index($id)
    {
        $this->foo($id);
    }
}

これはOKみたいでした。
なんでnull?

少しググり進めたらすぐに解決した


abstract class BaseBar
{
    protected $model;

    public function __construct()
    {
        $this->model = new Model();
    }

    protected function foo(int $id)
    {
        var_dump($this->model);//object
    }
}

class Bar extends BaseBar
{
    public function __construct()
    {
        parent::__construct();
    }

    public function index($id)
    {
        $this->foo($id);
    }
}

子クラスにコンストラクタがある場合宣言しないと親クラスのコンストラクタはコールされないらしい

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
0