Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.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 如果在添加isset时始终设置为true_Php_Arrays_Object_If Statement_Isset - Fatal编程技术网

Php 如果在添加isset时始终设置为true

Php 如果在添加isset时始终设置为true,php,arrays,object,if-statement,isset,Php,Arrays,Object,If Statement,Isset,乍一看,这段代码似乎不错 // 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

乍一看,这段代码似乎不错

// 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\u err


为了解决这个问题,我添加了
isset()
,现在将我的代码片段设置为
if(isset($errors->domain_err)==1)
,但是,由于此更改,条件似乎总是设置为true,因此输出true。在保持我所期望的有条件输出的同时,还有其他方法可以克服通知吗?

为什么要尝试“克服”错误消息?修复导致错误的任何原因。在这种情况下,您引用的成员在所使用的对象中不存在。在您发布的代码中,我看不到您在哪里实例化了$errors类,也没有从中发布任何代码。查看任何类,看看是否定义了名为$domain\u err的成员变量,并确保该变量定义为公共可用。就个人而言,我不喜欢给成员变量提供公共作用域,因为我更喜欢提供一个get/set类型函数来设置或返回它们的值。

为什么要尝试“忽略”错误消息?修复导致错误的任何原因。在这种情况下,您引用的成员在所使用的对象中不存在。在您发布的代码中,我看不到您在哪里实例化了$errors类,也没有从中发布任何代码。查看任何类,看看是否定义了名为$domain\u err的成员变量,并确保该变量定义为公共可用。就个人而言,我不喜欢给成员变量公共作用域,因为我更喜欢提供一个get/set类型的函数来设置或返回它们的值。

之所以总是这样,是因为您现在将它与函数返回的值进行比较,这是真的,因为设置了$errors->domain\u err。您需要做的是将条件更改为:

如果(设置($errors->domain\u err)&&&$errors->domain\u err==1)


isset不返回变量的值,不管它是否存在。

之所以始终为true,是因为您现在正在将它与函数返回的值进行比较,这是true,因为设置了$errors->domain\u err。您需要做的是将条件更改为:

如果(设置($errors->domain\u err)&&&$errors->domain\u 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"; }

避免重复这种模式

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"; }