定数
定数とは
「定数」は、殆ど変数と同じです。しかし二者は、以下の点で異なっています。
- 変数と定数の相違点
-
- 変数が再定義出来るのに対して、定数は再定義が出来ない。
- 定数は変数の様に名前の前に「$(ドルマーク)」を置かない。
- 定数にはスコープ規則が無く、何処からでもアクセス出来る。
- 定数に配列(「配列」のページで解説)は格納出来ない。厳密に言うと、定数に格納出来るのはスカラー値(「配列」のページで解説)のみ。
更に、定数の定義方法は少し特殊です。以下に、定数の定義方法を示したサンプルと結果を。
<html>
<body>
<?php
define("HODE", "hodenasu!!");
echo HODE;
echo "<hr />";
echo hode;
echo "<hr />";
define("HODE", "hodenegasu!!");
echo HODE;
echo "<hr />";
function hode(){
echo HODE." (function)";
echo "<hr />";
}
hode();
define("NDA", array("ndegasu", "ndenekute"));
?>
</body>
</html>
hodenasu!!
hode
hodenasu!!
hodenasu!! (function)
(エラーメッセージ出力)
まず最初に「define("HODE", "hodenasu!!");
」という一文があります。この部分が、定数の定義をしている所です。定数の定義にはこの様に、「define()
」という定数を定義するための内部関数を使います。
この「内部関数define()
」は、第一引数に「定数名(文字列)」を、第二引数に「定数に格納する値」を、オプション(省略可)で第三引数に「定数名の大文字小文字を区別するか否かを表す真偽値(デフォルトでは「true」つまり区別する)」を指定して使います。
上のサンプルの結果からも判るように、定数の再定義は出来ません(関数の様にエラーにはなりません)。また、デフォルトでは大文字と小文字が区別されています。区別させない場合は、第三引数に「false」を指定します。そして、関数内からでも「修正子global
」を使用しないでアクセス出来ます。しかし、定数に配列は格納出来ません。
定義済みの定数
PHPには、既に「定義済みの定数」が存在します。そして、この定義済みの定数には、「PHPにアクセスする前から定義されているもの」と、「PHPスクリプトにアクセスした時点で定義されるもの」とがあります。
更に、「PHPにアクセスする前から定義されている定数」は、「コアの定義済み定数」と「標準の定義済み定数」に分類(詳しくは、本家のマニュアルの「付録」セクション「定義済みの定数」のページをご参照下さい。)されます。
「PHPスクリプトにアクセスした時点で定義される定数」には、以下のものがあります。
定数 | 格納される値 |
__LINE__ | この定数が書かれてある行番号 |
__FILE__ | ファイル名を含めた絶対パス |
__FUNCTION__ | 関数名(PHP4.3.0以上) |
__CLASS__ | クラス名(PHP4.3.0以上) |
__METHOD__ | クラスのメソッド名(PHP5.0.0以上) |
注意する所は、定数名が「_(アンダーバー)」2個で囲まれている点です。また、これらは大文字と小文字を区別しません。以下に、サンプルと結果を。
<html>
<body>
<?php
function line($line = __LINE__){
echo $line."<hr />";
}
function func(){
echo __FUNCTION__."<hr />";
}
line(__LINE__);
line(__LINE__);
line(__LINE__);
line();
echo __FILE__."<hr />";
func();
class CLS{
function methd(){
echo __CLASS__."<hr />";
echo __FUNCTION__."<hr />";
echo __METHOD__;
}
}
$obj = new CLS();
$obj->methd();
?>
</body>
</html>
12
13
14
4
/絶対パス/ファイル名.php
func
cls
methd
__METHOD__
執筆時点での当方の環境が「PHP4.3.4」に付き、「__METHOD__」は未定義なので、文字列として出力されています。「クラス」の部分は、「クラス」のページで解説します。その他の説明は省略。
「PHPにアクセスする前から定義されている定数」の「コアの定義済み定数」と「標準の定義済み定数」
には、それぞれ主に、以下のものがあります。いずれも、大文字と小文字を区別します。
「標準の定義済み定数」には主に以下のものがあります。
定数 | 格納される値 |
PHP_INI_USER | 1(PHPの設定を、ユーザーのスクリプトで設定可能である事を表す) |
LOCK_EX | 2(「flock()」関数のモード指定に使う) |
(その他多数) | ... |
これらの定数に格納されている値は殆ど(全部?)、整数か浮動小数点数です。これらの定数は、PHPスクリプトでのPHPの設定や、PHPに標準で組み込まれている内部関数を使う際のモードの指定に使います。関数のモード判定は、実際には数値の値で判定されていますが、数値のままだと視認性に欠けるので、視認性を高めるために、解かり易い名前を付けた定数に、値を定義しているというものです。
「コアの定義済み定数」には主に以下のものがあります。
定数 | 格納される値 |
PHP_VERSION | 4.3.4等(インストールされているPHPのバージョン) |
PEAR_INSTALL_DIR | /場所/pear(「PEAR(PHPのライブラリ)」が置いてある場所) |
E_WARNING | 2(スクリプト実行時に発生した警告を表す) |
(その他多数) | ... |
これらの定数には、サーバにPHPをインストール・設定した時点で決定する情報などが格納されています。多分(オイ)。
定数を確実に得る方法
PHPでは、未定義の定数を参照しようとすると、それを文字列として扱ってしまいます。存在しない定数を参照して文字列が出力されるの避けたい場合は、以下のようにする事が出来ます。
<html>
<body>
<?php
define("CONST", "hodenasu!!");
echo constant("CONST")."<hr />";
echo constant("CONT")."<hr />";
if(defined("CONT")){
echo CONT;
}
?>
</body>
</html>
結果は以下のようになります。
hodenasu!!
(警告メッセージ出力)
サンプルコードの中の「constant("CONST")
」は、「指定された名前の定数の値を出力する、未定義なら警告を発生させる」という処理をする関数です。
また、「defined("CONT")
」は、「指定された名前の定数が定義されているか否かを真偽値で返す」という処理をする関数です。
これで、未定義の定数を参照しても、定数名が文字列として出力される事はありません。
おさらいと予告
以上で、定数の解説は終わりです。
定数とは
- 定数は再定義が出来ない。
- 定数にはスコープ規則が無く、何処からでもアクセス出来る。
- 定数に格納出来るのはスカラー値(「配列」のページで解説)のみ。
- 定数の定義は、「define("定数名", 値);」という関数を使って行う。
配列だっちゅーの
次回は、特殊な変数、「配列」を解説します。配列には、複数の値を格納出来ます。
作成日:2004年05月16日 最終更新日:2004年05月16日
【通常モード で表示】