Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查类中是否存在元素';PHP5.6中的s数组常量_Php_Constants - Fatal编程技术网

检查类中是否存在元素';PHP5.6中的s数组常量

检查类中是否存在元素';PHP5.6中的s数组常量,php,constants,Php,Constants,如何检查像a\B::X['Y']['Z']这样的常量元素是否已设置 <?php namespace A; class B { const X = [ 'Y' => [ 'Z' => 'value' ] ]; } var_dump(defined('\A\B::X') && isset(\A\B::X['Y']['Z'])); 由于isset适用于变量(my bad)而不是任意表达式,

如何检查像a\B::X['Y']['Z']这样的常量元素是否已设置

<?php

namespace A;

class B
{
    const X = [
        'Y' => [
            'Z' => 'value'
        ]
    ];
}

var_dump(defined('\A\B::X') && isset(\A\B::X['Y']['Z']));

由于
isset
适用于变量(my bad)而不是任意表达式,因此可以使用
array\u key\u exists

namespace A;

class B
{
    const X = [
        'Y' => [
            'Z' => 'value'
        ]
    ];
}

var_dump(array_key_exists('Y', \A\B::X) && array_key_exists('Z', \A\B::X['Y']));

isset
仅适用于变量。您可以使用以下代码检查
A\B::X['Y']['Z']
是否存在:

var_dump(
    defined('\A\B::X') &&
    array_key_exists('Y', \A\B::X) &&
    array_key_exists('Z', \A\B::X['Y'])
);

您也可以简单地使用:

var_dump(@\A\B::X['Y']['Z'] !== NULL);
唯一需要注意的是,如果您的
const
可能被定义为NULL,则不能使用它。

在这种情况下,您可以选择为
const
a
'
(空字符串)值,这在PHP中相当等效。

@Rizier123 defined(a\B::X)返回true,但defined(a\B::X['Y']['Z'])返回false:(@Federico isset()触发致命错误。是否要检查常量是否存在以及它是否有元素集?
defined('a\B::X')&&isset(a\B::X['Y']['Z'])
谢谢,但根据我们公司的编码标准,STFU操作符不是一个选项。就我个人而言,我也不喜欢使用它。@user5483434我知道这有点宗教色彩。我同意不谨慎地建议不要使用它,但我坚决不同意它的总数(而且是盲目的,IMO)ban.抱歉,如果没有帮助的话。请不要抱歉,兄弟,我根本没有想到你的解决方案,我真的很感谢你教我这一点。但是根据我们的编码规则,我们不应该使用该运算符,直到有其他解决方案适合我们的需要,但我们并不是被禁止在所有情况下使用它,例如,PDO con中有一个bugstructor解决这个问题的唯一方法是使用这个操作符,在这种情况下我们是被允许的。实际上,虽然我们并没有被完全禁止,但我们使用@operator只是为了修复我们很多兆字节的PHP代码中的这个错误。@user5483434感谢您的澄清和友好的话语。目前
@
错误控制操作符前缀w我甚至会禁用将终止脚本执行的关键错误的错误报告。除其他外,这意味着如果您使用
@
来抑制某个函数中的错误,并且该函数不可用或输入错误,脚本将在那里死掉,而不说明原因。顺便说一下,这是一个不错的化身。:-)如果有人想知道:
isset
使用PHP7中的常量数组。似乎没有记录在案很高兴知道Ben Guest谢谢。似乎不合逻辑的是,isset不适用于显然设置为某个值的常量数组。PHP团队最终完成了这项工作。:)