我有两个班级:
class BaseResource {
public $url;
protected $relativeUrl;
protected $parentUrl;
public function BaseResource($relUrl, $parentUrl) {
$this->relativeUrl = $relUrl;
$this->parentUrl = $parentUrl;
$this->url = url_to_absolute($parentUrl, $relUrl);
}
}
class XMLResource extends BaseResource {
private $xml;
public function XMLResource($relUrl, $parentUrl, $xml) {
parent::BaseResource($relUrl, $parentUrl);
$this->$xml = $xml;
}
}
这一切都非常简单,但是当我执行以下代码时,我收到错误。
$relUrl = "../something.html";
$parentUrl = "http://example.com/test/index.php";
$xml = new DOMDocument();
$xmlRes = new XMLResource($relUrl, $parentUrl, $xml);
捕获致命错误:类DOMDocument的对象无法转换为字符串
为什么假设XMLResource::xml
是一个字符串?我还没有使用它所以我认为它是未定义的,直到它被设置然后它采用它设置的任何类型?
答案 0 :(得分:5)
发现并不容易,你是在正确的位置:
$this->$xml = $xml;
但你必须只关注这一部分:
$this->$xml
请改为:
$this->xml = $xml;
背景:PHP尝试使用$xml
的内容作为文字变量名称,这在您的情况下不起作用,因为它需要一个字符串并且您提供了一个对象(没有{{1}方法)。
该功能称为Variable variablesDocs。
答案 1 :(得分:2)
我不确定为什么PHP假设$xmlRes->xml
是一个字符串但你的XMLResource
函数中有错误:
$this->$xml = $xml;
应该是:
$this->xml = $xml;
答案 2 :(得分:1)
$this->$xml = $xml;
应该是
$this->xml = $xml;
答案 3 :(得分:1)
您犯了一个小错误,将$this->$xml = $xml;
更改为$this->xml = $xml;
。