大変、お世話になります。
去年の年末にも、名前空間や 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 名前空間を設定しよう」での疑問点については、どうなのでしょうか?
できるだけ、質問の趣旨をご理解頂けるよう、詳しく書いているつもりですが、もし、意味不明な箇所がありましたら、ご指摘頂ければと思います。
ややこしい質問ですが、宜しくお願い致します。
この回答を見るにはプレミアムプランへの登録が必要です
プレミアムプランとは?