使用返回的对象运行方法

时间:2010-10-29 10:22:47

标签: php oop class methods

我正在刷新我的非框架面向对象的PHP并决定进行测试。不幸的是,虽然我理解从类中调用方法的概念,但这个特定的测试稍微复杂一些,我不知道这种特殊情况的术语是什么。

测试

创建一个PHP类,用于解析文件夹中的(未知数量)文本文件,并允许从文件中提取amount字段的总值,并获取已解析文件的文件名。

文件格式:

文件是纯文本csv文件。我们假设这些文件包含过去N天内更改的付款列表。有两种不同类型的线:

  • 收集的信用卡付款 - 类型= 1,日期,订单ID,金额
  • 拒绝卡付款 - 类型= 2,日期,订单ID,原因,金额

示例文件:

1,20090313,542,11.99
1,20090313,543,9.99
2,20090312,500,某种原因,2.99

用法示例:

用法可能是这样的:

$parser = new Parser(...);
$files = $parser->getFiles();

foreach ($files as $file) {
    $filename = $file->getFileName();
    $amount_collected = $file->getTotalAmount(...); 
    $amount_rejected = $file->getTotalAmount(...);
}

我的问题是:

当类调用解析器时,如何执行$ file-> method()?我猜你从解析器类中的getFiles方法返回一个对象,但是如何用返回的对象运行方法呢?

我试图谷歌这个,但由于我不知道这种情况的术语,我没有找到任何东西。

非常感谢任何帮助,即使这只是这种情况的术语。

1 个答案:

答案 0 :(得分:1)

返回的对象可以是带有getFileName和getTotalAmount方法的类ParserFile。这种方法与Factory模式非常接近,尽管在没有解析器类本身的情况下使getFiles方法静态,可调用是个好主意。

class ParserFile {
    public function getFilename() { /* whatever */ }
    public function getTotalAmount() { /* whatever */ }
}

class Parser {
    public static function getFiles() {
        // loop through the available files
        // and store them in some $arr
        $arr[] = new ParserFile('filename1.txt');
        $arr[] = new ParserFile('filename2.txt');

        return $arr;
    }
}

$files = Parser::getFiles();
foreach ($files as $file) {
    $filename = $file->getFilename();
    $amount_collected = $file->getTotalAmount();
    $amount_rejected = $file->getTotalAmount();
}

虽然我很确定这不是最好的设计。另一种方法是:

$parser = new Parser();
$files = $parser->getFiles();
foreach ($files as $file) {
    $filename = $parser->getFilename($file);
    $amount_collected = $parser->getTotalAmount($file);
    $amount_rejected = $parser->getTotalAmount($file);
}

因此,您可以将文件数组添加到$files,但是当您要解析这些文件时,您会要求$parser通过传递当前$file为您执行此操作它的方法。

我猜没有100%正确的解决方案,只需使用最适合您的方法。如果您遇到问题,配置文件,基准测试和重构。

希望有所帮助。干杯:)

P.S。希望这不是作业:D