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

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

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

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

Q&A

解決済

2回答

2992閲覧

PHPでnamespaceとuseどちらを使用するのが良いのでしょうか?

moitaro

総合スコア443

PHP

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

0グッド

0クリップ

投稿2017/10/26 02:02

お世話になっております。

件名の通り
define_matsuya.php

php

1<?php 2define("TEST",1); 3//値段 4$gyudonNedan =300; 5?>

define_yoshinoya.php

php

1<?php 2define("TEST",0); 3//値段 4$gyudonNedan =400; 5?>

main.php

php

1<?php 2//定義ファイルを読み込む 3require_once(dirname(__FILE__).'/define_yoshinoya.php'); 4require_once(dirname(__FILE__).'/define_matsuya'); 5 6function main(){ 7 if(TEST)[ 8 echo "これはテストです。</br>"; 9 } 10 echo "値段は".$gyudonNedan."円です。"; 11} 12 13main(); 14?>

との場合に
TEST や $gyudonNedan を
明示的に使用するには
PHPでは namespane  use どちらを使用する方が良いのでしょうか?

またその場合の表記方法をお教え頂けないでしょうか?

初心者の質問大変申し訳ないのですが
上記お問い合わせいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

まず、グローバル変数は名前空間に入れられません

PHP のコードならなんでも名前空間に含めることができますが、 実際に名前空間の影響を受けるのはクラス (抽象クラスやトレイトを含む) とインターフェイス、関数、そして定数だけです。

そして、名前空間を宣言するにはnamespaceが必要で、使う側では

  • 名前空間名\中身のように完全修飾で参照する
  • useで名前を導入した上で取り込む

のどちらかになります。「useだけ」使うパターンはありません。

投稿2017/10/26 02:24

編集2017/10/26 02:27
maisumakun

総合スコア145183

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

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

moitaro

2017/10/26 03:09

maisumakun様 コメントありがとうございます。 define_yoshinoya.php ```php <?php namespace define_yoshinoya; // これを追加 define("TEST",0); //値段 $gyudonNedan =400; ?> main.php ```php <?php //定義ファイルを読み込む require_once(dirname(__FILE__).'/define_yoshinoya.php'); require_once(dirname(__FILE__).'/define_matsuya'); function main(){ if(TEST)[ echo "これはテストです。</br>"; } echo "値段は".define_yoshinoya/$gyudonNedan."円です。"; } main(); ?> ``` と指定しても 値段は0円です。 と出力されてしまします…… ".define_yoshinoya/$gyudonNedan." との表記ではまずいのでしょうか? お忙しいところ大変申し訳ないのですが 上記お問い合わせいたします。
maisumakun

2017/10/26 03:18

上に書いたように、グローバル変数には名前空間は適用できません。
moitaro

2017/10/26 04:21

了解しました。 ありがとうございました。
guest

0

名前空間はおよそ汎用的な関数・クラス名だとかを使いたい場合に
他のライブラリだとかと衝突しないために使うものであって
変数の値を切り替えるような用途には使えないし使うもんじゃないです

構造が同じで値が違うデータを使い分けたいなら
クラスのインスタンスごとに値を変えるかあるいは
クラスのサブクラスごとに値を変えるとかするのが良いでしょう

データの種類が増減したり構造が変わる可能性が大いにあるなら
値をデータベースなどに格納してインスタンスごとに取り出す値を変えるように

データの種類と構造があらかじめ決定していてあまり変わる事がない、
あるいは逆にデータの種類ごとに構造や処理内容が変わったりするならば
サブクラスとしてそれぞれを作るのが良いでしょう

データの増減は激しい上に構造も処理も一定じゃないというなら
データベースの値によって動的に使用するサブクラスを決定して
インスタンスを生成するというのもありです

とりあえず例に示されたものは名前空間の使いどころではないです

投稿2017/10/26 04:01

KazuhiroHatano

総合スコア7804

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

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

moitaro

2017/10/26 04:21

KazuhiroHatano様 コメントありがとうございます。 名前空間の使いどころではないとの事了解しました。 どうしても使う必要がある場合には クラスにしたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問