Help us understand the problem. What is going on with this article?

staticメソッドはインスタンスに依存しない機能を持つ?

はじめに

phpを勉強する際に「そもそもstaticってなによ?」となるパターンが多いので、ここで簡単に解説する場を設けます。

そもそもstaticとは何か

「クラスに張り付いている」変数やメソッドを示す修飾子です。

クラス内の変数やメソッドは、個別のインスタンスを生成してそのインスタンス経由でアクセスすることができます。
しかしstatic修飾子のついた変数やメソッドは、インスタンスを生成しなくてもクラスから直接呼び出すことができます。

今回はstatic変数とstaticメソッドのうち、staticメソッドについて取り扱います。

どんな時に使うか?

例えば、呼び出したい機能の単なる集まりとしてクラスを利用して、個別に値をずっと持たせておく必要のないとき(newしなくてよいとき)に使います。

まずはstaticでない例から見てみましょう。

<?php
class Calculator
{

  public function add($x,$y){
      return $x+$y;
  }    
  public function diff($x, $y){
      return $x - $y;
  }

}

$calc = new Calculator();
echo $calc->add(2,3)."\n";//5
echo $calc->diff(4,1)."\n";//3
?>

Calculatorは足し算や引き算などの計算機能をまとめたクラスです。
変数は特になく計算をするメソッドだけを提供してくれます。

しかし下記のようにしても良いでしょう。

<?php
class Calculator
{

  public static function add($x,$y){
      return $x+$y;
  }    
  public static function diff($x, $y){
      return $x - $y;
  }

}

echo Calculator::add(2,3)."\n";
echo Calculator::diff(4,1)."\n";

?>

Calculator::add(2,3)と、addメソッドをクラスから呼び出しているのがわかるかと思います。

「計算機能を一箇所(クラス)にまとめて管理・使用したい」という用法であれば、インスタンス化しなくてもstaticメソッドで代替できます。

まとめ

まとめると「インスタンスに依存しない機能」はstaticメソッドにすることができます。

参考

この記事は「CodeShip」内での実際の質疑応答や指導・アドバイスの一部を基に作成しています。

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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした