当前位置: 首页 > 面试题库 >

测试PHP中变量是否存在的最佳方法;isset()显然已损坏

周意智
2023-03-14
问题内容

isset()文档:

isset() will return FALSE if testing a variable that has been set to NULL.

基本上,isset()不检查是否已设置变量,而是检查是否将其设置为NULL

鉴于此,实际检查变量是否存在的最佳方法是什么?我尝试了类似的东西:

if(isset($v) || @is_null($v))

(未设置@时有必要避免警告$v),但is_null()有一个类似的问题isset():它会返回TRUE设置的变量!还显示:

@($v === NULL)

的工作方式与完全相同@is_null($v),所以也可以了。

我们应该如何可靠地检查PHP中是否存在变量?

编辑:PHP中未设置的变量与设置为的变量之间显然存在差异NULL

<?php
$a = array('b' => NULL);
var_dump($a);

PHP表明$a['b']存在并且具有NULL价值。如果添加:

var_dump(isset($a['b']));
var_dump(isset($a['c']));

您可以看到我在谈论该isset()功能的含糊之处。这是所有这三个的输出var_dump()s

array(1) {
  ["b"]=>
  NULL
}
bool(false)
bool(false)

进一步编辑:两件事。

一,用例。将数组转换为SQL
UPDATE语句的数据,其中数组的键是表的列,而数组的值是要应用于每一列的值。该表的任何列都可以保存一个NULL值,通过NULL在数组中传递值来表示。您
需要 一种区分不存在的数组键和将数组的值设置为NULL;的方法。这就是不更新列的值和将列的值更新为的区别NULL

其次,Zoredache的答案,array_key_exists()工作正常,我上面的用例和任何全局变量:

<?php
$a = NULL;
var_dump(array_key_exists('a', $GLOBALS));
var_dump(array_key_exists('b', $GLOBALS));

输出:

bool(true)
bool(false)

由于可以正确处理几乎所有地方,我可以看到不存在的变量与设置为的变量之间有任何歧义NULL
我在调用array_key_exists()PHP中最正式的最简便的方式来真正检查变量是否存在

(我只能想到的其他情况是针对类属性的property_exists(),根据其文档,它的工作方式与之类似array_key_exists(),因为它可以正确地区分未设置和被设置为NULL。)


问题答案:

如果您要检查的变量位于全局范围内,则可以执行以下操作:

array_key_exists('v', $GLOBALS)


 类似资料:
  • 问题内容: 我试图找出表中是否存在行。使用MySQL,最好执行如下查询: 并检查总数是否为非零或执行以下查询更好: 并检查是否返回任何行? 在两个查询中,WHERE子句均使用索引。 问题答案: 您也可以尝试: 根据文档,您可以执行任何操作。 传统上,EXISTS子查询以SELECT 开头,但可以以SELECT 5或SELECT column1或任何其他形式开头。 MySQL会忽略此类子查询中的SE

  • 问题内容: 查看URL存在并且响应不是404的最佳方法是什么? 问题答案: 您可以使用 手册中的示例2 : 第一个数组元素将包含HTTP响应状态代码。您必须解析它。 请注意,示例中的函数将发出HTTP HEAD请求,这意味着它将不会获取URL的正文。这比使用GET请求(也将返回正文)更有效。 还要注意,通过设置 默认 上下文,任何使用http流上下文的后续调用现在都将发出HEAD请求。因此,确保完

  • 问题内容: 使用PHP(给定URL),如何确定它是否是图像? URL没有上下文-它只是在纯文本文件的中间,或者可能只是一个字符串。 我不希望开销很大(例如,读取URL的内容),因为页面上的许多URL都可以调用此方法。鉴于此限制,识别所有图像并不是必需的,但是我想作一个很好的猜测。 目前,我只是在看文件扩展名,但是感觉应该有比这更好的方法。 这是我目前拥有的: 编辑: 如果对其他人有用,这里是使用E

  • 问题内容: 目前,我在隐藏的输入字段中回显某些变量,并在需要时使用Javascript读取它们。 我和一个同事现在正在考虑使用PHP生成一个额外的Javascript文件,该文件仅包含Javascript的所有变量。这样,变量已经存在,HTML中没有多余的代码。 有什么好的方法可以将变量从PHP传递到Javascript?我们的解决方案听起来如何? 问题答案: 通用数据传递 JavaScript常

  • 本文向大家介绍Python 检查数组元素是否存在类似PHP isset()方法,包括了Python 检查数组元素是否存在类似PHP isset()方法的使用技巧和注意事项,需要的朋友参考一下 PHP中有isset方法来检查数组元素是否存在,在Python中无对应函数。 Python的编程理念是“包容错误”而不是“严格检查”。举例如下: 所以在Python中一般可以通过异常来处理数组元素不存在的情况

  • 问题内容: 我需要检查一组页面对象,以查看每个对象是否在其WebDriver上调用了quit()。 我编写了以下方法来检查WebDriver的状态: 问题就在这里:我不喜欢抛出异常来发现布尔值的真相,但是由于 WebDriver API 没有提供检查驱动程序是否退出的方法,因此我似乎别无选择。 所以我的问题是, 是否有更好的方法来检查WebDriver是否已退出? 我在这里找到了一个类似的问题(但