1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【PHP】useとrequire_once完全に理解した

Last updated at Posted at 2022-09-29

ある日の公園

カバオ泣く.jpeg

カバお「うわぁーーーーーん」

ウサこ「どうしたの、カバおくん」

カバお「PHPで新しくファイルを作って呼び出したいだけなのにうまくいかないんだァ」

ウサこ「それ、userequire_onceについてちゃんと理解できてる?」

カバお「あ、あ当たり前じゃないか、馬鹿にしないでよ、ウサこちゃん」


どうやらカバおくんは
useとrequire_onceについて正しくを理解していないようです。

useについて

ウサこ「カバおくんはuseについてどういう理解かしら?」

カバお「use宣言をすれば使いたいクラスが使えるようになるんだろォ」

ウサこ「その覚え方だと危険よ、正しくは名前空間などをインポートしたり、エイリアスを作成することができるイメージよ」
ウサこ「具体的にはuseを使うことで、具体的には下記のことが可能なの」

* 名前空間などのエイリアス(別名)を作成
* 名前空間の全て、または一部をインポート
* クラスをインポート
* 関数をインポート
* 定数をインポート

カバお「わわわ分かってるよ、そんなこと。ウサこちゃんはいちいちめんどくさいなァ」

require_onceについて

ウサこ「次はrequire_onceよ、カバおくん、これはどういう理解かしら?」

カバお「PHPではよく外部ファイルを読み込むのに使われているけど、Laravelでは使っていないよね」
カバお「Laravelはuseしているからきっと、使う必要がないんだよ」


外部ファイルを読み込む際に使うrequire_onceですが、laravelでは使われないため、
カバおくんは、useを使えばファイルも読み込めるという勘違いをしているようです。

Laravelはオートロード機能で読んでいる

ウサこ「カバおくん、Laravelでrequire_onceを使わないのは、オートロード機能の恩恵よ」
ウサこ「useで外部ファイルを読み込んでいるということではないの」

カバお「なななんだよオートロード機能って」

ウサこ「composer を使用してライブラリをインストールするとvendor/autoload.phpというファイルが生成されるわよね」
ウサこ「このファイルを一度だけrequireすることで、vendor配下のライブラリをすべて自動的にロードしてくれるの」

カバお「・・・・ほほう」

ウサこ「いちいちrequire_onceしていると骨が折れてしまうので、public/index.phpで事前にファイルを読み込んでいるのよ」
ウサこ「ほら、実際にpublic/index.phpを見て、しっかり記述があるわ」

public/index.php
require __DIR__.'/../vendor/autoload.php';

結論

ウサこ「まとめると、useは名前空間をインポートしているが、外部ファイルを読み込むにはrequire_onceをしなければならない」
ウサこ「Laravelでもautoloadでファイルの読み込みが行われているだけで、裏で外部ファイルを読み込んでいる」

ウサこ「こんな感じかしら」

カバお「いや、こここんなの最初から分かっていたよォ!」

カバオふん.jpeg

ウサこ  。。。( ´ཀ`)ゲロ

1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?