use App\Models\Post; によって、Post クラスが使えるようになるのですか?

use はクラスを読み込むのではなく、短縮して書くためのものです。
2022年1月3日
ユーザー

大変、お世話になります。

去年の年末にも、名前空間や use キーワード、ファイルの取り込みについてお尋ねさせて頂きましたが、今回、こちらの動画を見て、また、もやもや感が出て来ましたので、あらためて、質問をさせて頂いております。

前回の質問 : https://dotinstall.com/q/24705 (前回の質問では、頭が混乱しすぎて、何に疑問が湧いているのかがまとまっておらず、意味不明な質問になってしまっていますが、こちらの質問の 12/30 の 17:15 と 21:49 に投稿した箇所をご参照ください。)

前回の質問時は、こちらのサイト( https://qiita.com/7968/items/1e5c61128fa495358c1f#use-%E3%82%AD%E3%83%BC%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6 )の「use キーワードについて」の箇所の、「use キーワードを使うことで、名前空間の全て、または一部をインポート、クラスをインポートできる」という記述にて、「 use は名前空間を読み込むので、 PHP ファイルを読み込む云々に関係なく、その名前空間にあるクラスが読み込める」という理解に至りました。

再度の確認と言いますか、質問なのですが、今回の動画に関しても、

use App\Models\Post;

を記述することで Post クラス をインポートしているので、 App/Models/Post.php を require_once 等でインポートしなくても Post クラスが使えている、という理解で間違いないでしょうか?

と言いますのも、今回、再び、疑問が湧いてきたので、「 PHP で Todo 管理アプリを作ろう クラス編」の「#10 名前空間を設定しよう」の動画を見直してみました。

そちらの動画の index.php の冒頭に、下記のコードがあります。

<?php

require_once(__DIR__ . '/../app/config.php');

use MyApp\Database;
use MyApp\Todo;
use MyApp\Utils;

$pdo = Database::getInstance();

$todo = new Todo($pdo);
$todo->processPost();
$todos = $todo->getAll();

もし、上記の理解で間違いがなければ、

$pdo = Database::getInstance();

については、上部の

use MyApp\Database;

にて Database.php( Database クラス)を取り込んでいるので使えている、ということだと思います。

一方、あれっと思ったのが、

$todo = new Todo($pdo);

の箇所で、こちらは

use MyApp\Todo;

にて取り込めているので、辻褄が合うなと思いきや、

require_once(__DIR__ . '/../app/config.php');

spl_autoload_register にて、 Todo クラスが New された時に Todo.php が取り込まれているので、Todo.php( Todo クラス)を読み込むに当たって、

use MyApp\Todo;

spl_autoload_register がダブっているのではないか、いずれかは不要なのではないか、でも、そんなことはないだろう、とのことから、再び、名前空間と use とファイルの取り込みについて、頭が混乱してしまっています。

今回の動画については、「 use キーワードを使うことで、名前空間の全て、または一部をインポート、クラスをインポートできる」というのが正しいのなら、疑問は解消しますが、後段の「 PHP で Todo 管理アプリを作ろう クラス編」の「#10 名前空間を設定しよう」での疑問点については、どうなのでしょうか?

できるだけ、質問の趣旨をご理解頂けるよう、詳しく書いているつもりですが、もし、意味不明な箇所がありましたら、ご指摘頂ければと思います。

ややこしい質問ですが、宜しくお願い致します。

この回答を見るにはプレミアムプランへの登録が必要です

プレミアムプランとは?

このレッスンの質問と回答(3)