【问题标题】:PHP throwing an error trying to get property of a non-objectPHP试图获取非对象的属性时抛出错误
【发布时间】:2020-03-27 20:40:47
【问题描述】:

这是一个旧栗子,但我在代码中看不到错误。我在 Windows 10、VSCode 中并使用 Codeigniter 3 框架。我正在尝试删除一条记录,但还要添加一条警报,指出该记录已成功删除。因此,首先我使用 id 并获取记录,将其保存为会话数据,删除记录,然后使用保存的数据发出警报,例如“您已成功删除 John Smith 的数据库条目”。这是我的控制器方法:

function member_delete($id) {
  $member = $this->get_where($id);
  $this->session->set_userdata('firstname',$member->firstname);
  $this->session->set_userdata('lastname',$member->lastname);
  if($this->_delete($id)){
    $firstname = $this->session->userdata('firstname');
    $lastname = $this->session->userdata('lastname');
    $this->session->set_flashdata('success', 'You have successfully deleted the database entry for '.$firstname.' '.$lastname);
    $this->members();
  } else {
    $this->session->set_flashdata('failure','There has been an error and the record has not been deleted');
    $this->members();
  }
}

这工作正常,警报已成功发布,但是当我刷新页面时,PHP 会引发(严重性:通知)错误“尝试获取非对象的属性”。错误行是方法的第二行,即 $method->firstname。

我在变量 $member 上运行了 var_dump,它绝对是一个对象,通过 result->row() 返回。

谁能告诉我怎么回事?

【问题讨论】:

  • 一旦您删除了该成员,看起来好像您正试图再次删除它们。所以$this->get_where($id)是找不到会员的。

标签: php codeigniter-3


【解决方案1】:

您正在获取 $member - 但随后您尝试访问属性而不知道 $member 已成功填写在上一行中

所以我要开始:

$member = $this->get_where($id);
if ( is_a($member, "someClass") )
{
  $this->session->set_userdata('firstname',$member->firstname);
  $this->session->set_userdata('lastname',$member->lastname);
} else
   // process failure

您说 var_dump() 返回一个对象 - 但它是否返回您期望的对象?是否所有预期的属性都存在?

其次,是谁或什么在调用这个函数? 如果您刷新页面,显然 member_delete() 会调用 $id 的值,该值不应再存在(因为您在上一个周期删除了它)。 所以要么 $id 由于某种原因是持久的,要么是用过时的数据调用它

【讨论】:

  • 好吧,我在删除之前将值保存为会话数据,希望在成员“离开”后我仍然可以在警报中使用这些信息。奇怪的是,我更改了模型以返回数组而不是对象,并且一切正常。我认为对象是棘手的事情。
猜你喜欢
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2019-03-21
  • 2016-12-23
  • 2013-04-11
相关资源
最近更新 更多