オブジェクト指向~クラス定義~

PHPのシンタックス

  1. HOME
  2. OOPクラス定義

オブジェクト指向のクラス定義

classキーワードで宣言します。基本的には定義できる内容はプロパティとメソッドです。
プロパティは変数と定数で定義しメソッドは関数で定義します
クラス名は慣例として大文字から始めます。
publicキーワードはアクセス権を示します。
publicを付けるとほかのクラスからもアクセスでき、メソッドのアクセス権は省略できます。省略するとpublicになります。
class クラス名 {
 public const 定数名 = 値;
 public $変数名;

 public function メソッド名() {
 }
}
※クラスのインスタンスはnew演算子で作ります。

frend クラスを定義する

Frend Object
(
    [name] => 桃太郎
    [age] => 17
)
Frend Object
(
    [name] => 浦島太郎
    [age] => 25
)
こんにちは、桃太郎です!
こんにちは、浦島太郎です!
<?php
class Frend {
  public $name;
  public $age;

  public function hello() {
          if(is_null($this->name)) {
            echo "こんにちは!!","\n";
          } else {
            echo "こんにちは、{$this->name}です!","\n";
          }
        }
}
?>

<?php
$momo = new Frend(); //クラスのインスタンス
$ura = new Frend();

$momo->name = "桃太郎"; //プロパティの値を設定
$momo->age = 17;
$ura->name = "浦島太郎";
$ura->age = 25;

print_r($momo); //インスタンスを確認
print_r($ura);

$momo->hello(); //メソッドを実行
$ura->hello();
?>

インスタンス自身を指し示す $this

プロパティ $name にアクセスするには、インスタンス自身を指し示す $this を使って【$this->name】のような記述が必要です。
ちなみに$nameには初期値が設定されていません。その値はnullです。
そこで、is_null()関数を使ってnullを判断し、値がnullの時は「こんにちは!!」を表示それ以外は「こんにちは、{name}です!」としています。

コンストラクタ

インスタンスを作成する際に、初期値を引数で渡せるようにします。
使うのはコンストラクタです。インスタンスがつくられる際に自動的に呼ばれる特殊な関数です。
そこで、最初に実行したいことはコンストラクタに書いておきます。
※引数を省略した場合の初期値は、通常の関数の引数と同じように指定できます。
function __construct(引数1,引数2,...) {
 //インスタンス作成時に最初に実行したい処理
}

コンストラクタが定義してあるStaffクラス

こんにちは、一寸法師です!
こんにちは、ひこ星です!
<?php
class Staff //クラス定義
{
  public $name;
  public $age;

  function __construct($name, $age)
  {
    $this->name = $name;
    $this->age = $age;
  }

  public function hello() //インスタンスメソッド
  {
    if (is_null($this->name)) {
      echo "こんにちは!", "\n";
    } else {
      echo "こんにちは、{$this->name}です!", "\n";
    }
  }
}
?>

<?php
$housi = new Staff("一寸法師", 38); //クラスのインスタンスを作る
$hosi = new Staff("ひこ星", 19);

$housi->hello();
$hosi->hello();
?>

クラス定義ファイルを読み込む

クラス定義ファイルを読み込んで利用するには、require_once()を使います。
読み込みはインスタンスを作るよりも前に読み込む必要があります。

※メソッドはinclude、include_once、require、require_onceがあります。_onceが付くものは同じファイルを繰り返し読まない仕様で、違いは読み込みエラーの対応です。
require_once()はfatalエラーとなり、処理が中断することから通常はこちらを使用する。

スタティックプロパティとスタティックメソッド

インスタンスだけでなく、クラス自身のクラスプロパティとクラスメソッドを設定することが出来ます。
PHPではこれをstaticキーワードを利用して作るスタティックプロパティ(静的プロパティ)とスタティックメソッド(静的メソッド)で代替します。
スタティックプロパティとメソッドがあるクラス定義
class クラス名 {
public static const 定数名 = 値;
public static $変数名;

public static function メソッド名() {
 }
}
クラスの中からクラスメンバーにアクセスする
クラス内で利用するには、self::を付けて「self::$変数名」あるいは「self::メソッド名()」のようにアクセスする。

クラスメンバーとインスタンスメンバー
プロパティとメソッドを合わせてメンバーと呼ぶ。クラスとインスタンスでそれぞれ呼び方がある。

アクセス修飾子

修飾子 アクセス権
public どこからでもアクセスが可能
protected 定義したクラスと子クラスからアクセス可能
private 定義したクラス内のみでアクセスが可能