<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 前面与文章内容无关的部分</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
</span><span><span class="hljs-comment">### [defined() 和 isset() 函数有什么区别?什么时候该用 defined()?]</span></span><span>
在 PHP 编程中,`</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>()` 和 `</span><span><span class="hljs-keyword">isset</span></span><span>()` 都是用于检查某个值的状态的函数,但它们各自的用途和工作原理有很大的不同。理解这两个函数的区别,能帮助我们在编写 PHP 代码时选择适当的函数来处理变量和常量的检查。下面我们来详细讨论这两个函数的区别以及它们各自的适用场景。
</span><span><span class="hljs-comment">#### 1. `defined()` 函数</span></span><span>
`</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>()` 是一个用来检查常量是否已经定义的函数。常量是在程序中定义一次后不可更改的值,而 `</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>()` 用于判断某个常量是否已经被定义。
**语法:**
```php
</span><span><span class="hljs-title function_ invoke__">defined</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
$ nameは、チェックする定数名(文字列)です。
返品値:定数が定義されている場合はtrueを返します。それ以外の場合はfalseを返します。
例:
<span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'MY_CONSTANT'</span></span><span>, </span><span><span class="hljs-number">100</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">'MY_CONSTANT'</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'絶え間ない MY_CONSTANT 定義されています。'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'絶え間ない MY_CONSTANT 未定義。'</span></span><span>;
}
</span></span>
出力:
<span><span>絶え間ない MY_CONSTANT 定義されています。
</span></span>
ISSET()関数は、変数が設定されていて、その値がnullでないかどうかを確認するために使用されます。この関数は通常、変数が存在し、値が割り当てられているかどうかを確認するために使用されます。
文法:
<span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$var</span></span><span>, </span><span><span class="hljs-keyword">mixed</span></span><span> ...</span><span><span class="hljs-variable">$vars</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
パラメーター: $ varはチェックする変数であり、単一の変数または複数の変数にすることができます。
返品値:すべての指定された変数が設定されていて、その値がnullでない場合はtrueを返します。
例:
<span><span><span class="hljs-variable">$var</span></span><span> = </span><span><span class="hljs-string">'Hello'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$var</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'変数 $var セットと値はありません null。'</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'変数 $var 設定されていないか、 null。'</span></span><span>;
}
</span></span>
出力:
<span><span>変数 $</span><span><span class="hljs-keyword">var</span></span><span> セットと値はありません </span><span><span class="hljs-literal">null</span></span><span>。
</span></span>
作用オブジェクト:定義()は、定数が定義されているかどうかを確認するためにのみ使用されますが、 ISSET()は、変数がnullではなく設定されているかどうかを確認するために使用されます。
適用可能なシナリオ:定義()は主に定数に使用されますが、 ISSET()は変数(グローバル変数、配列要素、オブジェクトプロパティなど)に使用されます。
値タイプ: ISSET()によってチェックされたオブジェクトは変数の値であり、 null値は通常無視されます。定義された()は、定数が存在するかどうかをチェックします。
定義()は、主に定数が定義されているかどうかを確認するために使用されます。これは、次の状況で特に役立ちます。
定数の定義を繰り返し定義しないでください。定数が定義されているかどうかわからない場合は、定義()を使用して、定数を繰り返し定義するエラーを回避できます。
<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">'MY_CONSTANT'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'MY_CONSTANT'</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>);
}
</span></span>
フレームワークでの使用:多くのPHPフレームワークまたはライブラリは、定数を使用して構成オプションを定義します。特定の定数が定義されているかどうかを確認し、既存の構成値の上書きを避ける必要がある状況に遭遇する場合があります。
条件付き定義定数:異なる動作環境に従って異なる定数を定義する場合があります。 defined()を使用して、異なる環境に従って定数を条件付きで定義します。
<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">'ENVIRONMENT'</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'ENVIRONMENT'</span></span><span>, </span><span><span class="hljs-string">'production'</span></span><span>);
}
</span></span>
ISSET()は、変数がnullではなく設定されているかどうかを確認するために使用されます。これは、フォームの提出、配列要素、およびグローバル変数を扱う場合に役立ちます。一般的な使用シナリオは次のとおりです。
フォーム入力を確認する:ユーザー入力を処理するとき、 ISSET()を使用して、フォームフィールドが設定され、空ではないことを確認します。
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>])) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ユーザー名:'</span></span><span> . </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'username'</span></span><span>];
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ユーザー名未提交。'</span></span><span>;
}
</span></span>
配列要素を確認します。Isset ()を使用して、配列のキーが存在し、その値がnullでないかどうかを確認します。
<span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'John'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-literal">null</span></span><span>];
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>])) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'名前:'</span></span><span> . </span><span><span class="hljs-variable">$arr</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>];
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'名前未设置。'</span></span><span>;
}
</span></span>
オブジェクトのプロパティを確認してください: ISSET()を使用して、オブジェクトのプロパティが設定されているかどうかを確認できます。
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">User</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
}
</span><span><span class="hljs-variable">$user</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title class_">User</span></span><span>();
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$user</span></span><span>->name)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ユーザー名:'</span></span><span> . </span><span><span class="hljs-variable">$user</span></span><span>->name;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'ユーザー名未设置。'</span></span><span>;
}
</span></span>
定義()は、定数が定義されているかどうかを確認するために使用され、定数関連のロジックに適しています。
ISSET()は、変数がnullではなく設定されているかどうかを確認するために使用され、変数のチェックに適しています。
実際の開発では、ニーズに応じて適切な関数を選択すると、コードの堅牢性と保守性が向上する可能性があります。定数が定義されているかどうかを確認するときにdefined()を使用する必要がある場合。変数を確認する場合は、 Isset()を使用する必要があります。
<span><span><span class="hljs-comment">// 記事の内容とは何の関係もない次の部分</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>