繁体   English   中英

OOP / PHP:是否可以对类的每个方法都具有默认行为?

[英]OOP/PHP: Is it possible to have a default behaviour for every method of a class?

我试图通过OOP模式变得更好。

我有一个为一组数据生成XML的类。 对于不同的XML主体,它具有不同的方法,但是每种XML具有相同的标头,并且每种方法都需要将XML作为字符串返回。

我做了一个私有函数,该函数构造头并返回XML对象,特定的get方法根据需要添加她的子节点。 我做了一个私有函数,可以美化XML(如果已设置)并使用默认的“页脚”块将其关闭。

我正在考虑是否有一种模式可以对此进行优化,并确保init_xml和prepeare_xml都总是在每个公共方法的开头和结尾处都被调用。 是否可以以某种方式构造类,即每个公共方法调用均调用1st头方法,并在添加子节点后添加页脚方法?

有一个get_xml($ type,$ data)方法可以根据$ type调用特定的get _?_ xml方法吗? 还是有更好的模式?

我希望这个原始的例子有意义

class Foo{
  private $xml;

  public function get_bar_xml($data){
    $this->xml = $this->init_xml();

    foreach($data as $key => $value){
      $this->xml->addChild(key, $value);
    }

    return $this->prepare_xml();
  }

  //... set of similar methods following with different
  // child node creation

  private function init_xml(){
    //$this->xml header generation
  }

  private function prepare_xml(){
    //add footer nodes to $this->xml
    //format output if neccesary 

    return $this->xml;
  }
}

听起来像Foo是单身人士,还是至少仅实例化一次,然后生成许多XML文件? 您应该将一个对象实例视为一个XML文档:

class Foo {
    protected $xml;

    public function __construct() {
        $this->xml = /* whatever */;
        // add headers
    }

    public function add($data) {
        // write $data to xml
    }

    public function asXML() {
        $this->writeFooter();
        return (string)$this->xml; // or whatever
    }
}

您可以将其设为基类,并使用不同类型的文档对其进行扩展,以仅根据需要定制add方法。 然后将其用作:

$foo = new Foo;
foreach ($data as $d) {
    $foo->add($d);
}
echo $foo->asXML();

如果要创建下一个文档, 请不要重用$foo ,实例化一个new Foo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM