为什么PHP假设这个变量是一个字符串,当它还没有在任何地方使用?

时间:2011-08-09 11:30:43

标签: php oop variable-types

我有两个班级:

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是一个字符串?我还没有使用它所以我认为它是未定义的,直到它被设置然后它采用它设置的任何类型?

4 个答案:

答案 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;