我不确定从类中拥有一个单独的辅助函数有什么意义,我个人会将两者结合起来。像这样的东西
其他文件.php
require './Entry.php';
$oLogEntry = Entry::create($date, 'svn_log.xml');
echo $oLogEntry->date;
echo $oLogEntry->revision;
入口.php
class Entry
{
public $revision;
public $date;
public $author;
public static function create($date, $file) {
$ret = new Entry;
$xml = simplexml_load_file($file);
foreach($xml->logentry as $logentry) {
if($logentry->date == $date) {
$ret->date = $logentry->date;
$ret->author = $logentry->author;
$ret->revision = $logentry->revision;
}
}
return $ret;
}
}
编辑
鉴于 OP 是 PHP 的新手,我将完全修改我的建议。在这里完全放弃课程怎么样?在这一点上,几乎没有任何理由使用我可以看到的类。让我们看看使用数组来代替。
不过,我可能仍会将其simplexml_load_file
移至辅助函数中。需要查看其他操作以使其保持中断。
入口-helper.php
function getEntry($date, $file) {
$log_xml = simplexml_load_file($file);
$entry = array();
foreach($log_xml->logentry as $logentry) {
if($logentry->date == $date) {
$entry['date'] = $logentry->date;
$entry['author'] = $logentry->author;
$entry['revision'] = $logentry->revision;
}
}
return $entry;
}
其他文件.php
require './entry.php';
$aLogEntry = Entry::create($date, 'svn_log.xml');
echo $aLogEntry['date'];
echo $aLogEntry['revision'];
编辑
最后一个想法.. 由于您似乎在日志中搜索感兴趣的点,然后复制该节点的部分内容,为什么不只搜索匹配项并返回该节点?这就是我的意思(返回false
表示从该日期起没有日志)
function getEntry($date, $file) {
$log_xml = simplexml_load_file($file);
foreach($log_xml->logentry as $logentry) {
if($logentry->date == $date) {
return $logentry;
return false;
}
另外,如果您有多个来自同一日期的日志条目,会发生什么?这只会返回给定日期的单个条目。
我建议使用XPATH。在那里,您可以在此日志 XML 中抛出一个简洁的 XPATH 表达式,并从给定日期获取所有条目的对象数组。你正在做的是一个很好的起点,但是一旦你有了基础,我就会转向 XPATH 以获得一个干净的最终解决方案。