为什么PHP假设这个变量在任何地方还没有被使用时是一个字符串?
问题描述:
我有两个类:为什么PHP假设这个变量在任何地方还没有被使用时是一个字符串?
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);
Catchable fatal error: Object of class DOMDocument could not be converted to string
为什么被认为XMLResource::xml
是一个字符串?我还没有使用它,所以我会认为它是未定义的,直到它被设置,然后它将采取什么类型的设置?
答
$this->$xml = $xml;
应该
$this->xml = $xml;
答
我不知道为什么PHP是假设$xmlRes->xml
是一个字符串,但你有一个错误在你XMLResource
功能:
$this->$xml = $xml;
应该是:
$this->xml = $xml;
答
这不是那么容易被发现,你在右线:
$this->$xml = $xml;
但你必须只看该部分:
$this->$xml
而是执行此操作:
$this->xml = $xml;
背景:PHP尝试使用$xml
的内容作为字面变量名称,它不起作用,因为它需要一个字符串,而您提供了一个对象(它没有__toString()
我的ThOD)。
该功能被称为Variable variablesDocs。
答
您犯了1个小错误,将$this->$xml = $xml;
更改为$this->xml = $xml;
。
我真的是个白痴。谢谢! –