为啥“isset($a[0]) 和 unset($a[0]);”导致语法错误?

Posted

技术标签:

【中文标题】为啥“isset($a[0]) 和 unset($a[0]);”导致语法错误?【英文标题】:Why does "isset($a[0]) and unset($a[0]);" cause syntax error?为什么“isset($a[0]) 和 unset($a[0]);”导致语法错误? 【发布时间】:2015-09-03 14:39:49 【问题描述】:

我的代码:

$a = [];
isset($a[0]) and unset($a[0]);

它显示 "syntax error, unexpected 'unset' (T_UNSET)"

但是

$a = [];
isset($a[0]) and exit();

有效!

exit()unset() 都没有返回值。为什么一个有效,另一个无效?

【问题讨论】:

你能分享你的错误信息吗? exit 没有返回值,因为程序退出 代码这么丑,你到底想干什么? @AmbalMani '语法错误,意外'未设置' (T_UNSET)' 你应该阅读this ("How does php's unset work internally") 【参考方案1】:

unset 是一种语言结构,而不是真正的函数(这就是为什么你会得到 T_UNSET 而不是更通用的术语),因此它不会像普通函数那样按照相同的规则运行。 issetexit 也是语言结构,但它们的行为更像普通函数。

【讨论】:

【参考方案2】:

正如我在 cmets 中询问的那样,您说要从 Array 中删除一个值,

为什么不简单地写

$a = [];
if(isset($a[0]))
unset($a[0]);
// And exit() if you want to

【讨论】:

因为这是一种简单的书写和阅读方式……否则,将来编写您的代码的程序员会说您的坏话:P

以上是关于为啥“isset($a[0]) 和 unset($a[0]);”导致语法错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?