回调函数PHP中的对象字段

时间:2014-05-25 16:10:49

标签: php oop callback

我正在创建一个类来管理用户提交的文章。在这个课程中,我也使用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,那么我怎么能够实现这个呢?

1 个答案:

答案 0 :(得分:1)

不要使htmlFilter静止。

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

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

如果您这样做,那么htmlFilter也会被称为实例方法(前提是您删除了static关键字)。