Guidelines
Description of the bug
QPXML::createElement() emits a PHP notice whenever it is given a namespace-prefixed element name without an explicit $nsUri:
Notice: Only variables should be passed by reference in src/Extension/QPXML.php on line 194
The method still returns the right element, so this is a diagnostics-noise bug rather than a wrong-result one — but it will trip any application running with E_ALL and a strict error handler, and it fails builds that treat notices as errors.
Root cause
src/Extension/QPXML.php:194 passes a function's return value to array_shift(), which takes its argument by reference:
if ($nsUri === null && strpos($text, ':') !== false) {
$ns = array_shift(explode(':', $text)); // <-- notice
$nsUri = $element->ownerDocument->lookupNamespaceURI($ns);
Suggested fix
No temporary needed — the prefix is just the part before the colon:
$ns = strstr($text, ':', true);
$nsUri = $element->ownerDocument->lookupNamespaceURI($ns);
QueryPath version
4.2.0 (also reproduces on main at bed5d2c)
PHP Version and environment (server type, cli provider etc., enclosing libraries and their respective versions)
PHP 8.3.16 CLI (macOS, Homebrew). Present on every supported version — array_shift() has always taken its argument by reference.
Minimal reproducible PHP+HTML snippet to replicate bug
<?php
require __DIR__ . '/vendor/autoload.php';
use QueryPath\QueryPath;
QueryPath::enable(\QueryPath\Extension\QPXML::class);
$xml = '<?xml version="1.0"?><root xmlns:foo="http://example.com"><a/></root>';
qp($xml, 'a')->createElement('foo:bar');
// Notice: Only variables should be passed by reference in src/Extension/QPXML.php on line 194
Guidelines
Description of the bug
QPXML::createElement()emits a PHP notice whenever it is given a namespace-prefixed element name without an explicit$nsUri:The method still returns the right element, so this is a diagnostics-noise bug rather than a wrong-result one — but it will trip any application running with
E_ALLand a strict error handler, and it fails builds that treat notices as errors.Root cause
src/Extension/QPXML.php:194passes a function's return value toarray_shift(), which takes its argument by reference:Suggested fix
No temporary needed — the prefix is just the part before the colon:
QueryPath version
4.2.0 (also reproduces on
mainat bed5d2c)PHP Version and environment (server type, cli provider etc., enclosing libraries and their respective versions)
PHP 8.3.16 CLI (macOS, Homebrew). Present on every supported version —
array_shift()has always taken its argument by reference.Minimal reproducible PHP+HTML snippet to replicate bug