<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 ,否則返回false 。
示例:
<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>
作用對象: defined()僅用於檢查常量是否已定義,而isset()用於檢查變量是否已設置且不為null 。
適用場景: defined()主要用於常量,而isset()用於變量(如全局變量、數組元素、對象屬性等)。
值的類型: isset()檢查的對像是變量的值,通常會忽略null值;而defined()檢查的是常量是否存在。
defined()主要用於檢查常量是否已定義。這在以下幾種情況下特別有用:
避免重複定義常量:如果你不確定某個常量是否已定義,可以使用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">'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>
defined()用於檢查常量是否已定義,適用於常量相關的邏輯。
isset()用於檢查變量是否已設置且不為null ,適用於變量的檢查。
在實際開發中,根據需求選擇合適的函數,可以提高代碼的健壯性和可維護性。如果你在檢查常量是否已定義時,應該使用defined() ;而在檢查變量時,則應該使用isset() 。
<span><span><span class="hljs-comment">// 後面與文章內容無關的部分</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>