什么是摆脱未定义变量通知的最佳方法?

时间:2011-07-02 17:48:57

标签: php codeigniter

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

我知道在使用类似的东西时很容易摆脱注意事项:

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

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

但它非常烦人,它使代码看起来很难看,我也不想禁用通知报告。

对此有任何建议吗?

4 个答案:

答案 0 :(得分:4)

“最好”的方式?我仍然说它是isset。明白是很好的,这将有助于我,作为稍后维护你的代码的人,意识到你可以使用不存在的变量,这不仅仅是一个错误。除非isset检查在那里,否则我会假设你没有意识到它不可能被设置,并且想知道你实际上打算做什么。

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

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

这也使得以后更容易管理代码段,以防您稍后决定将输出包装在HTML标记中,或者添加else个案例。

另外,因为根据问题,我们不能搞乱错误报告设置,检查变量的存在是 only 选项。抱歉。要么检查它是否已设置,要么禁用错误消息,说明它不是。没有中间道路。

答案 1 :(得分:0)

我猜您会在主index.php文件的顶部找到错误报告() php函数。 然后查看针对您的问题的php manual

error_reporting(E_ALL ^ E_WARNING);   

答案 2 :(得分:0)

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

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

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

您也可以使用at符号(@)来抑制错误,我不建议这样做。

答案 3 :(得分:0)

将它放在函数__construct()部分的控制器中。

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