什么';消除关于未定义变量的通知的最佳方法是什么


What's the best way to get rid of notices about undefined variables?

我使用codeigniter,视图的主要问题之一是可能存在也可能不存在的未定义变量。

我知道在使用这样的东西时很容易消除通知

<?=html($this->input->post('name'))?>

通过添加if(isset(..){ html($this->input->post('name')); }

但这很烦人,让代码看起来很难看,我也不想禁用通知报告。

对此有什么建议吗?

"最佳"方式?我还是说是isset。明确表示很好,这将帮助我,作为稍后维护代码的人,意识到你可以接受不存在的变量,这不仅仅是一个错误。除非有isset检查,否则我想你只是没有意识到不设置它是可能的,并且会想知道你到底想做什么。

此外,我断言它看起来很难看的主要原因之一是因为所有的代码都被塞进了一行。你要做两件事:检查它是否设置好了,如果设置好了就打印出来。也许把它们隔开会更好,即使它有点冗长:

<?php if( isset($this->input->post('name')) ): ?>
    <?= $this->input->post('name') ?>
<?php endif ?>

这也使代码段以后更容易管理,以防您以后决定将输出封装在HTML标记中,或添加else大小写。

此外,根据问题,由于我们不能篡改错误报告设置,因此检查变量的存在是唯一的选项。很抱歉您可以检查它是否已设置,也可以禁用表示未设置的错误消息。没有中间道路。

我想您会在主index.php文件的顶部找到错误报告((php函数。然后看看php手册,上面写着你的问题:

error_reporting(E_ALL ^ E_WARNING);   

最好的方法是始终定义变量。如果变量是一个输入(即,您不知道它是否已定义(,则需要使用isset((。就我个人而言,我使用包装器函数从输入变量中获取数据:

function get($key, $default = null) {
    return isset($_GET[$key]) ? $_GET[$key] : $default);
}

然后,您可以使用get('some_key')而不是使用$_GET['some_key']

您也可以使用我不建议使用的at符号(@(来抑制错误。

只需将其放在函数__construct((部分的控制器中即可。

function __construct() {
    parent::__construct();
    error_reporting(E_ALL ^ (E_NOTICE));
}