Почему PHP предполагает, что эта переменная является строкой, когда она еще нигде не использовалась? - PullRequest
1 голос
/ 09 августа 2011

У меня есть два класса:

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 ]

5 голосов
/ 09 августа 2011

Это не так легко определить, вы находитесь на правильной линии:

$this->$xml = $xml;

Но вы должны смотреть только на эту часть:

$this->$xml

Сделайте это вместо:

$this->xml = $xml;

Справочная информация: PHP пытается использовать содержимое $xml в качестве имени буквенной переменной, что не работает в вашем случае, потому что ему нужна строка, а вы предоставляете объект (у которого нет __toString() метод).

Функция называется Переменные переменные Документы .

2 голосов
/ 09 августа 2011

Я не уверен, почему PHP предполагает, что $xmlRes->xml - строка, но у вас есть ошибка в вашей функции XMLResource:

$this->$xml = $xml;

должно быть:

$this->xml = $xml;
1 голос
/ 09 августа 2011

Вы допустили 1 крошечную ошибку, измените $this->$xml = $xml; на $this->xml = $xml;.

1 голос
/ 09 августа 2011
    $this->$xml = $xml;

должно быть

$this->xml = $xml;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...