对象字段中的回调函数PHP


Objects field in callback function PHP

我正在创建一个类来管理用户提交的文章。在这个类中,我还使用了PHP Simple Dom Parser类。这个类允许您在输出HTML时应用回调函数,我用它来过滤不需要的元素。在类之外,以过程式的方式,它是这样实现的:

<?php
$html = file_get_html($_FILES["repfile"]["tmp_name"]);
function fileFilter($element){
    $toDelete = array("img", "script", "object", "iframe");
    foreach($toDelete as $el){
        if($element->tag==$el){
              $element->outertext = "";
        }
    }
}
$html->set_callback("fileFilter");
$finalContent = (string)$html->find("div", 0)->innertext;
?>

现在我想在我的类中做的是沿着

的行
<?php
class Article{
public $blockedElements;
public $html;
function __toString(){
    $html->set_callback("Article::htmlFilter");
    return (string)$html;
}
public static function htmlFilter($element){
    foreach($this->blockedElements as $el){
        if($element->tag==$el){
            $element->outertext = "";
        }
    }
}
}
?>

明显的问题是,您不能在静态方法中使用$this->blockedElements,那么我如何能够实现这一点?

不使htmlFilter为静态

假设您有一个Article 实例,您也可以将该实例作为回调传递:

function __toString(){
    $html->set_callback(array($this, "htmlFilter"));
    return (string)$html;
}

如果您这样做,那么htmlFilter也将作为实例方法调用(前提是您删除static关键字)。