乍一看,这个片段似乎很好。
// my_controller.php
$data['errors'] = (object)$this->session->userdata('errors_registration');
$this->load->view('registration/my_view',$data);
// print_r($data['errors'])
// stdClass Object
// (
// [domain_err] => 0
// [wbholder_err] => 0
// [methodpayment_err] => 0
// [createaccount_err] => 2
// [gtc_err] => 0
// )
// my_view.php
if($errors->domain_err == 1) echo "TRUE"; else echo "FALSE"; // FALSE
当$data['errors']
为空时,
// print_r($data['errors'])
// stdClass Object
// (
// [scalar] =>
// )
// my_view.php
if($errors->domain_err == 1) echo "TRUE"; else echo "FALSE";
我明白了,
遇到PHP错误严重性:通知消息:未定义的属性:stdClass::$domain_err
为了处理这个通知,我添加了isset()
,使我的代码片段现在变成了if(isset($errors->domain_err) == 1)
,但是,由于这个更改,条件似乎总是设置为true,因此输出true。在保持我期望的条件输出的同时,是否还有其他方法可以绕过通知?
它总是为true的原因是,您现在正在将它与函数返回的值进行比较,这是true,因为设置了$errors->domain_err。您需要做的是将条件更改为:
如果(isset($errors->domain_err)&$errors->domain_err==1)
isset不返回变量的值,只返回变量是否存在。
以避免重复这种模式
if (isset($errors->domain_err) && $errors->domain_err == 1)
你可以写一个类似的函数
function check_value(&$variable) {
return (isset($variable) ? &$variable : false);
}
if (check_value($errors->domain_err)) { echo "ERROR"; }
else { echo "NO ERROR"; }
为什么要尝试"忽略"错误消息?修复导致错误的原因。在这种情况下,您引用的成员在您使用的对象中不存在。在你发布的代码中,我没有看到你在哪里实例化了$errors类,也没有发布任何来自它的代码。去看看它是什么类,看看你是否看到一个名为$domain_err的成员变量被定义,并确保它被定义为公开可用。就我个人而言,我不喜欢给成员变量提供公共作用域,因为我更喜欢提供get/set类型的函数来设置或返回它们的值。