我从更实用的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
数组中的项目有关?
答案 0 :(得分:0)
您的代码基本上是正确的。
您不需要$file = $this->file;
$this
前缀是访问PHP中成员函数和变量的标准。
您的功能可能如下所示:
public function parseAndRun() {
$steps = $this->divideFileIntoSteps($this->file);
// or like this:
$this->setVariable($index, $value);
}
另一个最佳做法是声明private
您不需要从课堂外访问的所有方法。成员变量应该都是private
,你应该有它们的访问函数。