在PHP类中使用实用程序函数的最佳实践是什么?

时间:2016-01-27 19:35:29

标签: php oop

我从更实用的Javascript背景进入面向对象的PHP,所以我对PHP和OOP都很新。

我要做的是创建一个类,它传递文本文件的内容,将其分成可管理的部分,然后循环遍历这些部分(步骤),并相应地处理它们,有时发出HTTP请求,有时将信息块保存到$fileVariables数组中。这是我所拥有的基本概要:

class Script {
    public $file, $client, $fileVariables;

    function __construct($file) {
        $this->file = $file;
        $this->client = new \GuzzleHttp\Client();
        $this->fileVariables = array();
    }

    public function parseAndRun() {
        $client = $this->client;
        $file = $this->file;
        // this is the function that performs the bulk of the class's
        // work. It relies on some utility functions that are defined
        // after, and are utilized within this function like this:
        $steps = $this->divideFileIntoSteps($file);
        // or like this:
        $this->setVariable($index, $value);
    }

    public function divideFileIntoSteps($file) {
        // return array of file divided into steps
    }

    public function setVariable($index, $value) {
        // push $index => $value into $fileVariables array
    }
}

我认为我可能会尝试做一些在功能性Javascript中完全没问题的东西,但是在面向对象的PHP中感觉很邋。此外,当我对此运行PHPUnit测试时,我收到类似Serialization of 'Closure' is not allowed之类的错误,我认为通过搜索错误可能与我的工作方式有关这个。此外,我必须在常用函数上反复使用$this->,这让我觉得我做错了。它只是让我觉得代码不好。

有没有更好的方法来做到这一点,请记住很多功能与获取和设置$fileVariables数组中的项目有关?

1 个答案:

答案 0 :(得分:0)

您的代码基本上是正确的。

您不需要$file = $this->file;

$this前缀是访问PHP中成员函数和变量的标准。

您的功能可能如下所示:

public function parseAndRun() {
    $steps = $this->divideFileIntoSteps($this->file);
    // or like this:
    $this->setVariable($index, $value);
}

另一个最佳做法是声明private您不需要从课堂外访问的所有方法。成员变量应该都是private,你应该有它们的访问函数。