PHP:注意:尝试获取非对象的属性

时间:2014-10-23 13:17:08

标签: php

我遇到了以下错误: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);
}
}

1 个答案:

答案 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... */ }