我正在创建一个类来管理用户提交的文章。在这个课程中,我也使用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
,那么我怎么能够实现这个呢?
答案 0 :(得分:1)
不要使htmlFilter
静止。
假设您有一个文章实例,您也可以将该实例作为回调传递:
function __toString(){
$html->set_callback(array($this, "htmlFilter"));
return (string)$html;
}
如果您这样做,那么htmlFilter
也会被称为实例方法(前提是您删除了static
关键字)。