PHP PHP入門講座 プログラミング

【PHPプログラミング入門講座】定数

PHPプログラミングのキービジュアル

変数の特徴

まず、変数についておさらいをします。
次のようなPHPプログラムがあったとします。

<?php
  $title = 'ABCホームページ';
?>
<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <title><?= $title; ?></title>
  </head>
  <body>
    <h1><?= $title; ?></h1>
    <p>ホームページへようこそ!</p>
  </body>
</html>

このPHPプログラムをブラウザで表示した場合、次のようになります。

PHPプログラムの実行結果1

黒字に白く「ABCホームページ」と表示されている部分(ブラウザのタブ)は、<title>タグの内容が表示されています。

では、このPHPプログラムに対して、次のハイライトの部分を追記すると、どうなるでしょう?

<?php
  $title = 'ABCホームページ';
?>
<!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <title><?= $title; ?></title>
  </head>
  <body>
<?php
  $title = 'XYZホームページ';
?>
    <h1><?= $title; ?></h1>
    <p>ホームページへようこそ!</p>
  </body>
</html>

いきなり結論ですが、次のようになります。

PHPプログラムの実行結果2

<title>タグ内の文字列は「ABCホームページ」のままですが、<h1>タグ内の文字列は「XYZホームページ」に変わっています。
最初の「$title = 'ABCホームページ';」で、$titleの値は「ABCホームページ」に設定されていたのですが、その後の「$title = 'XYZホームページ';」で、$titleの値が「XYZホームページ」に書き換えられたということです。

つまり、変数の値は書き換えることができるという特徴を持っています。

これは、便利な特徴ですが、場合によっては不便な点もあります。

どのような点かというと、開発規模が大きくなり、PHPプログラムが非常に長くなった場合に、既に使用した変数と同じ変数名を使用して値を書き換えてしまった場合に、気付くのが難しくなるという点です。
よって、値が変わってしまうと問題のある場合は変数を使うべきではありません。
そのような場合は「定数」を使います。

定数とは

「定数」とは、一度値を設定したら、以降は書き換えることができない固定された値のことです。
PHPの定数は「define関数」と「constキーワード」を使用して設定する方法があります。
define関数とconstキーワードは、細かな部分で多少異なりますが、ほぼ同じと考えて大丈夫です。
(細かい違いの説明は、本題からズレるのと、初心者の方には難しい内容のため割愛します。)

define関数

まずはdefine関数を使用した定数について説明します。
define関数の構文は次の通りです。

define('定数名', 値);

「定数名」の書き方は次の通りです。

  • 文字列を設定します。つまり、必ずシングルクォーテーションかダブルクォーテーションで囲みます。
  • アルファベット、数字、アンダースコア「 _ 」が使用できます。
  • 変数のように「$」を使用するのはNGです。
  • 1文字目に数字を記述するのはNGです。
  • 定数であることが分かるように、アルファベットの小文字を使わず、アルファベット大文字、数字、アンダースコア「 _ 」で記述するのが一般的です。

「値」には、「文字列」、「数値」、「配列」が設定できます。
配列は初めて出てきた言葉ですが、ここで説明すると長くなるので、今後の記事で詳しく説明します。
また、文字列、数値、配列が代入された「変数」を設定することもできます。

定数の記述例

実際の定数の記述例をいくつか書きます。

例1:Webサイト名を定数にした記述例

define('SITE_NAME', 'ABCホームページ');

例2:WebサイトのURLを定数にした記述例

define('SITE_URL', 'http://www.example.com/');

例3:何かの最大カウントするを定数にした記述例

define('MAX_COUNT', 100);

例4:小数のある数値の記述例

define('SAMPLE_VALUE', 1.2345);

以上のように、定数を設定することを「定数を定義する」(※注1)といいます。
よく使う表現なので覚えておきましょう。

※注1:「定数に代入する」という場合もありますが、「定数を定義する」という場合が多いです。定数の場合は「一度値を設定したら変更できない」という特徴を持っているからだと思います。

定数を使った処理

次に定義された定数を使ったプログラム例を書きます。

定数を画面に出力する

定数は、define関数を使って値を定義しますが、それ以降は変数と同じになります。
ただ、定数は一度値を設定したら、それ以降はその定数に値を設定(代入)するとエラーになります。

定数をechoを使って画面に出力するシンプルな例を以下に掲載します。

<?php
  define('SITE_NAME', 'ABCホームページ');
  echo SITE_NAME;

define関数で定数を定義する場合は、文字列として書くのでシングルクォーテーション(ダブルクォーテーション)で囲みますが、それ以降定数を使用する場合はシングルクォーテーション(ダブルクォーテーション)で囲みません。

 このPHPプログラムの実行結果は次のとおりです。

ABCホームページ

Webサイトのタイトルを定数を使って表示する

次は結合演算子「 . 」を使った例を掲載します。

<?php
  define('SITE_NAME', 'ABCホームページ');
  $articleTitle = 'まずはじめに';
  $title = $articleTitle . ' | ' . SITE_NAME;
?>
<!doctype html>
<html>
  <head>
    <meta chaset="UTF-8">
    <title><?= $title ?></title>
  </head>
  <body>
    <p>このページのタイトルは「<?= $title; ?>」です。</p>
  </body>
</html>

変数も定数も結合演算子「 . 」で結合することができます。
このPHPプログラムのブラウザでの実行結果は次のようになります。

ブラウザでの実行結果

「ページタイトル | Webサイト名」という形でページのタイトルを記述しているWebサイトって、よく見かけますよね?
それらは、このようなプログラムの書き方で作っています。

この例では、Webサイトの名称はサイト全体を通して固定であるため、定数SITE_NAMEを使い、ページタイトルは変化するので、変数$articleTitleを使っています。
(ページタイトルも定数として定義することはできます。定数と変数のどっちを使用するかの絶対的なルールはなく、状況によって使い分ければOKです。)

定数の定義を別ファイルに記述する

前のプログラムでは、Webサイト名の定数の定義と、Webページの表示(HTMLの出力)を同じPHPプログラム、つまり1つのファイル内に記述しました。
ただ、本来はWebページは複数存在しますので、全ファイル(PHPプログラム)から、Webサイト名の定数は参照できるようにする必要があります。
そこで必要になるのは、ファイルの分割です。
前記事「【PHPプログラミング入門講座】ファイルの分割とファイルの読み込み」で説明した方法を使って、定数の定義を別ファイルに記述するようにしましょう。

定数の定義をcommon.phpファイルに、残りの部分をarticle.phpというファイルに記述することにします。
なお、common.phpとarticle.phpは同じディレクトリ内に存在するものとします。
次のようになります。

ファイル名:common.php

<?php
  define('SITE_NAME', 'ABCホームページ');

ファイル名:article.php

<?php
  require_once('common.php');

  $articleTitle = 'まずはじめに';
  $title = $articleTitle . ' | ' . SITE_NAME;
?>
<!doctype html>
<html>
  <head>
    <meta chaset="UTF-8">
    <title><?= $title ?></title>
  </head>
  <body>
    <p>このページのタイトルは「<?= $title; ?>」です。</p>
  </body>
</html>

このように記述して、ブラウザでarticle.phpにアクセスするとWebページが表示されます。
ブラウザでの実行結果は、前の画像と同じなので割愛します。

constキーワード

define関数と同様に定数を定義するもので、constキーワードというものがあります。
const キーワードの構文は次のとおりです。

const 定数名 = 値;

記述例は次のとおりです。

<?php
  const SITE_NAME = 'ABCホームページ';

次にconstキーワードを使って定数を定義し、echoを使って画面に出力するシンプルな例を以下に掲載します。

<?php
  const SITE_NAME = 'ABCホームページ';
  echo SITE_NAME;

ここからわかるように、「define('SITE_NAME', 'ABCホームページ');」と「const SITE_NAME = 'ABCホームページ';」の定数定義の記述が異なるだけで、あとは同様に定数として使用することができます。

おわりに

今回は、定数について説明しました。
定数の定義は、define関数またはconstキーワードで行うことができます。
定義が異なるだけで、あとは同じように使えますので、好きな方を選んで使えば良いと思います。
これからは、値の変更を防止した方が良いと判断したら、定数を使っていきましょう。

PHPプログラミング入門講座 〜 全記事一覧 〜

-PHP, PHP入門講座, プログラミング
-, , ,

Copyright© ハッピー・プログラミング・ライフ , 2020 All Rights Reserved.