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