Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

PHPとRubyを比較してクラスついて理解する_100DaysOfCodeチャレンジ25日目(Day_25:#100DaysOfCode)

More than 1 year has passed since last update.

はじめに

この記事は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
yuta-ushijima
自己破産というドン底から28歳で未経験からプログラミングを学び、2018年4月からウェブ系のフリーエンジニアとしてキャリアスタート。 ITスキルと情報発信で、自由な生活をおくる生き方を実践中。 公式ブログはこちら→ https://yuta-u.com
https://yuta-u.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away