解决方案:使用流利的设置器
我发现这个问题的一个潜在解决方案是使用类和流利的设置器,如下所示:
class PostOptions {
protected
$title,
$url,
$public = TRUE,
$placeholder = "type here..."; //Default Values can be set here
static function getInstance(): PostOptions {
return new self();
}
public function setTitle($title) {
$this->title = $title;
return $this;
}
public function setUrl($url) {
$this->url = $url;
return $this;
}
public function setPublic($public) {
$this->public = $public;
return $this;
}
public function setPlaceholder($placeholder) {
$this->placeholder = $placeholder;
return $this;
}
}
然后,您可以像这样发送选项:
function setOptions(PostOptions $postOptions) {
//...
}
setOptions(
PostOptions::getInstance()
->setTitle("Hello World")
->setUrl("example.com")
->setPlaceholder("hi")
);
做起来快!(这个看起来很长)
虽然这可能看起来很长,但实际上可以使用 IDE 工具非常快速地实现。
例如,在 InteliJ 或 PHPStorm 中,只需键入ALT+INS
> Select setters
> 选择要设置的字段并选中复选框fluent setters
> clickOK
为什么选择流利的二传手?为什么不把所有领域都公开?
使用公共字段要慢很多。这是因为 fluent setter 可以使用链式方法,而公共字段方式必须这样编写:
$options = new PostOptions();
$options->title = "hello";
$options->placeholder = "...";
$options->url "..."
setOptions($options);
与建议的解决方案相比,这需要更多的输入
为什么这样更好?
- 在 IDE 中使用自动完成比数组方法更快
- 不太可能出现拼写错误(感谢自动完成)
- 易于查看可用的选项(再次感谢自动完成)
- 可以使用 PHPDoc 为各个字段提供单独的文档
- 可以更轻松地使用嵌套选项,例如,如果您有一个选项列表,并且该选项也有更多选项列表
- 其他 OOP 优势,例如继承和抽象类
这种方法快多少?
我为 Wordpress 标签数组实现了一个快速类:https ://codex.wordpress.org/Function_Reference/register_post_type
我发现为每个值设置一个属性(在第二台显示器上你旁边有文档),由于自动完成,流畅的 setter 方法比数组方法快大约25% !但是,如果文档不在您身边,我预计这种方法将远远超过 25%,因为发现选项要快得多!
欢迎替代方法