首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP empty()奇怪的行为

PHP empty() 函数用于检查一个变量是否为空。但是,在某些情况下,它会表现出奇怪的行为。

当使用 empty() 函数检查一个未定义的变量时,它会返回 true。这是由于 empty() 函数设计上的一个历史问题,它原本应该检查变量是否被赋值,但是实现上却检查了变量是否被定义。

为了解决这个问题,可以使用 isset() 函数来检查变量是否被赋值。如果变量未被赋值,isset() 函数将返回 false,而 empty() 函数将返回 true。

示例代码:

代码语言:txt
复制
$variable = '';

if (empty($variable)) {
    echo 'The variable is empty';
} else {
    echo 'The variable is not empty';
}

if (isset($variable)) {
    echo 'The variable is set';
} else {
    echo 'The variable is not set';
}

输出:

代码语言:txt
复制
The variable is empty
The variable is set

注意:empty() 函数还有一个参数,可以指定检查的严格程度。如果指定为 boolean 类型的 true,则 empty() 函数将检查变量是否为空,而不管它是否被定义。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

delete奇怪行为

delete奇怪行为分为2部分: // 1.delete用defineProperty定义属性报错 // Uncaught TypeError: Cannot delete property 'value...但规则是这样,所以奇怪行为1是合理 占位初始值 猜测如果属性已经存在了,defineProperty()会收敛一些,考虑一下原descriptor感受: var obj = {}; obj.value...环境(比如onclick属性值执行环境,函数调用创建执行环境)和eval环境(eval传入代码执行环境) 变量对象/活动对象 每个执行环境都对应一个变量对象,源码里声明变量和函数都作为变量对象属性存在...) P.S.变量对象与活动对象这种“玄幻”东西没必要太较真,各是什么有什么关系都不重要,理解其作用就好 eval环境特殊性 eval执行环境中声明属性和函数将作为调用环境(也就是上一层执行环境)变量对象属性存在...,能不能删可能只是configurable一部分) 遵循规则是:通过声明创建变量和函数带有一个不能删天赋,而通过显式或者隐式属性赋值创建变量和函数没有这个天赋 内置一些对象属性也带有不能删天赋

2.3K30

php empty()和isset()区别

在使用php编写页面程序时,我经常使用变量处理函数判断php页面尾部参数某个变量值是否为空PHP 在使用 php 编写页面程序时,我经常使用变量处理函数判断...php 页面尾部参数某个变量值是否为空,开始时候我习惯了使用 empty() 函数,却发现了一些问题,因此改用 isset() 函数,问题不再。...当一个php页面的 URL 尾部参数出现 id=0 时(比如:test.php?...TRUE,isset()会返回FLASE; 手册中对empty()解释如下: 描述bool empty( mixed var ) 如果 var 是非空或非零值,则 empty() 返回 FALSE...若使用 isset() 测试一个被设置成 NULL 变量,将返回 FALSE。同时要注意是一个 NULL 字节("\0")并不等同于 PHP NULL 常数。

2K60
  • PHP——isset和empty

    前言 对于这两个PHP函数大家肯定都很熟悉,但是其二者区别又有那些呢? 对比 isset  | 检测变量是否被设置过 1. 变量不存在,返回FALSE 2....变量存在且值不为NULL,返回TURE  empty | 检测变量是否为空 1.变量存在且值为非空非零值,返回FALSE 2.变量存在且值为空为零时,返回TRUE PHP变量被认为空几种情况 1."...php $var = 0; // true if (empty($var)) { echo 'true, $var为空'; } // true if (isset($var)) {...>  由此可见,当判断一些变量时候,不能一味使用empty或者isset,应该根据实际情况去使用,如:用户昵称 如果用户昵称就是0那你用empty判断不就出问题了嘛,但是如果用户昵称为空字符串时...,用isset判断也同样会有问题, 所以这种情况下就不能简单empty或者isset就进行判断。

    10710

    PHPempty() 和 isset() 区别

    若使用 isset() 测试一个被设置成 NULL 变量,将返回 FALSE。同时要注意是 null 字符("\0")并不等同于 PHP NULL 常量。...1、对于未设置变量判断 // 对于未设置变量判断 if (empty($a)) { echo "empty:变量为空" ....""; } ##结果 empty:变量为空 isset:变量未设置或变量为空 2、对于 "" (空字符串) 判断 // 对于 "" (空字符串) 判断 $a = ""; if (empty(...""; } ##结果 empty:变量为空 isset:变量已设置且不为空 3、对于 0 (作为整数0) 判断 // 对于 0 (作为整数0) 判断 $a = 0; if (empty(...""; } ##结果 empty:变量为空 isset:变量已设置且不为空 4、对于 0.0 (作为浮点数0) 判断 // 对于 0.0 (作为浮点数0) 判断 $a = 0.0; if

    1.2K40

    PHP开发过程那些坑(五) ——PHPempty()

    PHP开发过程那些坑(五)——PHPempty() (原创内容,转载请注明来源,谢谢) 一、遇到问题 PHPempty不是一个函数,而是一个语言结构,用其可以判断大多数变量是否为空。...但是,在判断private属性(已经用魔术方法__get()保证可以获取到)时候,会发生奇怪事情。...2、$prop = $obj->prop; empty($prop); 3、将对象private设置成public。...——written by linhxx 2017.09.14 相关阅读: PHP开发过程那些坑(四) ——PDO bindParam函数 PHP开发过程那些坑(三) ——PHParray_shift...函数 PHP开发过程那些坑(二) ——PHP empty函数 PHP开发过程那些坑(一) ——对象拷贝

    96360

    PHPempty,is_null,isset区别

    empty 判断变量是否为空,如果变量是非空 或非零 值,则 empty() 返回 FALSE。...若使用 isset() 测试一个被设置成 NULL 变量,将返回 FALSE。同时要注意是一个 NULL 字节("\0")并不等同于 PHP NULL 常数。...从以上例子中,我们也可以得出下面这几个结论(以后编程中会经常用到哦): 假设 $var 是任何type 当 empty(var) 为 true 时,(bool)(var) 为 false 。...例如: i=j+1; 这里is_null(j)为true(可以理解为因为 isset(j)为false,因为没有事先声明 另外需要注意两点是: (1)empty() 只检测变量,检测任何非变量东西都将导致解析错误...换句话说,后边语句将不会起作用: empty(addslashes($name))。 (2)isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。

    1.1K20

    PHP开发过程那些坑(二) ——PHP empty函数

    PHP开发过程那些坑(二)——PHP empty函数 (原创内容,转载请注明来源,谢谢) 坑: 在工作过程中,常用empty()函数判断数组是否为空,为空时返回true,不是为空时返回false。...分析: 查看PHP官方手册,http://php.net/manual/zh/function.empty.php,发现里面有这么一段话:“在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误...在更新日志中,发现“PHP5.5.0 empty() 现在支持表达式了,而不仅仅是变量。”...因此,说明在PHP5.5或者更高版本,是可以支持empty()里面传其他内容,但是如果使用PHP5.5之前版本,还是先定义一个变量,再把这变量传进empty。...——written by linhxx 2017.07.08 相关阅读: PHP开发过程那些坑(一) ——对象拷贝

    1.1K80

    taskscheduler java_java – taskScheduler池奇怪行为「建议收藏」

    我有两个弹簧启动应用程序(1.4.3.RELEASE),它们位于同一台服务器上.应用程序A是一个单一应用程序,其中包含用于处理警报部分代码,而应用程序B是一个仅处理警报新专用应用程序.这里目标是打破小应用程序中...threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true); threadPoolTaskScheduler.setPoolSize(100); return threadPoolTaskScheduler; } } 昨天,我经历了一个奇怪行为...已检测到警报并将其发送到新应用B – >好 >应用程序B收到警报并开始根据taskScheduler处理它 – >好 >第一步已由应用程序B处理 – >好 >第二步已由应用程序A处理 – > NOK,奇怪行为...对我来说,每个taskScheduler都附加到创建它应用程序.我哪里错了?...UPDATE 我有一个发出警报真实盒子.这些警报必须由新应用程序处理.但我还有旧盒子没有迁移到新系统.所以我在两个不同项目中有处理代码.

    1.8K10

    php中isset与empty函数困惑与用法分析

    本文实例讲述了php中isset与empty函数困惑与用法。...分享给大家供大家参考,具体如下: 在学习php有一段时间之后,感觉自己基础知识还是有点不牢固,有的问题就不怎么知道,比如就有一个,在判断一个变量是否为空情况下,我就不知道是用isset()还是empty...empty():用于判断一个变量是否为空,如果是整形0,浮点型0.0,字符型’ ‘和’0’,还有布尔型false,NULL型null,空数组等 <?...php $a = null; var_dump(empty($a));//true $b = ""; var_dump(empty($b));//true $c = "0"; var_dump...,结果我用了empty()函数,最后,就出现bug了,我用empty()进行判断,把我传过来变量值为0情况就给排除了。

    74941

    PHP为什么empty可以访问不存在索引

    开始之前, 先抛出问题: $arr = []; echo 'empty: ', PHP_EOL; var_dump(empty($arr['1'])); echo 'is_array: ', PHP_EOL...有没有发现, 编译器在显示时候, empty函数和is_array函数颜色不一样. 而empty和echo是相同颜色, 那不就是说他们俩是一类货色么. 再看一下: ? 有没有发现什么?...PHP关键字用就是这个颜色. 我仿佛明白了些什么. 随后, 我就去翻了翻官方文档, 还真让我发现了些许端倪, 在empty函数文档下, 有这样一段: ?...简单来说, 就是 PHP 所定义那些关键字. 虽然用法看起来像函数, 但是在调用时候直接映射到预先定义好一系列操作, 而不会像函数一样进行传参等等解析操作....对了, 再悄悄告诉你, PHP 中, 系统函数是可以被重新定义, 只要你写一个同名函数就行, 但是关键字这几个老兄不吃这一套哦.

    63920
    领券