Задать вопрос

PHP: call_user_func_array() с цепочкой вызовов и PHPQuery?

Привет хабросообщество. Надеюсь на вашу помощь в решении проблемы:

Нормальный код примерно выглядит так:
$hentry = $document->find('a.pages');
foreach ($hentry as $element) {
		$_urls[]=pq($element)->attr('href')->html();
}



В виду «архитектурных» решений понадобилось реализовать следующий «финт ушами» на PHP:


У нас есть переменная!!! в виде:
$var="pq($element)->attr('href')->html()";

то есть в ней хранится цепочка вызовов методов класса.

Собственно вопрос прост: как «вызвать» всю эту цепочку?


Вроде ответ прост — можно использовать eval:
$var=eval("pq($element)->attr('href')->html();"); но он сыпется с ошибкой:
Object of class DOMElement could not be converted to string
, хотя тот же код вызванный напрямую работает прекрасно:
$var=pq($element)->attr('href')->html();


Как я понимаю call_user_func_array() впринципе не поддерживает цепочки вызовов с аргументами. Есть еще ReflectionFunction но пока не понял с какой стороны подходить к нему
  • Вопрос задан
  • 3434 просмотра
Подписаться 4 Оценить Комментировать
Решение пользователя romy4 К ответам на вопрос (5)
romy4
@romy4
Exception handler
why not?

<?php
$element = (object)array();

function pq($e)
{
  return new M($e);
}


class M 
{
public function __construct($e) { }
public function attr($a) { return $this; }
public function html() { return "OK"; }
}

$var='pq($element)->attr(\'href\')->html()';

eval('$out='.$var.";");

var_dump($out);


result: OK

чем вам eval() не угодил? Ну да, в данном случае не DOMDocument, дело же не в eval.
Ответ написан