みなさんもこんな経験ないですか?
私はあります。
例えばこんな感じです
app/Model/
class UserMoel extends Model
{
$table = 'user';
$a = null;
public __construct()
{
$this->a = 'かめはめ波';
}
public static function getUser($userId)
{
$user = self::query()->where('user_id', $userId)->first();
dd($this->a);
return $user;
}
-----------------------------------
Http/Controller
class user extends Controller
{
public function login()
{
$user = UserModel::getUser(2)
}
}
//出力
かめはめ波
私のコンストラクタが通る認識としてはインスタンスを生成時、つまり
new UserModel
としたときでした。
今回はインスタンスを生成せずにスタティックメソッドを呼び出したにもかかわらず
コンストラクタを通ったのには理由があります。
UserModelのgetUserにある
query()の中でインスタンスを生成しているからです。
プログラムに慣れている人は当たり前に感じるかたもいらっしゃると思いますが
私にはずっと謎でした。
このqueryの中身を辿っていくとインスタンスを生成している箇所がわかります。
Modelのファイル内にてctl + fで
function queryと検索いただくと出てきます。
以下がインスタンスを生成している箇所になります。
public static function query()
{
return (new static)->newQuery();
}
厳密に言えば違うと思うのですが
エンジニア1年目の私にはここまでの理解で限界でした。
もしlaravelのソースレベルで詳しくて優しい方がいらっしゃれば
ご教授いただけると幸いでございます!