Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
PHP:在没有警告的情况下打印未定义的变量_Php_Variables_Warnings_Undefined - Fatal编程技术网

PHP:在没有警告的情况下打印未定义的变量

PHP:在没有警告的情况下打印未定义的变量,php,variables,warnings,undefined,Php,Variables,Warnings,Undefined,我只是想知道是否有一种快速的方法可以在没有得到警告的情况下回显未定义的变量?(我可以更改错误报告级别,但我不想更改。)到目前为止,我拥有的最小错误报告级别是: isset($variable)?$variable:“ 我不喜欢这样有几个原因: 这有点“冗长”和复杂 $variable重复 空白字符串的回声总是让我有点恼火 我的变量名可能会更长,例如$arrayvar['parameter'] 您可以使用@运行它 但是,最好不要忽略未设置的变量。未设置的变量可能表示脚本中存在逻辑错误,最好在使用

我只是想知道是否有一种快速的方法可以在没有得到警告的情况下回显未定义的变量?(我可以更改错误报告级别,但我不想更改。)到目前为止,我拥有的最小错误报告级别是:

isset($variable)?$variable:“

我不喜欢这样有几个原因:

  • 这有点“冗长”和复杂
  • $variable
    重复
  • 空白字符串的回声总是让我有点恼火
  • 我的变量名可能会更长,例如
    $arrayvar['parameter']
您可以使用@运行它

但是,最好不要忽略未设置的变量。未设置的变量可能表示脚本中存在逻辑错误,最好在使用前确保所有变量都已设置。

您可以使用ifsetor()示例,该示例取自:

echo @$variable;
例如:

echo ifsetor($variable);
echo ifsetor($variable, 'default');

这不会生成通知,因为变量是通过引用传递的。

使用@-运算符抑制错误会强制解释器更改错误级别,执行函数,然后更改回错误级别。这会减少脚本的运行时间

构建这样的函数将消除至少3个原因:

function echoVar($var, $ret=NULL) {
    return isset($var)?$var:$ret;
}

echoVar($arrayvar['parameter']);
但为什么要回显未定义的变量呢?这听起来好像不是很好的编码…

这是,他们打算用PHP6中的
isset_或()
(或类似的函数)来修复它,希望该功能也能应用到PHP5.3中。现在,您必须在问题中使用isset()/三元示例,或者使用@前缀来消除错误。嗯,这是在PHP中使用@的唯一理由。


使用带有空字符串的
echo
时,我不会担心速度问题,在
if
子句中封装它可能比只回显空字符串更昂贵。

未定义的变量非常常见,我建议您首先用null初始化变量

$var = null;
或禁用通知的错误报告:

error_reporting(E_ALL^E_NOTICE);

你可以用??PHP7及更高版本的选择器

echo $variable??'not defined';

我经常发现自己对此规则的一个例外是未设置数组索引。这些东西可能到处都是。最好把它作为@$变量放在变量本身上,这样它只会抑制未设置的错误。是的,谢谢你。由于我提到的原因,我几乎从未使用过这个操作符:)完全同意这不是最佳做法的建议。我发现@在进行数据库连接或文件操作时非常有用,如果出现故障,则会显示错误。例如:“if($fh=@fopen('myfile','w'))”-它允许您优雅地处理任何问题。iirc这仍然会产生错误,因为php正在向函数发送未定义的变量,即使isset在其中。它不会,因为它是通过引用传递的。我认为echoVar需要通过引用接受$var,为了不显示错误。真的不是个好主意。如果这似乎是“有点“冗长”和复杂”,那么你在未来会有一些惊喜。。。这不可能成为你的应用瓶颈。开始使用检查var的好习惯。如果你愿意,可以使用自己的函数来加速过程。@esatis:我根本不是说速度。。。
error_reporting(E_ALL^E_NOTICE);
echo $variable??'not defined';