はじめに
現場で使ったことのないstaticについて勉強したのでアウトプットです。
いろいろアドバイス、訂正など教えてください!
staticってなに?
staticを翻訳させると「静的」という意味になる。
確かにインスタンスを作ってインスタンス側で使うプロパティやメソッドに比べて
staticなプロパティやメソッドはクラス側で使うので動きは少ないが、、、
初学者の自分からすると結構動いてない?「動的」じゃないの?って思ってしまう。
ただ上記にも書いてあるが明らかな違いとしては、
インスタンス側にあるプロパティやメソッドはインスタンス毎にそれぞれのプロパティやメソッドを持てるのに対し、
staticで使うプロパティやメソッドはクラス側に持っているのでインスタンスがいくら作られても、1つだけ存在するということ。
「インスタンス単位ではなく、クラス単位で値を保持する」時に使う。
動的と静的のコードの書き方の違い
定義↓
<?php
class MyClass {
// インスタンスを作成して使用する「動的」
public $property;
public function method() {
// 処理
}
// staticを使用する「静的」
public static $staticProperty;
public static function staticMethod() {
// 処理
}
}
使用するファイル↓
<?php
// インスタンスを作成して使用する「動的」
$class = new MyClass();
$class->$property = "Hello";
$class->method();
// staticを使用する「静的」
MyClass::$staticProperty = "Hello";
MyClass::mystaticMethod();
前の節でも説明したが
使用するときにインスタンスを作るか作らないかが大きな違いになっており、
staticなプロパティ、メソッドは「->」ではなく「::」が使われる
↓
クラス名::プロパティ名
クラス名::メソッド名
疑問
staticっていつ使うんだろうか?
これについて調べたが、
・安定して動く?
・PHPUnitで便利?
・カプセル化しにくい?
・・・??
Qiitaのつよつよエンジニアの意見はまだ理解できず、
今のところ別にstatic使わなくても困らないし実際に現場で使っていないのでイメージできず。
(静的ならconstで間に合いそう、、、)
今後、現場で使う機会があれば上司などに質問攻めしようと思いますw
その時はまた記事の方、アウトプットします。
※PHPつよつよエンジニア目指しております!