getterメソッドとsetterメソッドを持つ、ショートコードの各属性をまとめたクラス
ショートコードの各属性をまとめたクラスについて、PHPソースコードを解説しています。
ショートコードの属性値を取得したり、設定したりするために、以下のメソッドを用意しています。
- getterメソッド
- setterメソッド
これらのメソッドを用意するのは、
クラス内にデータを閉じ込めておきたい、という考えによるものです。
getterメソッドとsetterメソッドを持つ、ショートコードの各属性をまとめたShortcodeAttributeクラス
class ShortcodeAttribute {
private $keyword;
public function getKeyword() {
return $this->keyword;
}
public function setKeyword($keyword) {
$this->keyword = $keyword;
}
以下省略
}
ShortcodeAttributeクラスは、ショートコードの各属性をまとめたクラスです。
主に、データを保持するためのクラスになります。
上記のソースコードは、ショートコードのキーワード属性に関する
- getterメソッド
- setterメソッド
になります。
※関連記事:Javaプログラミングで、値を設定する、値を取得するメソッドの名前の付け方
上記のgetterメソッド、setterメソッドでは、単純な処理だけしています。
getKeyword()メソッドでは、キーワード文字列をreturn文で返しているだけです。
setKeyword($keyword)メソッドでは、
引数のキーワード文字列を、
クラス内(オブジェクト内部)のメンバ変数に代入しているだけです。
以上の状況では、getterメソッドやsetterメソッドはなくても良い、と思うかもしれません。
実際のところ、クラス内のメンバ変数をpublic変数にしても、正しく動作するプログラムを書ける、と思います。
メンバ変数$keywordを、public変数にした例
class ShortcodeAttribute {
public $keyword;
以下省略
クラス内のメンバ変数をpublic変数にしておけば、
getterメソッドやsetterメソッドを省略できるのに、と思うかもしれません。
それでもgetterメソッドやsetterメソッドを用意するのは、
- クラス内でデータをまとめて管理したい、
- クラス内にデータを閉じ込めておきたい、
という考えがあるように思います。
クラス内にデータを閉じ込めておくと、デバッグがしやすいです
デバッグ作業において、どんなキーワード文字列が設定されるか(代入されるか)知りたい場合、
setterメソッドのただ1カ所に、ブレークポイントを設定すれば良いです。
なぜなら、キーワード文字列をメンバ変数に代入するソースコードは、setterメソッドのただ1カ所だからです。
その他のソースコードにおいて、代入演算子の = を用いて、キーワード文字列をメンバ変数に代入する箇所がないからです。
ブレークポイント(丸印)を設定する例。
public function setKeyword($keyword) {
● $this->keyword = $keyword;
}
デバッグ作業において、ただ1カ所だけ調べれば良いというのは、作業の負担が軽いと言えます。
自分のプログラミングにおいて、最初にデータをまとめたのは、C言語の構造体だったかも?
上記の文章を書いている時、頭の中に
- オブジェクト指向のデータのカプセル化
- typedef structというキーワード
これらが浮かんできました。
自分が過去にやったプログラミングにおいて、最初にデータをまとめたのは、C言語の構造体だったかもしれません。
ずっと昔にプログラミングをやっていたPC-6001のN60 BASICには、構造体はなかったように思います。
ちなみにBASICの命令については、ほとんど忘れてしまいました…。
昔、マイコンBASICマガジンに掲載されていたBASICのプログラムをたくさん打ち込んだのに、ほとんど覚えていません。
参考に、C言語の構造体の宣言は、以下のような感じになります。
strust 構造体の名前 {
メンバ変数その1;
メンバ変数その2;
メンバ変数その3;
}
現在、自分のパソコンにはC言語の開発環境がないため、C言語の構造体についてネットで検索して調べました。
構造体なので、メソッドを持てないようです。
getterメソッドやsetterメソッドが使えないため、データを閉じ込めておきたいという点において、ちょっと不安を感じる仕組みです。
クラスのメンバ変数に対して、型を指定したかったです
class ShortcodeAttribute {
private $operation;
private $searchIndex;
private $keyword;
private $numberToDisplay;
private $itemTitleLength;
private $itemReviewLength;
以下省略
}
上記のコードソースでは、クラスのメンバ変数に対して型を指定していません。
以下のソースコードみたいに、型を指定したかったです。
class ShortcodeAttribute {
private string $operation;
private string $searchIndex;
private string $keyword;
private int $numberToDisplay;
private int $itemTitleLength;
private int $itemReviewLength;
以下省略
}
メンバ変数に対して型の指定をしなかった訳は、プログラミングしていた当時、開発環境Eclipseのエディター画面でエラーが表示されたためです。
たぶん、エラーだったか、警告だったかが、表示されていた気がします。
もしかしたらstringやintではなくて、自作のクラスの型(例:MyInfoClassみたいな型)をメンバ変数に指定した場合に、エラーが表示されていたかもしれません。
すっかり忘れました…。
あと、PHP言語では、クラスのメンバ変数に対して型指定ができないだろう、と思いこんでいました。
これは、私のPHP言語に対する知識不足でした。
PHPの型指定について、ちょっとネットで調べたところ、 PHP 7.4から、クラスのメンバ変数に対して型指定ができるようです。
参考:PHP RFC: Typed Properties 2.0
今後、PHPのソースコードを書く時、クラスのメンバ変数に対して型を指定したい、と思います。
ShortcodeAttribute.phpのソースコード
<?php
namespace goodsmemo\shortcode;
class ShortcodeAttribute {
private $operation;
private $searchIndex;
private $keyword;
private $numberToDisplay;
private $itemTitleLength;
private $itemReviewLength;
public function getOperation() {
return $this->operation;
}
public function getSearchIndex() {
return $this->searchIndex;
}
public function getKeyword() {
return $this->keyword;
}
public function getNumberToDisplay() {
return $this->numberToDisplay;
}
public function getItemTitleLength() {
return $this->itemTitleLength;
}
public function getItemReviewLength() {
return $this->itemReviewLength;
}
public function setOperation($operation) {
$this->operation = $operation;
}
public function setSearchIndex($searchIndex) {
$this->searchIndex = $searchIndex;
}
public function setKeyword($keyword) {
$this->keyword = $keyword;
}
public function setNumberToDisplay($numberToDisplay) {
$this->numberToDisplay = $numberToDisplay;
}
public function setItemTitleLength($itemTitleLength) {
$this->itemTitleLength = $itemTitleLength;
}
public function setItemReviewLength($itemReviewLength) {
$this->itemReviewLength = $itemReviewLength;
}
}