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

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

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

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

Q&A

解決済

4回答

1782閲覧

別ファイルでdefine("DEBUG",1)など宣言が読み込めない。

moitaro

総合スコア443

PHP

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

0グッド

0クリップ

投稿2017/09/26 02:08

お世話になっております。
初心者の質問失礼します。

下記のようにdefineで定義した値が
他のファイルで表示すると値が入っていないのですが
PHPではどのように表記するのか伺ってよろしいでしょうか?

define.php

php

1<?php 2define("DEBUG",1); 3?>

main.php

php

1require_once(dirname(__FILE__).'/define.php'); 2 3hogehoge(); 4 5function hogehoge{ 6 echo DEBUG; //0 と表示される。 7}

お忙しいところ大変申し訳ないのですが
上記ご助力頂けますようお願い申し上げます。

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

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

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

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

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

guest

回答4

0

とりあえず
function hogehoge{
↓↓↓
function hogehoge(){

echo DEBUG; //0 と表示される。

とのことですが、未定義の定数はNoticeとなって値は表示されないはず
先頭の方に以下を記載して多重定義されていないか確認して下さい

PHP

1ini_set('display_errors',1); 2error_reporting(E_ALL);

(別のどこかで先に定義されているような気がします)

投稿2017/09/26 02:18

yambejp

総合スコア114572

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

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

0

define.php以前にどこかでDEBUGが定義されていませんか?

定義されていない定数は、(PHP 7.1以下ではE_NOTICE、7.2ではE_WARNINGを発生させつつ)その名前と同じ文字列、今回の場合は"DEBUG"とみなされます(3v4lでの実行例)。「0」ということは、どこかでそう定義されている可能性があります。

投稿2017/09/26 02:13

編集2017/09/26 02:17
maisumakun

総合スコア145121

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

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

0

提示ソースだと文法エラーがでているはずです。

PHP

1function hogehoge{ 2 34 5function hogehoge(){ 6

ただ、上記のようになおしたとしても「0」と出力されることはありません。
「1」と出力されます。
読み込めていないのであれば未定義エラーとして

Use of undefined constant DEBUG~~

とエラーが出力されるはずなので。(PHP5.6以下はNotice、PHP7以上はWARNING)

追記:
既に同名で定数が定義されているとそちらが優先されます。

php

1define("DEBUG",0); 2define("DEBUG",1); 3 4echo DEBUG; // 0

echoは出力されますが、echoより先に下記のようにエラーが出力された上で、echoが出力されます(エラー出力有効の場合)

Notice: Constant DEBUG already defined in ~~.php on line XX 0

エラーの出力は有効にされているかを確認した上で、main.php実行に関わるソースに
同じ定数を定義していないかも確認してみてください。

余談:
define.phpはHTML等何も出力しない定義だけのファイルなので閉じ?>はない方が良いと思います。

ファイル全体が純粋な PHP コードである場合は、ファイルの最後の終了タグは省略するのがおすすめです。 終了タグの後に余分な空白や改行があると、予期せぬ挙動を引き起こす場合があるからです。 余分な空白や改行のせいで PHP が出力バッファリングを開始し、その時点の内容を意図せず出力してしまうことになります。

投稿2017/09/26 02:13

編集2017/09/26 02:43
m.ts10806

総合スコア80765

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

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

maisumakun

2017/09/26 02:16

自分の方の実行結果で気づきましたが、未定義の定数が出てきた場合の挙動が、PHP 7.2からはE_WARNINGに引き上げられていました(まだ動きますが、「this will throw an Error in a future version of PHP」だそうです)。
m.ts10806

2017/09/26 02:30 編集

ありがとうございます。私のほうは自身の開発環境の関係から5.6が動いていますのでNoticeが出てます。maisumakunさんが既に書かれていますが、念のため追記しておきます。
guest

0

自己解決

本当に申し訳ございません。
はっきり言って原因が分かりませんが

require_once(dirname(FILE).'/define.php');

が読み込めなくなり
弄っているとdefineが定義されるようになりました……z

define.phpでは

<?php ?>

で実装しました……

本当にどうしてか謎ですしどうやって解決したかも謎ですが
上記ご連絡いたします。

皆様からコメント頂いたのにぱっとしない理由で申し訳ございません。
よりいっそう勉学に励みます。

大変失礼しました。

投稿2017/09/26 04:46

moitaro

総合スコア443

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

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

m.ts10806

2017/09/26 04:51 編集

PHPのコードの組み方(関数の定義、変数、スコープなど)の基本部分を一度見直されたほうが良いかと思います。 同様の問題が発生したときに解決できませんし、今回とは別のことをやろうとしたときにつまずいてばかりとなってしまいます。 今回の対応をしようとした目的なども記載してもらえればもっと的確な回答も得られるでしょうし。 それに回答では私も含めて懸念として「既にどこかでDEBUGという定数が定義されているのでは?」というのをあげていますが、それがどうなったのか気になります。
moitaro

2017/09/26 05:08

mts10806様 仰る通りだと思います…… スパゲッティコードを撲滅したいので PHP コード などでグーグルさんで調査したり 書籍を読むようにします。 >「既にどこかでDEBUGという定数が定義されているのでは?」 Grepで全置換をしたのでたぶんという表現ですが定義していないと思います…… 曖昧で申し訳ないです。 本当にご迷惑をおかけしました。ありがとうございます。
m.ts10806

2017/09/26 05:36

それであれば実際どのような状況下にあるか存じ上げませんが、ある程度基本ができるようになったらフレームワークに移行したほうがいいかもしれませんね。 > Grepで全置換 これはバグのもととなるので限定的な状況を除いてやめた方がいいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問