定数の定義
		
     状態:-
     閲覧数:7,914
		 投稿日:2010-04-26
		 更新日:2013-04-20
     
  
	
 				
	
 			
			 			・「define("定数名", 値);」関数を利用して実施
    
   
    
定義済みの定数 / 拡張モジュールの「定義済み定数」
定義済みの定数
特徴
・「_(アンダーバー)」2個で囲まれている
・大文字と小文字を区別しない
2種類
1.PHPにアクセスする前から定義されているもの
2.PHPスクリプトにアクセスした時点で定義されるもの
1.PHPにアクセスする前から定義されているもの
1-1.コアの定義済み定数
1-2.標準の定義済み定数
2.PHPスクリプトにアクセスした時点で定義されるもの
| 定数 | 格納される値 | 
|---|---|
| __LINE__ | この定数が書かれてある行番号 | 
| __FILE__ | ファイル名を含めた絶対パス | 
| __FUNCTION__ | 関数名 (PHP4.3.0以上) | 
| __CLASS__ | クラス名(PHP4.3.0以 上) | 
| __METHOD__ | クラスのメソッド名 (PHP5.0.0以上) | 
function func1($line = __LINE__){//⑤この定数が書かれてある行番号
        echo $line."
";//⑥
    }
    
    function func2(){//⑧
        echo __FUNCTION__."
";//⑨関数名出力
    }
    
    func1(__LINE__);//①この定数が書かれてある行番号
    func1(__LINE__);//②この定数が書かれてある行番号
    func1(__LINE__);//③この定数が書かれてある行番号
    func1();//④func1関数コール
    
    //echo __FILE__."
";//ファイル名を含めた絶対パス。今回はコメントアウト
    
    func2();//⑦func2関数コール
    
    class CLASS1{
        function func3(){
            echo __CLASS__."
";//⑩クラス名出力
            echo __FUNCTION__."
";//⑪関数名出力
            echo __METHOD__;//⑫メソッド名出力
        }
    }
    
    $obj = new CLASS1();
    $obj->func3();
拡張モジュールの「定義済み定数」
拡張モジュールGDが PHP 組み込みでコンパイルされているか、 実行時に動的にロードされている場合の「定義済み定数」
IMG_JPG
IMG_PNG
定義済み定数IMG_PNG
変数と定数の相違点
何が違うの?
・変数が再定義出来るのに対して、定数は再定義が出来ない
・定数は変数の様に名前の前に「$(ドルマーク)」をおかない
・定数にはスコープ規則がなく、何処からでもアクセス出来る
・定数に配列は格納出来ない。厳密に言うと、定数に格納出来るのはスカラー値のみ
▼/define.html
define("AIR", "空気");//定数を定義するための内部関数「define()」は、第一引数に「定数名(文字列)」を、第二引数に「定数に格納する値」を、オプション(省略可)で第三引数に「定数名の大文字小文字を区別するか否かを表す真偽値(デフォルトでは「true」つまり区別する)」を指定  
    
    echo AIR;
    echo "
";
    echo air;//定数は、デフォルトでは大文字と小文字が区別されている。区別させないためには、第三引数に「false」を指定
    echo "
";
    define("AIR", "空気2");//定数の再定義は不可。但し、関数の様にエラーとはならない
    
    echo AIR;
    echo "
";
    
    function air(){
        echo AIR." (function)";//定数AIRへは、関数内からでも「修正子global」を使用しないでアクセスできる
        echo "
";
    }
    
    air();
    //define("AIRPORT", array("narita", "haneda"));//定数に配列は格納不可。コメントアウトを外すと、エラーメッセージが出力される