2011-08-09 12 views
1

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

回答

1
$this->$xml = $xml; 

应该

$this->xml = $xml; 
+1

我真的是个白痴。谢谢! –

2

我不知道为什么PHP是假设$xmlRes->xml是一个字符串,但你有一个错误在你XMLResource功能:

$this->$xml = $xml; 

应该是:

$this->xml = $xml; 
5

这不是那么容易被发现,你在右线:

$this->$xml = $xml; 

但你必须只看该部分:

$this->$xml 

而是执行此操作:

$this->xml = $xml; 

背景:PHP尝试使用$xml的内容作为字面变量名称,它不起作用,因为它需要一个字符串,而您提供了一个对象(它没有__toString()我的ThOD)。

该功能被称为Variable variablesDocs

1

您犯了1个小错误,将$this->$xml = $xml;更改为$this->xml = $xml;

相关问题