初看起来,这个片段似乎没问题。
// 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 < / strong>即可。还有其他办法可以在保持我期待的条件输出的同时克服通知吗?
答案 0 :(得分:2)
它始终为真的原因是因为您现在将它与函数返回的内容进行比较,这是正确的,因为$ errors-&gt; domain_err已设置。您需要做的是将条件更改为:
if(isset($ errors-&gt; domain_err)&amp;&amp; $ errors-&gt; domain_err == 1)
isset不返回变量的值,只是它是否存在。
答案 1 :(得分:2)
避免重复此模式
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"; }
答案 2 :(得分:0)
为什么要尝试“克服”错误消息?修复导致错误的任何内容。在这种情况下,您将引用您正在使用的对象中不存在的成员。在您发布的代码中,我没有看到您实例化$ errors类的位置,也没有发布任何代码。去查看任何类,看看你是否看到一个名为$ domain_err的成员变量,并确保它被定义为公开可用。我个人不喜欢给成员变量公共范围,因为我更喜欢提供一个get / set类型函数来设置或返回它们的值。