两者的区别,简单来说就是:
isset(""); // true
empty(""); // true
isset([]); // true
empty([]); // true
isset(false); // true
empty(false); // true
isset(0); // true
empty(0); // true
isset("0"); // true
empty("0"); // true
个人认为empty()
更合理,毕竟弱类型,要弱就弱到底呗,但是看到很多地方用isset()
,包括那些开源框架
本人再次看了文档,发现了这个
Note:
在 PHP 5.5 之前,empty() 仅支持变量;任何其他东西将会导致一个解析错误。换言之,下列代码不会生效: empty(trim($name))。 作为替代,应该使用trim($name) == false.
php5.5之后,没有警告会产生,哪怕变量并不存在。 这意味着 empty() 本质上与 !isset($var) || $var == false 等价。
同时意味着empty() 可以一把梭了,没毛病吧
1
realpg 2018-11-09 16:43:49 +08:00 1
这俩不是一个功能,谢谢
|
2
barbery 2018-11-09 16:45:57 +08:00
服了,建议多看文档吧
|
3
richangfan 2018-11-09 16:45:59 +08:00
这俩不是一个功能,谢谢
|
4
helionzzz 2018-11-09 16:46:35 +08:00 1
一个是检查是否为空,一个是检查是否赋值。。这俩在你看来是可以互相代替的嘛。。
|
5
shiny 2018-11-09 16:47:08 +08:00
区别没理解对,建议先啃下文档。
|
6
yiqiao 2018-11-09 16:48:52 +08:00 2
楼主记住这贴是你的耻辱柱,233
|
7
alex321 2018-11-09 16:49:26 +08:00 5
if (isset($data) && !empty($data)) { return $data;}
isset 是检查有么有,empty 是检查有无赋值。。。。 你直接用 if (!empty($data)) { return $data;} 会报 data 未定义的。 |
8
yunye 2018-11-09 16:50:45 +08:00
在楼主的学习生涯中强势 mark 一下
|
9
zsdroid 2018-11-09 16:55:08 +08:00
你来黑 php 的吧
|
10
ThirdFlame 2018-11-09 16:57:38 +08:00
看七楼的解释。
|
11
jevonszmx 2018-11-09 17:01:56 +08:00
哈哈,楼主会后悔发了这贴的。
|
12
gw1992225 2018-11-09 17:05:47 +08:00
同楼上 , 楼主下次发帖子好好看下 PHP 文档
|
14
JaguarJack 2018-11-09 17:08:09 +08:00
经此一贴,楼主从此放弃使用 php
|
16
silencefent 2018-11-09 17:11:03 +08:00
$arr = [];
var_dump(empty($arr['item'])); bool(true) var_dump(isset($arr['item'])); bool(false) |
17
toxicant 2018-11-09 17:12:12 +08:00
算是知道 php 为什么招黑了...
|
18
OMGZui OP 羞愧羞愧,一直以来都是把这两个混为一谈,empty()一把梭,在下学习了,好在问出来了。
|
19
jfcherng 2018-11-09 17:12:40 +08:00
|
20
poisedflw 2018-11-09 17:17:33 +08:00 1
```
<?php # 1 $data = [ 'key' => '' ]; if (isset($data['key'])) { echo "not null"; } if (!empty($data['key'])) { echo "not empty"; } #2 $data = [ 'key' => null, ]; if (isset($data['key'])) { echo "not null"; } if (!empty($data['key'])) { echo "not empty"; } ``` 理解下。 |
21
seven2016 2018-11-09 17:21:08 +08:00
这个都没有区分清楚,这是要写下多少 bug 呀
|
22
airdge 2018-11-09 17:29:58 +08:00
一个变量存在 一个变量非空或非零
两个功能不一样 |
23
WytheHuang 2018-11-09 17:31:15 +08:00
> empty 判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。
手册看一遍吧。 |
24
WytheHuang 2018-11-09 17:33:25 +08:00
再上一条
> 没有警告会产生,哪怕变量并不存在。 这意味着 empty() 本质上与 !isset($var) || $var == false 等价。 |
25
hubahuba 2018-11-09 17:37:04 +08:00
楼主 你这个号算是废了= = 要是让人家知道。。你有工作丢工作 没工作找不到工作= =
|
26
hubahuba 2018-11-09 17:37:22 +08:00
哈哈哈最关键的是一本正经的装逼 结果装逼失败
|
27
way2create 2018-11-09 17:39:17 +08:00
看英文也知道不能一概而论
|
30
OMGZui OP @way2create 是不能一概而论,主要是平时编码的时候都是判断变量是否为空,那么两个函数功能就是一样的
|
32
freefcw 2018-11-09 17:55:28 +08:00 1
都不懂什么叫做语义么,虽然都能做某件事,但是你代码要做什么,通过使用哪个函数就能区别出来
我对这两个函数特别讨厌,因为滥用的人太多了,这两个函数功能太泛了,无法给出代码的含义 |
34
VeryZero 2018-11-09 18:01:52 +08:00
有这种情况是变量未定义。。
|
35
Seanfuck 2018-11-09 18:03:44 +08:00
从不用 empty,直接 if($x)。isset 需要时必须要用的
|
36
chairuosen 2018-11-09 18:09:00 +08:00
这俩玩意语意是相反的,有个判断有,一个判断无。你给出的全是结果相同的特例。居然能认为可以相互替换?
|
37
ruixingchen 2018-11-09 18:09:31 +08:00
|
38
KiseXu 2018-11-09 18:13:47 +08:00
哥们,isset() 不等于 !empty(),
比如 $x = ""; ,isset() 、empty() 结果都是 true 官方文档有详细的比较: http://php.net/manual/zh/types.comparisons.php |
39
klgd 2018-11-09 19:43:16 +08:00
```
$a = null; $b = 0; isset($a); // false isset($b); // true empty($a); // true empty($b); // true ``` |
40
mingyun 2018-11-09 22:02:55 +08:00
7 楼正解
|
41
topzyh 2018-11-09 22:56:59 +08:00
干脆
if ( @$data ) { } |
43
falcon05 2018-11-09 23:17:15 +08:00 via iPhone
如果你把错误报告的等级开到最高,你肯定会留意它们是不一样的
|
44
1070794219 2018-11-09 23:33:47 +08:00
empty(空数组) == true, 之前获取某一目录下的文章时,如果当前目录下没有文章(array 为[]),empty 判为 true, isset 为 true
|
45
1010011010 2018-11-09 23:50:36 +08:00
都不用。
替代: if ($foo) {} if ($foo === null) {} 行为一致,但更简洁 报错?把你 notice 给我关了! |
46
1010011010 2018-11-10 00:00:32 +08:00
当然要判断是否已定义时,还是使用 isset($foo) 而不是 $foo !== null
都是为了可读性,兄弟 |
47
JasonTsang 2018-11-10 05:41:58 +08:00
应该是两个不一样的东西吧
isset 不能跟 empty 混用,isset 是用来判断变量是否有定义的 empty 是判断是否为空的 |
48
keepeye 2018-11-10 10:12:11 +08:00
顶上去
|
49
huobazi 2018-11-10 11:13:09 +08:00 via iPhone
平时都是你们黑 php,一有独秀的机会,都暴露了,都是 phper,哼哼
|
50
konakona 2018-11-10 14:22:42 +08:00
谁告诉你 empty 可以一把索?
在强类型的语言里,一个没有声明过的变量拿来用,empty 就会报错。 你可以将 PHP 的报错等级全开,你就明白了。 撇开强弱类型,以 Laravel 这个框架来说。它的等级,也是开的比较高了的。所以你如果写 <?php //$abc = '123';//隐藏掉声明 var_dump(empty($abc));//一个你没有声明过的变量 是会报错的,所以你要先 if(isset($abc)){var_dump(empty($abc));} 这 2 个函数根本就不是一个意思。 |
51
konakona 2018-11-10 14:25:05 +08:00
简单来说,一个未声明过的变量,就是说,一个不存在的东西,不存在就是 null
所以,var_dump($abc === null) 会是 true。 一个不存在的东西,你怎么在程序里用?它会报错!告诉你这个东西不存在。 所以我们可以用 isset($abc) 或者 $abc !== null 来让程序做一个判断,如果为真,代表这个变量存在(也就是声明它存在),那么就可以继续用它去做其他事,比如你说的 empty()。 |
52
konakona 2018-11-10 14:28:40 +08:00
isset() 就是 is set 这个意思呀~
相当于是问程序,这个东西是不是(is) 声明过(set)的一个意思! 而 empty(),就是相当于 is this empty ? 就是为里面的东西是不是空的?空是什么意思?空是 null、""、0。 这又引发一个新的思考。 null 就是 void 吗?不是。null 是一个特殊的类型。在其他语言里没有 null,在 php 里 null 被用来代表“无”。 一个未声明的变量,你 var_dump 打印它。在弱环境下,会显示 null。在强类型环境下,会报错。为啥?因为没有声明呀~没有声明就是不可以用~~ |
53
konakona 2018-11-10 14:29:38 +08:00
补充一下。
为什么弱环境里可以打印出未声明的变量为 null 这个结果呢?是因为弱类型语言,会自动转换类型。 这是基础中的基础。 |
54
konakona 2018-11-10 14:33:14 +08:00
好比方说,我们这个世界不知道什么叫数学的“派”。
在全世界都不知道(没有声明、没有发表、没有通知全世界)的时候,你疯狂的用派。全世界都不知道你想干什么,全世界都乱了。 这就是程序里面为什么要先问“你知道派是什么吗?” 如果程序知道,就继续走用派的流程。如果程序不知道,你就写 else,并且为派声明。告诉大家,派是什么,介绍完毕后,也就能继续正常执行派的流程。 |
55
konakona 2018-11-10 14:36:45 +08:00
紧接着上面的例子好了……
而 empty 又怎么理解? 在全世界都知道有派的存在情况下,可能存在有些人只是听说过派,却不了解派。所以它对派的理解是“空”的( null )。 这个时候你可以问这个人: if(isset($pai)){//你知道派吗? //他说知道。 if(empty($pay)){//那你懂派吗? //不懂。。你告诉我 $pay = '3.1415...'; }else{ //我懂 echo $pai ; } } |
58
wo642436249 2018-11-12 08:50:53 +08:00
@yiqiao 6666666
|