PHPのconstとdefineの違いを詳しく解説

angryTom
リリース: 2023-04-08 06:22:01
転載
5916 人が閲覧しました

PHPのconstとdefineの違いを詳しく解説

PHP で定数を定義するときに使用できます。 constとdefineの違いは?

1. Const はクラスのメンバー変数の定義に使用され、一度定義すると値を変更することはできません。 define は、どこからでもアクセスできるグローバル定数を定義します。

2.define はクラス内で定義できませんが、const はクラス内で定義する必要があり、const で定義された変数にはクラス名::変数名を通じてアクセスする必要があります。

3. const 定数は条件文では定義できません。

4. const は通常の定数名 (静的スカラー) を使用し、define は任意の式を名前として使用できます。

5. const は常に大文字と小文字を区別しますが、define() は 3 番目のパラメータを使用して大文字と小文字を区別しない定数を定義できます。

6. const の使用はシンプルで読みやすいです。const はそれ自体が言語構造であり、define はメソッドです。const を使用して定義する方が、コンパイル時に定義するよりもはるかに高速です。

クラスで定数を定義する場合、次の例のように、define は使用できませんが、const を使用してください。


推奨: "

PHP チュートリアル "

<?php
//在类外面通常这样定义常量
define("PHP","111cn.net");
class MyClass
{
    //常量的值将始终保持不变。在定义和使用常量的时候不需要使用$符号
    const constant = &#39;constant value&#39;;

    function showConstant() {
        echo  self::constant . "<br>";
    }
}

echo MyClass::constant . "<br>";

$classname = "MyClass";
echo $classname::constant . "<br>"; // PHP 5.3.0之后

$class = new MyClass();
$class->showConstant();
echo $class::constant."<br>"; // PHP 5.3.0之后
//print_r(get_defined_constants());  //可以用get_defined_constants()获取所有定义的常量
?>
ログイン後にコピー

通常、define はクラス外の定数を定義し、const はクラス内の定数を定義します。const にはクラス名::変数名を通じてアクセスする必要があります。ただし、php5.3 以降では、const によるクラス外の定数の定義がサポートされています。次を参照してください。これで問題ありません:

<?php
   const a = "abcdef";
   echo a;
?>
ログイン後にコピー

ここでは、定数に関する基本的な知識には触れません。上記のdefineとconstは別物です 違い(インターネットとの):

1.constは条件文で定数を定義できませんが、次のようにdefineは可能です:

<?php
if(1){
   const a = &#39;java&#39;;
 }    
echo a;  //必错
?>
ログイン後にコピー

2.const は通常の定数 name を使用します。define は式を名前として取ることができます。

<?phpconst  FOO = &#39;PHP&#39;; 
for ($i = 0; $i < 32; ++$i) { 
    define(&#39;PHP_&#39; . $i, 1 << $i); 
} 
?>
ログイン後にコピー

3.const は静的スカラーのみを受け入れることができますが、define は任意の式を受け取ることができます。

<?php
const PHP = 1 << 5; // 错误
define(&#39;PHP&#39;, 1 << 5); // 正确 
?>
ログイン後にコピー

4.const 自体が言語構造です。そしてdefineは関数です。したがって、const を使用する方がはるかに高速です。

この 2 つは共通点があります。どちらも再割り当てできないということです。

次の内容は Rotted_Pencil のブログ投稿からの抜粋です: PHP での定数の定義、define() と const の違い

序文

Read今日もStackoverflowでとても興味深い記事を見つけたので翻訳して取り上げてみました。この記事は、PHP 開発メンバーの 1 人である NikiC によって書かれたもので、その権威は疑いの余地がありません。

本文

PHP5.3 では、定数を定義する方法が 2 つあります:

1. const キーワードを使用します

2. define() メソッドを使用します

const FOO = ‘BAR’; 
define(‘FOO’,’BAR’);
ログイン後にコピー

2 つのメソッドの根本的な違いは、const はコードのコンパイル時に定数を定義するのに対し、const は define() メソッドを使用することです。 will 定数はコードの実行時に定義されます。このため、const には次のような欠点があります。

const は条件文で使用できません。グローバル変数を定義したい場合は、const をコード全体の最も外側のレベルに置く必要があります。

if (...) {    
    const FOO = &#39;BAR&#39;;    // 无效的
}
// but
if (...) {
   define(&#39;FOO&#39;, &#39;BAR&#39;); // 有效的
}
ログイン後にコピー

なぜこれを行うのか疑問に思われるかもしれません。最も一般的な例の 1 つは、定数が定義されているかどうかを確認する場合です。

if (!defined(&#39;FOO&#39;)) {
    define(&#39;FOO&#39;, &#39;BAR&#39;);
}
ログイン後にコピー

const は、変数 (数値、文字列、または true、false、null、FILE など) を宣言するためにのみ使用できます。また、define() は式を受け入れることもできます。ただし、PHP5.6 以降では、const は定数式も受け入れることができます:


const BIT_5 = 1 << 5;    // 在PHP5.6之后有效,之前无效
define(&#39;BIT_5&#39;, 1 << 5); // 一直有效
ログイン後にコピー

const 定数名には直接的なテキストのみを使用できますが、define() では任意の式を使用して名前を付けることができます。このようにして、次のことが可能になります:

for ($i = 0; $i < 32; ++$i) {
    define(&#39;BIT_&#39; . $i, 1 << $i);
}
ログイン後にコピー

const で定義された定数は大文字と小文字が区別されますが、define では 3 番目のパラメーターを true に設定することで大文字と小文字の区別をオフにすることができます:

define(&#39;FOO&#39;, &#39;BAR&#39;, true);
echo FOO; // BAR
echo foo; // BAR
ログイン後にコピー

以上が注意すべき点となります。そこで、私が個人的に上記の状況に関係なく常に const を使用する理由を以下に説明します。

const はより読みやすく、美しいです。

const はデフォルトで現在の名前空間で定数を定義します。define を使用するには、名前空間全体のフルパスを指定する必要があります。

namespace A\B\C; 
// 如果要定义常量 A\B\C\FOO: 
const FOO = ‘BAR’; 
define(‘A\B\C\FOO’, ‘BAR’);
ログイン後にコピー

PHP5.6 以降、const 配列も定義できます。は定数です。現在、define はこの関数をサポートしていませんが、この関数は PHP7 で実装される予定です:

const FOO = [1, 2, 3];    // 在PHP 5.6中有效 
define(‘FOO’, [1, 2, 3]); // 在PHP 5.6无效, 在PHP 7.0有效
ログイン後にコピー

const はコンパイル中に実行されるため、define よりも高速です。

特に、define を使用して多数の定数を定義する場合、PHP の実行が非常に遅くなります。この問題を回避するために、apc_load_constantshide のようなものを発明した人もいます。

define と比較して、const は定数定義の効率を 2 倍にすることができます (XDebug で構成された開発マシンでは、この差はさらに大きくなります)。ただし、クエリ時間の点では、この 2 つに違いはありません (両方とも同じクエリ テーブルを使用するため)

最後に注意すべき点は、const はクラスとインターフェイスで使用できるのに対し、define はクラスとインターフェイスで使用できることです。これはできません:

class Foo {
    const BAR = 2; // 有效
}
class Baz {
    define(&#39;QUX&#39;, 2); // 无效
}
ログイン後にコピー

概要

条件文で式を使用したり定数を定義したりする必要がある場合を除き、コードを読みやすくするために const を使用することをお勧めします。

PHP 関連の知識の詳細については、PHP 中国語 Web サイト をご覧ください。

以上がPHPのconstとdefineの違いを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート