我遇到了以下错误:Notice: Trying to get property of non-object in C:\xampp\htdocs\Time\app\classes\RadioStatus.class.php on line 42
我无法找到答案。
完整错误来自第42行至第45行。这些行:
$this->data->setData('stream_status', $this->simpleXML->STREAMSTATUS);
$this->data->setData('stream_titel', $this->simpleXML->SERVERTITLE);
$this->data->setData('stream_luisteraars', $this->simpleXML->CURRENTLISTENERS);
$this->data->setData('stream_huidigNummer', $this->simpleXML->SONGTITLE);
$this->data
是一个类,通过构造函数传递。这是因为我使用Depency Injections
。这就是数据类的工作原理(非常基本):
class Data
{
private $data = array();
function __construct()
{
$this->setData('naam', 'Time');
$this->setData('slogan', 'The time has come');
}
public function setData($key, $value)
{
return $this->data[$key] = $value;
}
public function getData($key)
{
return $this->data[$key];
}
}
如您所见,setData
函数存在。但是,我仍然得到那些错误。请帮助我找到这些错误的问题,如果需要更多代码,请说明。
编辑:
RadioStatus类:
class RafioStatus
{
function __construct($data)
{
$this->data = $data;
curl_setopt(curl_init(), CURLOPT_URL, '178.32.13.195:8004/admin.cgi?sid=1&mode=viewxml&page=1');
curl_setopt(curl_init(), CURLOPT_HEADER, false);
curl_setopt(curl_init(), CURLOPT_RETURNTRANSFER, true);
curl_setopt(curl_init(), CURLOPT_POST, false);
curl_setopt(curl_init(), CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt(curl_init(), CURLOPT_USERPWD, 'admin:Assembla12');
curl_setopt(curl_init(), CURLOPT_FOLLOWLOCATION, true);
curl_setopt(curl_init(), CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$this->xml = curl_exec(curl_init());
curl_close(curl_init());
$this->simpleXML = simplexml_load_string($this->xml);
$this->setData('stream_status', $this->simpleXML->STREAMSTATUS);
$this->setData('stream_titel', $this->simpleXML->SERVERTITLE);
$this->data->setData('stream_luisteraars', $this->simpleXML->CURRENTLISTENERS);
$this->data->setData('stream_huidigNummer', $this->simpleXML->SONGTITLE);
}
}
答案 0 :(得分:1)
请在尝试操作之前验证您的参数:
<?php
class RadioStatus
{
function __construct($data)
{
if (!($data instanceof Data)) {
throw new \InvalidArgumentException('$data is not valid');
}
// we are safe now...
$this->data = $data;
}
}
在这种情况下你也可以使用type hinting:
function __construct(Data $data) { /** code... */ }