當前位置: 首頁> 最新文章列表> defined() 和isset() 函數有什麼區別?什麼時候該用defined()?

defined() 和isset() 函數有什麼區別?什麼時候該用defined()?

gitbox 2025-06-15

<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>

2. isset()函數

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>

3. defined()isset()的區別

  • 作用對象: defined()僅用於檢查常量是否已定義,而isset()用於檢查變量是否已設置且不為null

  • 適用場景: defined()主要用於常量,而isset()用於變量(如全局變量、數組元素、對象屬性等)。

  • 值的類型: isset()檢查的對像是變量的值,通常會忽略null值;而defined()檢查的是常量是否存在。

4. 什麼時候使用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>

5. 什麼時候使用isset()

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> =&gt; </span><span><span class="hljs-string">'John'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </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>-&gt;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>-&gt;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">?&gt;</span></span><span>
</span></span>