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

Nic*_*unt 1 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;
  }
}
Run Code Online (Sandbox Code Playgroud)

这都是非常简单的东西,但是当我执行以下代码时,我收到一个错误.

$relUrl = "../something.html";
$parentUrl = "http://example.com/test/index.php";
$xml = new DOMDocument();
$xmlRes = new XMLResource($relUrl, $parentUrl, $xml);
Run Code Online (Sandbox Code Playgroud)

可捕获的致命错误:类DOMDocument的对象无法转换为字符串

为什么假设它XMLResource::xml是一个字符串?我还没有使用它所以我认为它是未定义的,直到它被设置然后它采取任何设置的类型?

hak*_*kre 5

这不是那么容易发现,你是在正确的方向:

$this->$xml = $xml;
Run Code Online (Sandbox Code Playgroud)

但你必须只看这个部分:

$this->$xml
Run Code Online (Sandbox Code Playgroud)

改为:

$this->xml = $xml;
Run Code Online (Sandbox Code Playgroud)

背景:PHP尝试使用$xml作为文字变量名称的内容,这在您的情况下不起作用,因为它需要一个字符串并且您提供一个对象(没有__toString()方法).

该功能称为变量变量文档.