我需要构建一个包含数百个不同通道的非常复杂的xml表单。为了避免重复代码并最终得到6k行代码,我编写了两种方法,一种创建无内容频道,另一种创建一个填充频道。这里是我的代码,我会解释我的问题是什么如下:将方法中的变量传递给类中的方法
class create_xml {
private $xml_file;
private $title;
private $content;
private $date;
private $backlink;
private $filename = "feed.xml";
public function __construct($title, $content, $date, $backlink) {
$this->title = $title;
$this->content = $content;
$this->date = $date;
$this->backlink = $backlink;
$this->xml_file = new DOMDocument('1.0', 'utf-8');
}
//Creates a new channel without any content
private function cless_channel($chan_name) {
$$chan_name = $this->xml_file->createElement($chan_name);
$$chan_name = $this->xml_file->appendChild($$this->chan_name);
}
//Creates a populated channel
private function popu_channel($chan_name, $content, $parent) {
$sub_chan = $this->xml_file->createElement($chan_name);
$sub_chan = $$parent->appendChild($title);
$sub_content = $this->xml_file->createTextNode($content);
$sub_content = $sub_chan->appendChild($sub_content);
}
private function gen_xml() {
$this->cless_channel("channelroot");
$this->popu_channel("channel_one", "a random content", "channelroot");
}
public function save_xml() {
$this->gen_xml();
//Saves xml document
return $xml_file->save($filename);
}
public function return_xml() {
$this->gen_xml();
//Returns xml content as str
return $xml_file->saveXML();
}
}
好吧所以basicaly我打电话两种方法这个 - $> cless_channel()和$这个 - > popu_channel(),我m使用动态变量将变量名从一种方法传递给另一种,但显然不起作用。 我需要的是混合类属性和动态变量,以便能够将方法中的变量传递给其他方法。请注意,此代码只显示两个节点,但我会有更多,我不认为声明尽可能多的变量,因为渠道是非常好的做法,所以我也在寻找一种方法来避免这种情况,但我想我可以用数组来做到这一点。到目前为止,让这个工作成为一个很好的开始。 我尝试了一堆不同的东西,他们都没有工作,所以我甚至不打算把它们展示出来。
非常感谢您提供任何形式的帮助。
它没有真的,我首先要找的答案(我已经能够解决我的代码以数组作为你的建议虽然),但你的代码看起来更接近我想达到的目标,所以我想我会和你一起去的。非常感谢你,你刚刚从一个蹩脚的夜晚救了我,试图弄清楚这一点! – bastienbot