プログラミングは面白い

プログラミングの事を中心に色々書いていきます

1つ謎が解けた

昨日投稿した記事の2番の謎が解けました。

2. useを記載しなくても動くのは何故か

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

// 何故これで動くの...?このRouteクラスとgetメソッドはどこから呼ばれてるんだ...?
Route::get('/', function () {
    return view('welcome');
});

ファサードについて

まずこの謎を解くにはファサードと言う機能を知る必要がありました。
Laravelではこのファサードというのが良く出てくるようです。

Route::get
みたいなのがファサードです。

普通、クラスメソッドを呼び出すにはまずクラスのインスタンス化が必要ですよね。

$test = new TestA();
$test -> testmethod();

こんな感じですね。
これをファサードを使用して呼び出すと、こんな感じになります。

TestA::testmethod();

わざわざインスタンス化しないでメソッドを呼び出す事が出来るようです。
便利!
だけど、パッと見どのファイルに書かれてるクラスなのか分かりづらい気もしますね。

で、このファサードの仕組みなのですがまだキャッチアップし切れていません。
config/app.phpエイリアス設定されたクラスはuseを使用しなくてもファサードで呼び出せるようになるようです。
しかも自作も出来ちゃうらしい。
この辺は時間がある時にもう少し調べてみます。

ひとまず、なぜuseを使ってないのにクラスメソッドを呼び出せるか、
そして、どこを見ればそのクラスを呼び出してるのかが分かるようになったので前進ですね。

けど、明示的にuse文を使用した方が良いのか、useなしで記述した方がいいのか、どっちなんだろう?
謎が謎を呼ぶ...

フレームワークは便利だけどこうゆうブラックボックス多くて不安になります。
全部を知る事はたぶん無理だけど、まずは点をたくさん増やして、線にしていくのが良さそうです。

勉強したての頃は脳死で"こうゆうもの"って気にせず使っていたような気がします。
今は色んな事が気になって調べて、ある程度答えを出せるようになったのは成長の証でしょう。

参考URL

【Laravel】ファサードとは?何が便利か?どういう仕組みか? - Qiita
ファサード 6.x Laravel