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

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

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

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

Q&A

解決済

2回答

1156閲覧

phpにおける名前空間内で定義した変数へのアクセス方法

kamome283

総合スコア52

PHP

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

0グッド

0クリップ

投稿2018/05/10 04:22

db_connection.php で定義された、

php

1namespace db_connection; 2 3$db = new PDO('mysql:...'); 4

この変数"$db"をほかのファイルから以下のように参照したいのですが、何かうまい方法はありませんか?

main.php

php

1$query = "SELECT * FROM test"; 2$result = \db_connection$db->exec($query);

このようなやり方を思いついているのですが、あんまりいいやり方に思えないのです。

db_connection.php

php

1namespace db_connection; 2 3function get_db_connection () { 4 $db = new PDO('mysql:...'); 5 return $db 6}

main.php

php

1$db = \db_connection\get_db_connection(); 2$query = "SELECT * FROM test"; 3$result = $db->exec($query);

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

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

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

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

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

guest

回答2

0

用途によるのですが、DB処理丸ごとオブジェクトにした方が汎用性が高く、メリットが多そうです。

※すみません未検証です。イメージだけもってください

db.php

php

1namespace db; 2 3class Db { 4 protected $db = null; 5 protected $table = null; 6 7 function __construct($table) { 8 $this->db = new PDO('mysql:...'); 9 $this->table = $table; 10 } 11 public function getData($where=""){ // $whereは検索条件 12 $query = "SELECT * FROM ".$this->table.$where; 13 return $this->db->exec($query); 14 } 15} 16

main.php

php

1$db = new \db\Db("test"); 2 3$result = $db->getData(); 4

接続情報は実際はmain.phpで使われるわけではなく、
取得してきたデータだけ使われるものとして捉えて、全てDB側で処理してしまうやりかたです。
main.phpは画面表示関係の処理のみ記載する形になりますので役割が明確となります。

ご参考まで。

投稿2018/05/10 04:36

編集2018/05/10 04:42
m.ts10806

総合スコア80850

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

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

kamome283

2018/05/10 04:44

ご回答ありがとうございます。 DBを本格的に使うこと自体が初めてなので、そういうやり方のほうがいいのかと参考になりました。
m.ts10806

2018/05/10 04:46

これをどんどん役割分担させていくと行き着く先がオレオレフレームワークだったりします。 あまり処理系統と画面出力系統が混じっているのは良くないのでなるべく「処理させたものを使う」という考え方で組んでいくと良いと思います。
m.ts10806

2018/05/10 04:47

あと名前空間使うのであればやはりautoloadは覚えておいた方がいいですね・・。 色々調べてやってみてください。
kamome283

2018/05/10 04:53

いろいろとアドバイスありがとうございます ^^
guest

0

ベストアンサー

グローバル変数は名前空間に入りませんので、\namespace付きでの参照はできません。

方法は2つです。

  • 名前空間なしで、単なる$db$GLOBALS['db']のように参照する
  • 何かしらのクラスに入れる

投稿2018/05/10 04:29

maisumakun

総合スコア145184

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

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

kamome283

2018/05/10 04:37

ご回答ありがとうございます。やっぱりできないんですね。 ご教示いただいた方法でやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問