PHP クラス定義

uchiumiです。
今日のPHPはクラス定義について学びました。

大きな規模のプログラムになっていくと、今までやってきたような書き方だと変更が大変だったり管理するのに限界がきてしまうとのことでした。
そこで、オブジェクト指向という考え方の「クラス」というものがあるので、それを使っていこうということでした。

クラス定義

クラスとは設計図みたいなもので、クラスを定義するには、

class クラス名{}

というように書き、{}の中にフィールドやメソッドを書いていきます。

・フィールド

フィールドの種類は「クラス変数」と「インスタンス変数」があり、
それぞれ以下の様な書き方で定義します。

  private static $クラス変数名= 0;
  private $インスタンス変数名;

クラス変数というのはインスタンスを生成しなくても仕様することができ、全体で共有される変数です。
この変数をクラス内で使うときは、

    self::$クラス変数名

の様に書きます。
インスタンス変数というのは、インスタンス毎に生成される変数で、インスタンスを通して呼ぶ事ができます。
なので、この変数の値は同じ名前でもインスタンス毎に異なった値を入れることができます。
この変数をクラス内で使いたいときは、

   $this->インスタンス変数名

という様に書きます。

・コンストラクタ

次にコンストラクタというものについて学びました。
コンストラクタとは、インタスタンスを生成したときに必ず呼ばれるもので、初期化するときなどに便利です。
書き方は、以下の様になります。

  public function __construct() {
     中の処理;
  }

・メソッド

次にメソッドについて学びました。
メソッドにはインスタンスメソッドとクラスメソッドがあります。

*クラスメソッド
クラスメソッドはインスタンスを生成しなくても呼ぶ事ができます。
また、クラスメソッドからはインスタンス変数、及びインスタンスメソッドを呼ぶ事はできません。
クラスメソッドを定義するときは以下のように書きます。

  public static function クラスメソッド名() {
     中の処理;
  }

また、インスタンスメソッドから、クラスメソッドを呼ぶときは、下記のようになります。

    self::$クラスメソッド名();

*インスタンスメソッド
インスタンスメソッドは、インスタンスを通して呼ぶ事ができます。
インスタンスメソッドからは、クラスメソッドを呼ぶ事ができます。
定義するときは、以下のように書きます。

  public function インスタンスメソッド名() {
    中の処理;
  }

また、インスタンスメソッドの中から、他のインスタンスメソッドを呼び出したい場合は、

    $this->インスタンスメソッド名();

というように書きます。
インスタンスメソッドの中で先頭に「$this->」がつかないものは、ローカル変数として扱われ、このメソッド内のみだけで有効になります。

・アクセス修飾子

publicやprivateのことをアクセス修飾子といいます。
privateで指定されたものは、そのクラス内でしか見れなくなるし、使えなくなります。
publicで指定されたものは、クラスの外からでも見えるし、呼び出す事ができます。

使い方

定義したインスタンスメソッドやクラスメソッドを、クラスの外で使う場合には、以下の様に書きます。
*クラスメソッドを呼び出す

クラス名::クラスメソッド名();

*インスタンスの生成

$変数名 = new クラス名();

*インスタンスメソッドを呼び出す

$インスタンスの生成の時使用した変数名->インスタンスメソッド();

*インスタンスメソッドを呼び出す(メソッドに引数がある場合)

$インスタンスの生成の時使用した変数名->インスタンスメソッド(引数);

となります。

以上です。
クラスには管理が楽になるだけでなく、他にも利点がいっぱいあるらしいので、早く覚えて使いこなしていきたいと思いました。

以下、今回講師の方が用意して下さったクラスを使ったプログラムの例を載せておきます。

<?php

class Employee {

  private static $employeeCount = 0;
  private $id;
  private $name;

  public function __construct() {
    self::$employeeCount++;
    $this->id = self::$employeeCount;
  }

  public function showInfo() {
    echo "ID:".$this->id." 名前は".$this->getName()."ですn";
  }

  public function setName($name){
    $this->name = $name;
    $this->showInfo();
  }

  public function getName() {
    return $this->name;
  }

  public static function showCount() {
    echo "今まで作成された社員の合計は".self::$employeeCount."人ですn";
  }
}

Employee::showCount();
$a = new Employee();
$a->setName("tanaka");
//$a->showInfo();
Employee::showCount();

$b = new Employee;
$b->setName("suzuki");
//$b->showInfo();
Employee::showCount();

?>

—-
(2008/06/26 18:09 hirafuji追記)
動画をご覧下さい!

part.1

part.2

1 件のコメント so far »

  1. by スタートアップ研修記 » フォローアップ講習、PAGER、UML, on 06.26.08 @ 6:28 PM

     

    [...] 本日、まずはPagerについて学びました。 Pagerとは、現在のウェブページではどこにでも見られる機能で、 通信販売とか、掲示板、ニュースなど、何かの一覧が並んでいる時、「次の○件」、「前の○件」とか出ている、あれです。 Pagerを使って、ああいった動きを作っているのだそうです。 前回のphpの授業でクラスの基礎を学びましたが、このPagerの説明でクラスを使った画面が出てきました。今までのフォローアップ講習ではさっぱりでしたが、今日は少し読めました。どういった動きかはあまりわかりませんでしたが。 インスタンスメソッドの中で様々な関数を使って、ページング機能を作っていくようです。難しいですが、できると面白そうです。 また研修で掲示板を作りましたが、この掲示板とPagerを合わせることができたら、また夢が広がりそうです。 [...]

Comment RSS · TrackBack URI

コメントをどうぞ

名前: (Required)

eMail: (Required)

Website:

Comment:

Spam Protection by WP-SpamFree