0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PHP:const:定数:「定数は右辺に式を書けない」と教わる。単なる暗記で済ませるとちょっと違う。その理由の想像と代替策の例。

Last updated at Posted at 2023-02-26

以前、「定数は右辺に式を書けない」と聞かされた

constで書く定数。大文字で書く決まりになっているお馴染みの。
「定数は右辺に式を書けない」と以前教わったことがある。
単なる暗記は定着しづらいからなるべく避けたい。

なぜか?と想像する

教師であろうが書籍や教材であろうが、このような時に得てして「書けないのだ」と書かれてあるだけにとどまることがある。
しかしなぜか?と想像すれば単なる辛い暗記ではなく容易く記憶できることも中にはある。

だから、心の中で思うようにする。
「◯◯は■■ができない」
「そうか。ほとんどの場合、そうしたくない理由があるのだから、この場合のしたくない理由は何だろうか」
すると、教えられるものの中には、キャッチーな場合がある。

この場合はちょっぴりキャッチー?

定数の場合はおそらく、式には変数がつきもので変数は値が変えられてしまい、定数である意味がなくなるからと想像できるし、納得できる。
そこでふと思う。
ならば、式に変数がなければ書けそう。数字を扱う場合であっても、型によって値が変わるとしても、それはあくまでも定数へ代入するだけだから、定数自体が変化するわけではない。

試してみると、変数がないと

const TEST1 = 5 * 7;
echo TEST1 . PHP_EOL;

やはりエラーにならない。

ならば、変数を入れると

$hensuu = 5;
const TEST2 = $hensuu * 7;
echo TEST2 . PHP_EOL;

エラーになる。

Fatal error: Constant expression contains invalid operations

暗記しなくて済んだもの。
また、変数がなければ書けるから、「式は書けない」はちょっぴりキャッチーと思いきや、変数がない式ではほとんど意味がなさそうだから、結局はキャッチーでもなくうまく言い表しているものだな、と思ったもの。

定数は変更できたらいけないから、たとえば以下みたいになる

const ITEMS = ['item1', 'item2', 'item3'];
define('ITEM_POINT', (function () {
    $itemPoints = [];
    foreach (ITEMS as $index => $item) {
        $itemPoints[$item] = $index;
    }
    return $itemPoints;
}) ());
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?