解決策: 流暢なセッターを使用する
この問題に対して私が見つけた潜在的な解決策は、次のようにクラスと流暢なセッターを使用することです。
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
> 選択setters
> 設定するフィールドを選択し、チェックボックスをオンにしてfluent setters
> をクリックします。OK
流暢なセッターを選ぶ理由 すべてのフィールドを公開しないのはなぜですか?
public フィールドを使用すると、かなり遅くなります。これは、流暢なセッターがチェーンされたメソッドを利用できるためですが、パブリック フィールドの方法は次のように記述する必要があります。
$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
オートコンプリートのおかげで、流暢なセッター アプローチが配列アプローチよりも約25%高速であることがわかりました (2 番目のモニターの横にあるドキュメントを使用して) 各値のプロパティを設定します。ただし、ドキュメンテーションがあなたの隣になかった場合、オプションの発見がはるかに速いため、このアプローチは25% をはるかに超えると思います!
代替アプローチを歓迎します