You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并分别接收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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:57:02