如何合并分别接收DOMDocument与DOMElement参数的PHP类名查找函数?
合并通用函数实现方案
完全可以合并两个函数,两种实现方式适配不同PHP版本:
方法1:PHP 8.0+ 联合类型方案(推荐)
PHP 8.0及以上版本支持联合类型声明,直接限定第一个参数支持两种类型即可,逻辑完全复用:
function byClass(DOMDocument|DOMElement $parent, string $tagName, string $targetClass): array { $result = []; foreach ($parent->getElementsByTagName($tagName) as $element) { if ($element->getAttribute('class') === $targetClass) { $result[] = $element; } } return $result; }
- 这里新增了返回值类型声明,同时初始化了结果数组,避免无匹配元素时出现未定义变量的警告。
方法2:兼容PHP 7及更低版本方案
如果使用的PHP版本低于8.0,可以去掉强类型声明,增加类型校验逻辑:
function byClass($parent, $tagName, $targetClass) { $result = []; // 校验参数类型合法性 if (!$parent instanceof DOMDocument && !$parent instanceof DOMElement) { return $result; // 也可以根据需求抛出InvalidArgumentException异常 } foreach ($parent->getElementsByTagName($tagName) as $element) { if ($element->getAttribute('class') === $targetClass) { $result[] = $element; } } return $result; }
可选优化
如果你需要支持匹配包含多个类名的元素(比如元素class为btn primary时,查找btn也能命中),可以把类名判断逻辑改成:
$classes = explode(' ', trim($element->getAttribute('class'))); if (in_array($targetClass, $classes)) { $result[] = $element; }
内容的提问来源于stack exchange,提问作者Googlebot
相关产品推荐
相关产品推荐

