CakePHP5入門【コラム⑫】アローとダブルコロン

A子
「->」ってめっちゃ使うじゃん
あれって、オブジェクトのメソッドやフィールドにアクセスするための演算子だよね?

B美
オブジェクト指向においては必須の知識ね

A子
たまにコロン二つの「::」というのも出てくるじゃん
あれって何?

C菜
前回も現在時刻を知るために
DateTime::now() |
って出てきましたね~

B美
「::」はオブジェクトではなく、クラスにアクセスするための演算子なのよ
正確には「スコープ解決演算子」ね

A子
オブジェクト指向って、「クラス」という設計図をもとに「インスタンス(オブジェクト)」という実体をメモリ内に作らないといけないんじゃなかったっけ?
(【CakePHP5基礎編②】を参照)

B美
でもね
インスタンス化せずに利用できる(クラスそのものに紐づいている)メソッドもあるのよ
それを「静的な」メソッドと呼びます
んで、「::」というのは、その「静的な」メソッドにアクセスするための演算子ってわけ
(例えば、DateTimeクラスはインスタンス化しなくても、nowメソッドを呼び出すことができる等)

C菜
あっ、ついでに一つ質問です~
クラス名や変数名など、名前の付け方って決まりごとがあるのでしょうか~?
(前回、メソッド名は「キャメルケース」で…って話がありましたよね~?)

B美
CakePHPにおける「命名規則」はこうよ
項目 | ケース | 備考 |
---|---|---|
クラス名 | パスカルケース | |
クラス内のフィールド名 | キャメルケース | データベーステーブルを割り当てる場合はパスカルケースにすることも… |
クラス内のメソッド名 | キャメルケース | privateメソッドならスネークケースでもOK |
変数名 | キャメルケース | 個人的にはスネークケースを多用している |
定数名 | スネークケース | 基本的には全て大文字 |
データベースのテーブル名 | スネークケース | CakePHPでは(基本的には)複数形にすること |
データベーステーブルの項目名 | スネークケース | SQLでは大文字と小文字を区別しないため |
個人的な話だけど、「フィールド名」「メソッド名」「変数名」についても「スネークケース」で書くことが多いわね
(C言語というプログラム言語を学んだ人間は、そうなりがち(笑))
まぁ、できるだけ「キャメルケース」を心がけるようにしなさいね
(特に「メソッド名」は!)

A子
あ、そうだ
もう一つ質問!
「parent」とか「this」って何なのさ

C菜
気にしたことなかったですけど~(苦笑)

A子
parent::initialize(); |
あと、「beforeFilter」メソッドにも出てきたね
parent::beforeFilter($event); |
それに「$this->○○」はめっちゃ出てくるし…

C菜

B美
「this」は日本語だとどうなる?

C菜
あっ!
「親」というのは「親クラス(スーパークラス)」のことじゃないですか~?

A子
だとすると、「$this」は自分自身、つまりこのオブジェクト自体なんじゃないの?
(インスタンスだから変数で指し示している → だから先頭に「$」が付いている)

C菜

B美
それが正解よ
ちなみに「initialize」メソッドや「beforeFilter」メソッドの中で、親クラスの「initialize」や「beforeFilter」を呼び出している理由だけど…
「子クラス」では「親クラス」の同名メソッドを上書きすることができるのよ
(これを「オーバーライド」と呼びます)
もしも「子クラス」側で下記の一文を記述しない場合
parent::initialize(); |
「親クラス」の「initialize」メソッドが実行されないことになるってわけ

A子
てか、今頃になってそれらを教わるのって、ちょっと遅くない?(苦笑)

C菜