ホーム > 技術情報 > define定義するということ【PHP】

define定義するということ【PHP】

投稿日 : 2018年08月27日   更新日 : 2019年10月12日
カテゴリー : PHP/javascript/CSS / 技術情報
define定義するということ【PHP】の画像

こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして6年~の経験があります。WordPressは2年~の経験があります。その他、jQuery、HTML、CSSも使用します。
ここでは主に過去に納品した案件や自サイト運営(エンジニア婦人ノート)で遭遇したことについて書いています。

PHPで定数を定義するとき、色々なやり方があります。

私はよく、

  • $VAR = 1; ※変数だけど別ファイルに書いておく場合もある
  • define(‘VAR’, 2);
  • const VAR = 3;

などとつけることが多いです。(constは殆ど使ったことがありません。)

今回は自分の阿呆ミスの話ですが、後学のためにも、自分の戒めのためにも書いていくことにします。

バグ(?)発生の発端

  1. 設定値をdefineで定義する
  2. 設定値を更新する必要が出てきたので、defineが書いてある設定ファイルを更新する処理を入れた
  3. 更新と同時にページの再読み込みをする(更新された設定値で表示する)

この流れで、3がうまくいきませんでした。

本来、設定値が更新されたので、3の再読み込みで「更新された設定値」で表示されるはずです。ですが、変更前の設定値表示になっていた。

更新をかけると変更した設定値で表示される。

設定ファイルの書き込み失敗してるのかと思ったけれど、書き込みはちゃんと成功していて、値も更新されている。

ではなぜか?

…勘のいい方はこれでわかったのではないかと思います。

defineは「定義された値」

この「定義された値」というのがポイントです。

「定義」されてるんですよ。本来変更しない値です。変更されたら困る値です。

なので、それを変更しようとしても、再読み込みしても、「本来変更しない値」。

だから完全に処理完了するまでの間に、いくら設定ファイルで書き換えていて変わっていたとしても、PHPの処理上、完了して次の処理が始まるまで、読み込まれた値は変わらないのですね。

requireされていないんじゃないか、ファイルキャッシュの読み込みしてるからうまくいかないのか、はたまたブラウザのキャッシュの問題か、などなど色々考えて実行していましたが、結果は違いました。

単に、defineという書き方をした時のルールを私が無視していたから予定通りの動きをしなかっただけでした。恥ずかしい…

どうやって修正したか

変更する値なのでdefineやめました。変更するかもしれない値ならそれは定数じゃない、定まらぬ。

素直に$VAR = 01; などと記述するようにしました。変数ですね。変わりますね。

そうすると3の「再読み込みで前の設定値が表示される」の件が解消され、予定通りの動きを見せてくれるようになりました。

以上、「当たり前だけどつい忘れてやってしまったプログラミング」でした。

自分の趣味範囲内でやってるときに起きたことでよかった…と思います。

会社でやったらもうちょっと。しばらく立ち直れないかもしれない。

楽しい物造りを

NaoLight

自分のブログやサイトを、楽しく作ってもらえたら。

プログラムを使って望み通りに、拡張しやすく、自分の思うように。

できたときに、すごく楽しい!と思ったら。

控えめに言って、「最高です」。

NaoLight -NAOT-(なおらいと、なおと、と呼んでください)はそんな思いをカタチにする、WordPressのテーマです。

ご購入はこちらからお願いします(BOOTHへ移動します)。

Nao Light-NAOT-公式サイト