@ 2017-07-13T08:10:18Z <?php
class MyParser {
private $domdoc;
public function __construct(DOMDocument $domdoc){
$this->domdoc = $domdoc;
}
public function __toString()
{
return $this->domdoc->saveHTML();
}
protected function replaceVariableInside($varName, $text, $idType, $idValue)
{
$nodes = $this->getNodes($idType, $idValue);
$newTextNode = $this->getNodeFromText($text);
array_map(function($node) use ($varName, $newTextNode){
/* @var $node DOMNode */
$textNodes = array_filter($node->childNodes, function($node){
return $node->nodeType === XML_TEXT_NODE;
});
foreach ($textNodes as $textNode)
{ /* @var $textNode \DOMText */
$pos = strpos($textNode->nodeValue, $varName);
if($pos !== false)
{
$newNode = $textNode->splitText($pos);
$newNode->nodeValue = substr($newNode->nodeValue, strlen($varName));
$newNode->insertBefore($newTextNode);
}
}
}, $nodes);
}
protected function getNodes($idType, $idValue)
{
switch ($idType){
case 'id':
return [
$this->domdoc->getElementById($idValue)
];
break;
case 'class':
return (new DOMXPath($this->domdoc))
->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $idValue ')]");
break;
default:
break;
}
}
protected function insertInto($idType, $id, $text)
{
$newnode = $this->getNodeFromText($text);
array_map(function($elementOfDom) use ($newnode){
/* @var $elementOfDom DOMNode */
@$elementOfDom->appendChild($newnode);
}, $this->getNodes($idType, $id));
}
protected function getNodeFromText($text)
{
$text = html_entity_decode($text);
try
{
$tmp = new DOMDocument;
$textDocumentRes = @$tmp->loadHTML('<?xml encoding="utf-8" ?><span>'.$text.'</span>');
}
catch(Exception $e)
{
$textDocumentRes = false;
}
if($textDocumentRes)
{
$newnode = $this->domdoc->importNode($tmp->documentElement->firstChild->firstChild, true);
}
else
{
$newnode = $this->domdoc->createTextNode($text);
$newnode->nodeValue = $text;
}
return $newnode;
}
}
$domdocu = new DomDocument();
$domdocu->loadHTML('
<html>
<head>
</head>
<body>
<div id="first">
%ELEMENT%
</div>
<div class="second">
%ELEMENT%
<div class="third">
%ELEMENT%
</div>
</div>
<div class="fourth">
%ELEMENT%
</div>
</body>
</html>
');
$parser = new MyParser();
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Output for git.master , git.master_jit , rfc.property-hooks Fatal error: Uncaught ArgumentCountError: Too few arguments to function MyParser::__construct(), 0 passed in /in/OmMhU on line 115 and exactly 1 expected in /in/OmMhU:6
Stack trace:
#0 /in/OmMhU(115): MyParser->__construct()
#1 {main}
thrown in /in/OmMhU on line 6
Process exited with code 255 . This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches Archived branches Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:dark mode live preview
44.85 ms | 401 KiB | 8 Q