PHPでは、定数はdefine()関数によって定義され、定義されると、それらの値を変更できません。定数は、構成オプション、システムパス、またはその他の一般的な定数など、プログラムに固定された不変の値を保存するためによく使用されます。ただし、同じ定数が複数回定義されている状況に遭遇し、競合やエラーに簡単につながる可能性がある場合がある場合があります。この問題を回避するために、PHPは定義された()関数を提供して、定数が定義されているかどうかを確認します。
PHPでは、 define()関数を使用して定数を定義し、構文形式は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'CONSTANT_NAME'</span></span><span>, </span><span><span class="hljs-string">'value'</span></span><span>);
</span></span>
constant_nameは定数の名前です。
「値」は定数の値です。
例えば:
<span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'SITE_NAME'</span></span><span>, </span><span><span class="hljs-string">'My Website'</span></span><span>);
</span></span>
これにより、「私のウェブサイト」の値を持つ定数site_nameが定義されます。 define( 'Site_name'、 'Another Webサイト')を呼び出すと、後続のコードで再度エラーが表示され、定数が定義されていることが促されます。
定数が繰り返し定義されないようにするために、PHPは定数が定義されているかどうかをチェックする定義された()関数を提供します。定義された()関数は定数名をパラメーターとして受け入れ、定数が定義されている場合にtrueを返し、それ以外の場合はfalseを返します。
構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-string">'CONSTANT_NAME'</span></span><span>)
</span></span>
このようにして、定数を定義する前に、同じ定数が繰り返し定義されていないことを確認する前に判断を下すことができます。例えば:
<span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-string">'SITE_NAME'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'SITE_NAME'</span></span><span>, </span><span><span class="hljs-string">'My Website'</span></span><span>);
}
</span></span>
この例では、最初にSite_Nameが定義されているかどうかを確認します。定義されていない場合、定義するために定義()が呼び出されます。定義されている場合、 Define()関数は再び実行されず、競合を回避します。
PHPプロジェクトが大きくなると、複数のファイルで定数が使用されることがよくあります。同じ定数が異なるファイルで繰り返し定義されないようにするために、定義済み()関数を使用して各ファイルをチェックインできます。
たとえば、 config.phpで定数を定義しているとします。
<span><span><span class="hljs-comment">// config.php</span></span><span>
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'SITE_URL'</span></span><span>, </span><span><span class="hljs-string">'https://www.example.com'</span></span><span>);
</span></span>
次に、別のファイルheader.phpで、この定数を使用する必要がある場合があります。
<span><span><span class="hljs-comment">// header.php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-string">'SITE_URL'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'SITE_URL'</span></span><span>, </span><span><span class="hljs-string">'https://www.example.com'</span></span><span>);
}
</span></span>
このようにして、 header.phpが複数回参照されたとしても、 Site_urlは繰り返し定義されないため、競合を回避します。
いくつかの大規模なアプリケーションでは、通常、異なる構成と定数を含む複数のファイルがあります。定数が複数の場所で定義されている場合、 Define()を使用して、重複する定義を防止できます。たとえば、フレームワークまたはライブラリ構成ファイルでは、次のコードを使用できます。
<span><span><span class="hljs-comment">// config.php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-string">'DB_HOST'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'DB_HOST'</span></span><span>, </span><span><span class="hljs-string">'localhost'</span></span><span>);
}
</span></span>
同じプロジェクトに複数の類似の定数がある場合は、名前空間を使用して一定の名前の競合を回避することをお勧めします。例えば:
<span><span><span class="hljs-comment">// database.php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-string">'DB_CONFIG_HOST'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'DB_CONFIG_HOST'</span></span><span>, </span><span><span class="hljs-string">'localhost'</span></span><span>);
}
</span><span><span class="hljs-comment">// user.php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-string">'USER_DB_HOST'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'USER_DB_HOST'</span></span><span>, </span><span><span class="hljs-string">'localhost'</span></span><span>);
}
</span></span>
命名競合は、異なる定数名を使用することにより、効果的に回避できます。
定義された()関数は、定数が繰り返し定義されないように、PHPの関数を提供します。定義()を使用して定数を定義する場合、最初に定義された()を使用して、定数が既に存在するかどうかを確認します。これにより、定数が繰り返し定義されることを効果的に回避し、それにより競合と潜在的なエラーが減少します。特に大規模なプロジェクトでは、このアプローチにより、コードの堅牢性と保守性が保証されます。
defined()およびdefined() Sensibleを使用することにより、プロジェクトの定数をより適切に管理し、定義が重複しているために問題を引き起こさないようにします。