サーチ…


構文

  • define(文字列$ name、混合$ value [、ブール$ case_insensitive = false])
  • const CONSTANT_NAME = VALUE;

備考

定数は、後で変更する予定のない値を格納するために使用されます。また、設定パラメータ、特に環境を定義するパラメータ(dev / production)を格納するためによく使用されます。

定数には変数のような型がありますが、すべての型を使って定数を初期化することはできません。オブジェクトとリソースは、定数の値として使用することはできません。配列はPHP 5.6から始まる定数として使用できます

いくつかの定数名はPHPによって予約されています。これらには、 truefalsenull 、および多くのモジュール固有の定数が含まれます。

定数は通常、大文字で名前が付けられます。

定数が定義されているかどうかのチェック

簡単なチェック

定数が定義されているかどうかを調べるには、 defined関数を使いますこの関数は定数の値を気にせず、定数が存在するかどうかだけを気にします。定数の値がnullでもfalseでも、関数は引き続きtrue返しtrue

<?php

define("GOOD", false);

if (defined("GOOD")) {
    print "GOOD is defined" ; // prints "GOOD is defined"

    if (GOOD) {
        print "GOOD is true" ; // does not print anything, since GOOD is false
    }
}

if (!defined("AWESOME")) {
   define("AWESOME", true); // awesome was not defined. Now we have defined it 
}

定数は、定義した行の後でのみ、コード内で「可視」になります。

<?php

if (defined("GOOD")) {
   print "GOOD is defined"; // doesn't print anyhting, GOOD is not defined yet.
}

define("GOOD", false);

if (defined("GOOD")) {
   print "GOOD is defined"; // prints "GOOD is defined"
}

すべての定義された定数の取得

PHPによって作成された定数を含むすべての定義済みの定数を取得するには、 get_defined_constants関数を使用します。

<?php

$constants = get_defined_constants();
var_dump($constants); // pretty large list

あなたのアプリケーションによって定義された定数だけを取得するには、スクリプトの最初と最後に(通常はブートストラッププロセスの後に)関数を呼び出します。

<?php

$constants = get_defined_constants();

define("HELLO", "hello"); 
define("WORLD", "world"); 

$new_constants = get_defined_constants();

$myconstants = array_diff_assoc($new_constants, $constants);
var_export($myconstants); 
   
/* 
Output:

array (
  'HELLO' => 'hello',
  'WORLD' => 'world',
) 
*/

デバッグに便利なことがあります

定数の定義

定数は、 const文またはdefine関数を使用して作成されます。規約では、定数名に大文字を使用します。

明示的な値を使用して定数を定義する

const PI = 3.14; // float
define("EARTH_IS_FLAT", false); // boolean
const "UNKNOWN" = null; // null
define("APP_ENV", "dev"); // string
const MAX_SESSION_TIME = 60 * 60; // integer, using (scalar) expressions is ok

const APP_LANGUAGES = ["de", "en"]; // arrays


define("BETTER_APP_LANGUAGES", ["lu", "de"]); // arrays

別の定数を使用して定数を定義する

1つの定数がある場合は、それに基づいて別の定数を定義できます。

const TAU = PI * 2;
define("EARTH_IS_ROUND", !EARTH_IS_FLAT);
define("MORE_UNKNOWN", UNKNOWN);
define("APP_ENV_UPPERCASE", strtoupper(APP_ENV)); // string manipulation is ok too
// the above example (a function call) does not work with const:
// const TIME = time(); # fails with a fatal error! Not a constant scalar expression
define("MAX_SESSION_TIME_IN_MINUTES", MAX_SESSION_TIME / 60);

const APP_FUTURE_LANGUAGES = [-1 => "es"] + APP_LANGUAGES; // array manipulations


define("APP_BETTER_FUTURE_LANGUAGES", array_merge(["fr"], APP_BETTER_LANGUAGES));

予約定数

いくつかの定数名はPHPによって予約されており、再定義することはできません。これらの例はすべて失敗します:

define("true", false); // internal constant
define("false", true); // internal constant
define("CURLOPT_AUTOREFERER", "something"); // will fail if curl extension is loaded

そして通知が発行されます:

Constant ... already defined in ...

条件付き定義

同じ変数を定義できるファイルが複数ある場合(たとえば、メイン設定、ローカル設定など)、構文を次のように指定すると衝突を避けることができます。

defined("PI") || define("PI", 3.1415); // "define PI if it's not yet defined"

const vs define

defineは実行時の式であり、 constはコンパイル時のものです。

したがってdefine動的な値(すなわち、関数呼び出し、変数等)、さらには動的名および条件の定義を可能にします。ただし、常にルート名前空間に関連して定義されます。

constは静的です(他の定数、スカラー、配列、およびそれらの制限された集合、つまり定数、スカラー式 、すなわち算術演算、論理演算子、比較演算子、配列逆参照)の演算のみが可能ですが、自動的に名前空間現在アクティブな名前空間の接頭辞。

constは値として他の定数やスカラーだけをサポートし、操作はサポートしません。

クラス定数

定数は、 constキーワードを使用してクラス内で定義できます。

class Foo {
    const BAR_TYPE = "bar";

    // reference from inside the class using self::
    public function myMethod() {
        return self::BAR_TYPE;
    }
}

// reference from outside the class using <ClassName>::
echo Foo::BAR_TYPE;

これはアイテムの種類を格納するのに便利です。

<?php

class Logger {
    const LEVEL_INFO = 1;
    const LEVEL_WARNING = 2;
    const LEVEL_ERROR = 3;

    // we can even assign the constant as a default value
    public function log($message, $level = self::LEVEL_INFO) {
        echo "Message level " . $level . ": " . $message;
    }
}

$logger = new Logger();
$logger->log("Info"); // Using default value
$logger->log("Warning", $logger::LEVEL_WARNING); // Using var
$logger->log("Error", Logger::LEVEL_ERROR); // using class

定数配列

配列はPHP 5.6以降のプレーンな定数やクラス定数として使用できます:

クラス定数の例

class Answer {
    const C = [2,4];
}

print Answer::C[1] . Answer::C[0]; // 42

プレーンな定数の例

const ANSWER = [2,4];
print ANSWER[1] . ANSWER[0]; // 42

また、バージョン7.0のPHPから、この機能は単純な定数のdefine関数に移植されました。

define('VALUES', [2, 3]);
define('MY_ARRAY', [
    1,
    VALUES,
]);

print MY_ARRAY[1][1]; // 3

定数の使用

定数を使用するには、単にその名前を使用します。

if (EARTH_IS_FLAT) {
    print "Earth is flat";
}

print APP_ENV_UPPERCASE;

または事前に定数の名前がわからない場合は、 constant関数を使用します。

// this code is equivalent to the above code
$const1 = "EARTH_IS_FLAT";
$const2 = "APP_ENV_UPPERCASE";

if (constant($const1)) {
    print "Earth is flat";
}

print constant($const2);


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow