はじめに
この記事はTwitterで人気のハッシュタグ#100DaysOfCodeをつけて、
100日間プログラミング学習を続けるチャレンジに挑戦した25日目の記録です。
動作環境
- PHP 7.1.16 (cli)
- Ruby 2.4.1p111 (2017-03-22 revision 58053)
本日学んだこと
- selfとクラスメソッド
selfとクラスメソッドについて
クラスの中でself
を使うことで、文字通り自分自身を表すことができます。
また、self
はクラスメソッドを定義するときにも使われます。
クラスメソッドとは、クラスが生成するインスタンスとは関連のないメソッドを作りたいときに定義するメソッドのこと。
PHPの場合、クラスプロパティを作成した後にゲッターによってクラスメソッドを呼びだし、Rubyではクラス名.クラスメソッド
の形式で呼び出します。
以下の例では、PHPとRubyでインスタンスが生成される度に、生成されたインスタンスの数を数えるcount
というクラスメソッドを実装しています。
class Animal {
private static $count = 0;
public function __construct($kind) {
$this->kind = $kind;
self::$count++;
}
public function getCount() {
return self::$count; //selfはAnimalを表している
}
}
//ここから下はクラスの外部
$penguin = new Animal('キングペンギン');
echo Animal::getCount(); //クラスメソッドの呼び出し。1が返ってくる。
class Animal
def initialize(kind)
@kind = kind
if defined?(@@count) # @@countはクラス変数(クラスから生成された全てのインスタンスから参照できる変数)
@@count += 1
else
@@count = 1
end
end
def self.count
@@count
end
end
count_animal = Animal.new('キングペンギン')
p Animal.count