gpt4 book ai didi

PHP 包含外部方法和类

转载 作者:搜寻专家 更新时间:2023-10-31 21:11:07 24 4
gpt4 key购买 nike

我是 PHP 的新手,我遇到了一个似乎无法修复或找不到解决方案的问题。

我正在尝试创建一个辅助函数,它将返回一个“对象”,其中填充了从 XML 文件中提取的信息。这个名为 functions.php 的辅助函数包含一个 getter 方法,该方法返回一个“类”对象,其中填充了来自 SVN log.xml 文件的数据。

每当我尝试使用 include 'functions.php'; 导入此文件时,该行运行后调用函数的页面都没有任何代码是空白的。

我做错了什么?

这是 functions.php 辅助方法和类声明的样子:

<?php
$list_xml=simplexml_load_file("svn_list.xml");
$log_xml=simplexml_load_file("svn_log.xml");


class Entry{

var $revision;
var $date;
}

function getEntry($date){
$ret = new Entry;
foreach ($log_xml->logentry as $logentry){
if ($logentry->date == $date){
$ret->date = $logentry->date;
$ret->author = $logentry->author;
}
}
return $ret;
}

最佳答案

我不确定从类中分离一个辅助函数有什么意义,我个人会把两者结合起来。像这样

other-file.php

require './Entry.php';
$oLogEntry = Entry::create($date, 'svn_log.xml');
echo $oLogEntry->date;
echo $oLogEntry->revision;

Entry.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 的新手,我将完全修改我的建议。在这里完全放弃类(class)怎么样?在这一点上几乎没有任何理由使用我能看到的类;让我们看看如何使用数组。

不过,我可能仍会将 simplexml_load_file 移动到辅助函数中。需要查看其他操作以保持它的中断。

entry-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;
}

other-file.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 以获得干净的最终解决方案。

关于PHP 包含外部方法和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19287048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com