PHP错误,if语句

PHP错误,if语句,php,codeigniter,if-statement,Php,Codeigniter,If Statement,这个代码有什么问题 if(isset($this->session->flashdata('login_error'))) { // Line 39 echo "You entered an incorrect email or password!"; } 我使用Codeigniter,会话加载在autoload.php中 我收到的错误消息是: 致命错误:无法在第39行的/Applications/XAMPP/xamppfiles/htdocs/applicat

这个代码有什么问题

if(isset($this->session->flashdata('login_error'))) {      // Line 39
     echo "You entered an incorrect email or password!";
}
我使用Codeigniter,会话加载在
autoload.php

我收到的错误消息是:

致命错误:无法在第39行的/Applications/XAMPP/xamppfiles/htdocs/application/views/login_view.php中的写入上下文中使用方法返回值


isset
仅当您试图使用可能不存在的变量时才有必要。在您的例子中,您正在调用一个函数,它肯定存在。因此,您不需要而且实际上不能在此处使用
isset
。如果您想测试值是否真实,只需使用
if($this->session->flashdata('login_error'))

只要检查($this->session->flashdata('login_error'))是否会返回false(如果此函数的结果为布尔值false或NULL)

您不能使用带有
isset
这样的函数。你能做的是:

$txt = $this->session->flashdata('login_error');
if(!empty($txt))
{
     echo "You entered an incorrect email or password!";
}

isset
仅检查变量是否已实例化。由于只能返回实例化的变量,
isset
在那里无效。你最好的选择是这样做:

if($this->session->flashdata('login_error') != null) {      // Line 39
     echo "You entered an incorrect email or password!";
}

尽管只是检查($this->session->flashdata('login_error'))是否会返回false,但如果此函数的结果是null的布尔false。这可能是更好的代码。胡说八道,直接测试返回值是否真实。@Col.Shrapnel-有none@Adam为什么要发布一个毫无意义的答案?你们不觉得答案应该是严格的字面意思吗?即使是胡说八道。在“这可能是更好的代码”中的“这”是指你们的答案还是你们的评论?这还不清楚。你应该编辑你的答案来澄清。目前,除非
flashdata()
返回
null
,否则
if
检查将始终为
true
,这可能不是预期的结果,因此毫无意义。如果(flashdata()==null),您可以获得与
相同的效果。谢谢,它可以工作。我遵循以下指南:,他使用isset,它对他有效。为什么?@Loka抱歉,我不想看15分钟的神经质视频来回答这个问题事实上,它不应该起作用。我理解,但无论如何还是要谢谢你。您的代码解决了此问题。请尝试将flshdata作为变量从控制器传递,并仅检查它是否在视图中设置。将尽可能多的实际数据从视图中分离出来是一种最佳做法感谢您的提示,按照您所说的做听起来更好;如果($txt)
<代码>空和
设置
仅在变量可能未设置时才是必需的。但是,您在前一行中非常明确地设置了它,因此没有必要进行测试。因此,您可以将其进一步缩短为
if(flashdata(…)
,以获得相同的效果。@deceze虽然您的第二个评论是正确的,但我倾向于将布尔表达式添加到
if
语句中以保持清楚,但这只是个人的偏好。关于第一条评论,可能是,但我对Codeigniter不太了解。这不是Codeigniter的事情,它是简单的PHP。:)我不希望在没有必要的情况下临时分配给变量,无论哪种方式,值都是布尔值。@deceze顺便说一句,我假设函数返回一个字符串。如果它返回
true
false
我肯定会直接把它放在
If
语句中……函数返回什么实际上并不重要,返回值和比较/求值的结果不会因将其赋给变量而改变。
isset
的参数不会求值(这就是为什么如果变量不存在,您不会收到通知);因此函数返回值与此无关。您试图确定函数本身是否存在,这对于
isset
无效。