当前位置: 首页> 最新文章列表> 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>