如何检查JavaScript对象或数组中是否存在特定键?
如果某个密钥不存在,并且我尝试访问它,它会返回false吗?或抛出错误?
这是不好的做法吗?
if ($_SESSION['something'] == '')
{
echo 'the session is empty';
}
Run Code Online (Sandbox Code Playgroud)
有没有办法检查它是空的还是没有设置?我实际上是这样做的:
if (($_SESSION['something'] == '') || (!isset($_SESSION['something'])) {
echo 'the session is either empty or doesn\'t exist';
}
Run Code Online (Sandbox Code Playgroud)
是否!isset
只检查是否$_SESSION['']
存在,并没有检查是否是有值的数组或不
作为开发人员,我开启了E_NOTICE.最近,我被问到为什么应该修复E_NOTICE错误.我能想出的唯一理由是纠正这些问题是最佳做法.
是否有其他人有理由证明为纠正这些问题花费的额外时间/成本是合理的?
更具体地说,如果代码已经运行,为什么经理要花钱来修复这些?
$a = NULL;
$c = 1;
var_dump(isset($a)); // bool(false)
var_dump(isset($b)); // bool(false)
var_dump(isset($c)); // bool(true)
Run Code Online (Sandbox Code Playgroud)
我如何从"真正不存在"中区分出$a
存在但具有价值的东西?NULL
$b
我在这个 SO Q&A中找到了关于如何检查变量是否存在的详细参考。
提到要检查一个类是否具有某个属性,可以使用(如 php.net 中所述):
$check = property_exists('MyClass', 'property_name');
Run Code Online (Sandbox Code Playgroud)
另外,对于“定义”的“常量”,可以使用:
$check = defined('MY_CONSTANT');
Run Code Online (Sandbox Code Playgroud)
问题:const
班级里的a怎么样?
详细说明...我有一个在多个项目中使用的类(最小示例):
class ProjectSettings {
const MY_CONSTANT = 'my constant';
}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个新功能,它需要“项目设置”,但如果该设置在类中不存在,则应应用默认值。
请注意,同一个类在多个项目中使用(具有不同的值)。在所有现有项目中实施这个新的常量将会很麻烦。但是,新功能位于现有脚本中,我可以使用此新版本更新旧项目,而无需更新 ProjectSettings 类(例如,如果甚至没有使用此新功能)。这就是为什么我想使用特征检测。
我在想:
if (defined(ProjectSettings::MY_CONSTANT)) {
$setting = ProjectSettings::MY_CONSTANT;
} else {
$setting = 'some default value';
}
Run Code Online (Sandbox Code Playgroud)
然而,我徒劳的尝试导致:
var_dump(ProjectSettings::MY_CONSTANT);
// string(11) "my constant"
// (as expected)
var_dump(ProjectSettings::MY_OTHER);
// generates a PHP Fatal error
var_dump(defined(ProjectSettings::MY_CONSTANT));
// bool(false)
// (it exists, but is not 'defined', oh well...)
var_dump(defined(ProjectSettings::MY_OTHER));
// …
Run Code Online (Sandbox Code Playgroud) 检查非空var的常用方法是:
if (!empty($var)) { ... }
Run Code Online (Sandbox Code Playgroud)
为什么我们不能使用:
if ($var) { ... }
Run Code Online (Sandbox Code Playgroud)
他们实际上是一样的,对吗?
PHP中非常基本的问题 - 我已将变量设置为null,为什么我在结果中得到错误?
$a = null;
var_dump(isset($a)); // false
Run Code Online (Sandbox Code Playgroud)
如果不是我所追求的变量,我如何检查是否设置了变量isset
?
我不能用empty
,例如,
var_dump(empty($b)); // false
Run Code Online (Sandbox Code Playgroud)
但$b
根本没有设定.
我可以在javascript中做到这一点,这更有意义,
if (typeof variable !== 'undefined') ...
Run Code Online (Sandbox Code Playgroud)