• トップ
  • ブログ一覧
  • 【PHP】誰も教えてくれないconst(定数)の上手な使い方
  • 【PHP】誰も教えてくれないconst(定数)の上手な使い方

    メディアチームメディアチーム
    2019.03.13

    エンジニアになろう!

    PHPの教科書でも詳しく語られないconst(定数)とは?

    にゃんこ先生 にゃんこ師匠
    今日もプログミング教室はじめるぞ~い!
    ミツオカ初心者PG
    const(定数)の必要性がよく分からないんです…
    にゃんこ師匠 にゃんこ師匠
    const…!お主もついにその域に達してしもたか・・・
    初心者PG初心者PG
    constって、めちゃめちゃ初心者が学ぶようなところですよね?(笑)
    にゃんこ師匠 にゃんこ師匠
    小娘!なめてんじゃねえぞ!
    見習いPG見習いPG
    情緒不安定ですか(笑)そういうの、読者が離れるのでやめてください

    PHPに関する教科書を見ると、const(定数)はこう書かれています。

    「変数とは異なり、値を固定するもの」

    これだけでconst(定数)についての説明が終わっていることがよくあります。

    const(定数)は一体何のため存在している?

    変数については詳しく書かれていることが多いのに、なぜconst(定数)については詳しく記載されていないのでしょう?

    なんとも中途半端でつかみどころがなく、変数のオマケで書かれてるように感じてしまうことでしょう。

    これでは「一体何のために存在するのか?」どのように使えばいいのかがイメージしにくいわけです。

    では、実際に開発の現場ではどのように使われているのか、その一例をご紹介します。

    こちらの記事もオススメ!

    featureImg2020.08.14PHP 特集知識編PHPおすすめフレームワーク5選PHPでコードを書くならオススメの統合開発環境「PhpStorm」クラスから理解...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    変数の反対が「定数」?

    例えばPHPの教科書にはこのような説明がよく書かれています。

    1. 変数は「値が変わるもの」
    2. 定数は「値が固定であるもの

    また、コードで書くと、このようになります。

    1<?php
    2const NAME = 'yamada';
    3print NAME;
    4?>

    【結果】

    yamada

    画面には「yamada」と出力されます。

    定数を使うことで「yamada」という名前を出力することができるというのですが、この説明だといくつかの疑問が浮かんできます。

    にゃんこ先生 にゃんこ師匠
    変数$nameに"yamada"を代入してもいいのではないじゃろか?という疑問も沸いてくるじゃろ
    ミツオカ初心者PG
    変数に入れればいいじゃん!
    にゃんこ先生 にゃんこ師匠
    そもそも代入しなくても、そのまま print "yamada"; ではダメなんじゃろか?
    ミツオカ初心者PG
    それで良いとおもいます!
    にゃんこ先生 にゃんこ師匠
    ヌルイわ!猫舌のワシでもモグモグできるくらいヌルイわ!

    このような疑問が生まれてきますが、教科書にはそれ以上の説明はありません。

    これではまったく腑に落ちず、( ゚д゚)ポカーンとしてしまった人も多いのではないでしょうか?

    定数を使うメリットとは!?

    今は、constを使うメリットが感じられないかもしれません。

    しかし、実は、使い方次第では大変便利になります。

    実際のサイトを想定するとイメージが湧きやすくなると思います。

    1つのウェブページに『株式会社●●●の紹介』と、『同社の商品紹介』の記述があり、それぞれに同じリンクが張られていたと仮定します。

    通常の場合

    普通にHTMLで書くと、こんな感じになりますね。

    1<a href="https://www.●●●.co.jp">株式会社●●●のホームページはこちら</a>
    2<a href="https://www.●●●.co.jp">この商品のメーカーはこちら</a>

    const(定数)を使った場合

    では、constを使ってみます。

    URL の前に const をつけ、https://www.●●●.co.jpを代入します。

    そうすることにより、<?php print URL; ?>と記述することで、すべてが https://www.●●●.co.jp と表示されます。

    1const URL = 'https://www.●●●.co.jp'
    2HTMLの記述~
    3<a href="<?php print URL; ?>">株式会社●●●のホームページはこちら</a>
    4<a href="<?php print URL; ?>">この商品のメーカーはこちら</a>

    【結果】

    <a href="https://www.●●●.co.jp">株式会社●●●のホームページはこちら</a>
    <a href="https://www.●●●.co.jp">この商品のメーカーはこちら</a>

    このようにconst値にURLを代入することで、いくつもの使いまわしが可能になります。

    変数を使った場合

    では、仮にconstではなく、変数を使用した場合はどうでしょうか?

    1$url = 'https://www.●●●.co.jp'
    2HTMLの記述~
    3<a href="<?php print $url; ?>">株式会社●●●社のホームページはこちら</a>
    4<a href="<?php print $url; ?>">この商品のメーカーはこちら</a>

    【結果】

    <a href="https://www.●●●.co.jp">株式会社●●●のホームページはこちら</a>
    <a href="https://www.●●●.co.jp">この商品のメーカーはこちら</a>

    結果は同じでした。

    では、なんで変数を使っちゃダメなの?

    初心者のうちは、シンプルなコードで書くことがでることでしょう。

    しかし、レベルが上がるにつれ、コードが長く複雑になっていきます。

    その過程で、他の処理の目的で$urlに別の値を代入してしまった場合はどうなるでしょうか?

    1$url = 'https://www.●●●.co.jp'
    2HTMLの記述~
    3<a href="<?php print $url; ?>">株式会社●●●社のホームページはこちら</a>
    4~$urlに関する処理~
    5$url = 'https://www.△△△.co.jp'
    6HTMLの記述~
    7<a href="<?php print $url; ?>">この商品のメーカーはこちら</a>

    【結果】

    <a href="https://www.●●●.co.jp">株式会社●●●社のホームページはこちら</a>
    <a href="https://www.△△△.co.jp">この商品のメーカーはこちら</a>

    「この商品のメーカーはこちら」のリンク先が、https://www.△△△.co.jpという別のページになってしまいました。

    今回は、URLのような、まだシンプルなものですが、もし複雑で大きな金融プログラムだったとしたらどうでしょう・・・。

    数秒で何億円の損失が出るかもしれません。

    ゾッとしますね。

    しかし、一度代入すると変更できないconstを使っていれば、このようなミスは防ぐことができるのです!

    にゃんこ先生 にゃんこ師匠
    絶対に値を変更したくない場合はconstを使うこと!
    ミツオカ初心者PG
    なるほど~これで安心ね!

    もう1つ大きなメリット!

    さらに、もう1つ。

    もし、上司から「下のようにA社のURLが変わったので、リンク設定を修正してほしい」と言われたらどうしますか?

    変更前:https://www.●●●.co.jp

    変更後:https://www.■■■.co.jp

    ミツオカ初心者PG
    const URL = 'https://www.■■■.co.jp'に変更すれば全てが変更されるのね!
    にゃんこ先生 にゃんこ師匠
    正解じゃ!しかも、再代入することはできなのだ!
    ミツオカ初心者PG
    なるほど!便利!

    上記のように、constでURLを設定することで、1行目のconstへの代入で完了します。

    つまり、たった1か所だけの修正で終えてしまうことが可能なのです。

    同じリンクが2か所ではなく、3か所5か所、、、

    と、数多く設定されていたら、この修正だけで相当な手間と時間がかかってしまいます。

    なによりリンクが張られている箇所を探すだけでもかなり面倒ですし、修正漏れが出てしまうかもしれません。

    このような問題も、同時に一気に解決できてしまうのです。

    オススメ入門書

    いきなりはじめるPHP~ワクワク・ドキドキの入門教室~
    いきなりはじめるPHP~ワクワク・ドキドキの入門教室~

     

    システムを作った後のことを考えよう!

    企業で使われるシステムの場合、多くは作ったらそれで終わりではありません。

    また、開発途中やリリース後にこのような急な変更を言われてることは珍しいことではありません。

    急に「このシステムの改修をお願い!」と言われて、他の開発者が作ったプログラムを修正する場合だってあります。

    そんなことが起こっても普段からconstを使っていれば、「値を固定」しながら「値を一元管理」することができるのです。

    この使い方はほんの一例ですが、この考え方を応用することで、constはあらゆる場面で使用する機会が増えることでしょう!

    こちらの記事もオススメ!

    featureImg2020.08.14PHP 特集知識編PHPおすすめフレームワーク5選PHPでコードを書くならオススメの統合開発環境「PhpStorm」クラスから理解...

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    ミツオカ初心者PG
    私、constのことを見くびっていたみたい!
    にゃんこ先生 にゃんこ師匠
    そうじゃな・・・。constを見習ってお主も動じない心を手に入れるのじゃ。
    ミツオカ初心者PG
    私、constになりたい!constになる!
    チャンドラ謎のインド人
    constヲワラウモノハconstニナクノデス
    ミツオカ初心者PG
    誰すかww

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background