我正在创建一个类来管理用户提交的文章。在这个类中,我还使用了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
关键字)。