質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

1回答

366閲覧

インポートの有効範囲について

newyee

総合スコア213

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2019/03/26 09:18

PHPを学習している際、名前空間のインポートの部分で、分からない部分があった為、お聞きしたいです。
インポートの有効範囲はファイル単位という部分で、以下の2つの「use_include.php」はエラーとなるとのことなのですが、ファイル名が同じなため少し混乱してしまっている部分があります...

php

1<?php 2 3print MyClass::showClass();

php

1<?php 2 3require_once './wings/selfphp/chap10/MyClass.php'; 4 5use wings\selfphp\chap10\MyClass; 6 7require_once 'use_include.php';

以下は、MyClass.phpです

php

1<?php 2namespace wings\selfphp\chap10; 3 4class MyClass{ 5 public static function showClass(){ 6 print __CLASS__; 7 } 8}

実は、分からない部分としまして、ファイル階層についても混乱している部分があるのですが、2つ目の、use_include.phpの「require_once 'use_include.php';」は、その前の行でインポートしている為、MyClassのuse_include.phpなのか、現在のカレントディレクトリに配置されているものなのか、どちらなのでしょうか...?
また、2つ目のファイルは、1行目でインクルード先を指定する際、カレントディレクトリを示す「./」としていることから、wingsフォルダの一つ上の階層に存在している、といった理解で合っていますでしょうか...?
インポートの有効範囲についてなのですが、use_include.phpでインポートした型は、インクルード先のuse_include.phpでは認識されない為、1つ目のファイルでは、エラーとなってしまうとの説明があったのですが、インクルード先のuse_include.phpで認識されないという部分が分かりません...
混乱してしまっている部分がある為、どなたかご助言頂けましたら幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/03/26 09:35

ソースコードの直前に、ファイルとパスの情報も添えないと、ワケワカメ
m.ts10806

2019/03/26 09:50

そこはエスパーしてみました。
guest

回答1

0

ベストアンサー

use キーワードの宣言は、ファイル内の一番外側のスコープ (グローバルスコープ) あるいは名前空間宣言の中で行わなければなりません。 これは、インポートが実行時ではなくコンパイル時に行われるためです。 ブロック内のスコープではインポートできません。

投稿2019/03/26 09:34

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

newyee

2019/03/26 09:46

かなり混乱してしまっていまして... もうちょっと訳が分からないので、ここは一旦飛ばしてみて、学習を進めた後、再度見直してみます...
m.ts10806

2019/03/26 09:49

あまりしたくないですが要約すると 「useで宣言した名前空間のスコープはそのファイル内のみ」
newyee

2019/03/26 09:53

んー、なんとなくわかったような気がします。感覚は分かったような気がするので、あとは、実際に使っていく内に習得できるものなのかなという気がしています... ご回答ありがとうございました。
m.ts10806

2019/03/26 09:59

つまりめんどくさくても使いたいファイル毎に書くしかない。ということ。 そこは私も以前悩みました。そこは仕様なので仕方ないです。 (仕様かどうかを知るにはPHPマニュアルしかないですね) この辺りはJavaのpackageとimportに馴染みがないと難しいと思います。 名前空間はautoloaderと併せて使って効果を発揮できるものなので、 名前空間使わずにinclude地獄を経験してからの話だと思います。 オブジェクト指向の基礎が出来てないと有効に使えるようにはなりません。
newyee

2019/03/26 10:08

分かりました。今ちょうどオブジェクト指向の章を学習していますので、きちんと勉強したいと思います。
m.ts10806

2019/03/26 10:11

はい。オブジェクト指向こそPHPマニュアルの参照機会が一気に増えるカテゴリです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問