PHP vol.31

  • classの続き

class

// Employeer.class.php
<?php
    //↓初めは大文字
class Employeer
{ //←括弧はここに
  //プロパティ(名前)
  public $name;
  
  function getName() { //classと関数を見分けるためにも括弧の位置は間違えないように
    $this->name = 'obt';
    return $this->name;
  }
} //←括弧はここに
?>
  • 原則1classは1ファイル。
  • メソッド≒method≒関数
// test.php
<?php
  // ファイルの読み込み
    require_once ('Employeer.class.php');
  // インスタンスの作成
    $employeer = new Employeer();
  // 社員名の取り出し
    echo $employeer->getName();
?>
  • 演算子は前後を空けるが、->の前後は空けない。

プロパティのアクセス修飾子

public test.phpからも読み込める
private Fatal error: Cannot access private property Employeer
protected Fatal error: Cannot access protected property Employeer
//Employeer.class.php
<?php
class Employeer
{
  public $name;
  function getName() {
      return $this->name;
  }
  function setName($name) {
      $this->name = $name;
  }
}
?>
//test.php
<?php
  // ファイルの読み込み
    require_once('Employeer.class.php');
  // インスタンスの作成
    $employeer = new Employeer();
  // 社員名のセット
    $employeer->setName('obt');
  // 社員名の取り出し
    echo $employeer->name;
?>
classの便利さ
$company = array (
         'employeers' => array (
                      'employeer' => array (
                                     'id' => 1,
                                     'name' => 'obt'
                                  ), array (
                                     'id' => 2,
                                     'name' => 'steps'
                                  )
                      )
         );
//つまり
$company['employeers']['employeer'][1]['name'] = 'steps';

これをclassで表す

  • Company.class.php
<?php
class Company
{
    //プロパティ
    private $employeers;
    //関数名にもアクセス修飾子を。
    public function getEmployeers() {
        return $this->employeers;
    }
    public function getEmployeer($name) {
        foreach ($this->employeers as $employeer) {
            if ($employeer->getName() == $name) {
                return $employeer;
            }
        }
        return false;
    }
    public function getEmployeerByID($id) {
        foreach ($this->employeers as $employeer) {
            if ($employeer->getId() == $id) {
                return $employeer;
            }
        }
        return false;
    }
    public function setEmployeer($employeer_data) {
        //社員インスタンスを作成
        $this->employeers[] = $employeer_data;
    }
}
?>
  • Employeer.class.php
<?php
class Employeer
{
    //プロパティ(名前)
    private $id;
    private $name;
    public function getId() {
        return $this->id;
    }
    public function setId($id) {
        $this->id = $id;
    }
    public function getName() {
        return $this->name;
    }
    public function setName($name) {
        $this->name = $name;
    }
}
?>
  • company.php(表示)
<?php
//ファイル読み込み
require_once('Company.class.php');
require_once('Employeer.class.php');
//呼び出し
$company = new Company(); 
/*
  今の状態は
  array(new Employeer(),new Employeer())
 */
//// id(1)
$employeer = new Employeer();
$employeer->setId(1);
$employeer->setName('obt');
$company->setEmployeer($employeer);
////id (2)
$employeer = new Employeer();
$employeer->setId(2);
$employeer->setName('steps');
$company->setEmployeer($employeer);

//var_dumpする。
var_dump($company);

?>
var_dump結果

以下のサイトで実際の結果が閲覧できます。
とりあえずvar_dump

//$company
object(Company)#1 (1) {
  ["employeers:private"]=>
  array(2) {
    [0]=>
    object(Employeer)#2 (2) {
      ["id:private"]=>
      int(1)
      ["name:private"]=>
      string(3) "obt"
    }
    [1]=>
    object(Employeer)#3 (2) {
      ["id:private"]=>
      int(2)
      ["name:private"]=>
      string(5) "steps"
    }
  }
}
//$company->getEmployeer('steps')
object(Employeer)#3 (2) {
  ["id:private"]=>
  int(2)
  ["name:private"]=>
  string(5) "steps"
}
//$company->getEmployeerByID(2)
object(Employeer)#3 (2) {
  ["id:private"]=>
  int(2)
  ["name:private"]=>
  string(5) "steps"
}
  • 簡単に内容を取り出せるようになった。
  • クラスは配列の要素に出来る。
  • クラスのプロパティはクラスを増やすことも出来る。