はじめに
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);
}
}
子クラスにコンストラクタがある場合宣言しないと親クラスのコンストラクタはコールされないらしい