ZetCode

PHP isset 关键字

最后修改于 2025 年 4 月 16 日

PHP 的 isset 语言结构用于检查变量是否已设置且不为 null。 这对于避免未定义变量错误至关重要。 如果变量存在并且具有除 null 之外的任何值,isset 将返回 true。

基本定义

isset 函数确定变量是否已声明且不为 null。 它接受一个或多个参数并返回一个布尔值。 isset 不是一个常规函数,而是一个语言结构。

语法:isset(mixed $var, mixed ...$vars): bool。 它可以一次检查多个变量。 如果任何变量未设置,它将返回 false。

empty 不同,isset 不会评估变量的值。 它只检查变量是否存在且不为 null。 这使其更安全地检查变量是否存在。

isset 的基本用法

此示例演示了 isset 在简单变量中的基本用法。

basic_isset.php
<?php

declare(strict_types=1);

$name = "John";

if (isset($name)) {
    echo "Name is set to: $name";
} else {
    echo "Name is not set";
}

该代码检查 $name 是否存在且不为 null。 由于我们分配了一个值,isset 返回 true。 这是 isset 最常见的用例。 它避免了未定义的变量错误。

检查多个变量

此示例演示了如何使用单个 isset 调用检查多个变量。

multiple_vars.php
<?php

declare(strict_types=1);

$firstName = "John";
$lastName = "Doe";
$age = null;

if (isset($firstName, $lastName, $age)) {
    echo "All variables are set";
} else {
    echo "Not all variables are set";
}

该代码一次检查三个变量。 由于 $age 为 null,isset 返回 false。 这对于验证多个必需变量非常有效。 必须设置所有变量,它才会返回 true。

数组元素检查

此示例演示了如何使用 isset 检查数组元素。

array_element.php
<?php

declare(strict_types=1);

$user = [
    'name' => 'John',
    'email' => 'john@example.com',
    'age' => null
];

if (isset($user['name'])) {
    echo "Name: {$user['name']}";
}

if (!isset($user['address'])) {
    echo "Address is not set";
}

该代码检查数组键是否存在。 请注意,$user['age'] 为 null,因此 isset 将返回 false。 这比 array_key_exists 在大多数情况下更安全。 始终使用 isset 进行数组元素检查。

表单输入验证

此示例演示了如何在表单提交中使用 isset。

form_validation.php
<?php

declare(strict_types=1);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['username'], $_POST['password'])) {
        // Process form data
        echo "Form submitted successfully";
    } else {
        echo "Please fill all required fields";
    }
}

该代码检查是否提交了表单字段。 这可以防止未定义的索引通知。 在处理之前,始终使用 isset 验证表单输入。 这对于安全的表单处理至关重要。

对象属性检查

此示例演示了使用 isset 检查对象属性。

object_property.php
<?php

declare(strict_types=1);

class User {
    public $name;
    private $email;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

$user = new User('John');

if (isset($user->name)) {
    echo "Name property exists";
}

if (!isset($user->email)) {
    echo "Email is not accessible or not set";
}

该代码检查对象属性是否存在。 请注意,私有属性从类外部使用 isset 时返回 false。 当在类中使用时,isset 适用于公共和私有属性。

使用 isset 的空合并运算符

此示例显示了空合并运算符作为 isset 的替代方法。

null_coalescing.php
<?php

declare(strict_types=1);

$username = $_GET['username'] ?? 'guest';

echo "Welcome, $username";

空合并运算符 (??) 检查左操作数是否存在且不为 null。 如果不是,则返回右操作数。 当变量可能不存在时,这将提供一个默认值。 它是 isset 检查的简写形式。

结合 isset 和 empty

此示例演示了 isset 和 empty 之间的区别。

isset_vs_empty.php
<?php

declare(strict_types=1);

$var1 = '';
$var2 = null;
$var3 = 0;

var_dump(isset($var1)); // true
var_dump(isset($var2)); // false
var_dump(isset($var3)); // true

var_dump(empty($var1)); // true
var_dump(empty($var2)); // true
var_dump(empty($var3)); // true

该代码显示了 isset 和 empty 的行为差异。 isset 检查是否存在,而 empty 检查“假”值。 当您只关心变量是否存在,而不是它的值时,请使用 isset。 empty 对于它认为是“empty”的内容有更严格的要求。

最佳实践

来源

PHP isset 文档

本教程涵盖了 PHP isset,并提供了实际示例,展示了它在各种场景中用于安全变量检查的用法。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 PHP 教程