class クラス名 { アクセス修飾子 $プロパティ名; アクセス修飾子 $プロパティ名 = 'プロパティの初期値'; public function __construct(引数) { [コンストラクタの実装] } アクセス修飾子 function メソッド名() { $this->[このインスタンスのプロパティ]; [メソッドの実装] } } $オブジェクト名 = new クラス名(引数);//この処理をインスタンス化という $オブジェクト名->プロパティ名;//クラス内のPublic修飾子がついたプロパティ。 $オブジェクト名->メソッド名;//クラス内のPublic修飾子がついたメソッド。
<?php class TwitterAccount { private $name; private $profile; private $location; private $url; /** * これがコンストラクタです。 * 引数で受け取ったものを、プロパティにセットしています。 */ public function __construct($name, $profile, $location, $url) { $this->name = $name; $this->profile = $profile; $this->location = $location; $this->url = $url; } /** * ユーザー名を取得するためのメソッドです。 */ public function getName() { return $this->name; } /** * プロフィールを取得するためのメソッドです。 */ public function getProfile() { return $this->profile; } /** * 場所を取得するためのメソッドです。 */ public function getLocation() { return $this->location; } /** * URLを取得するためのメソッドです。 */ public function getUrl() { return $this->url; } } $uhero_PR = new TwitterAccount('株式会社ユヒーロ', '株式会社ユヒーロ公式アカウントです。サイトの更新情報や、社内の取り組みなどツイートしてまいります。', '日本橋', 'uhero.co.jp'); //インスタンス化 echo $uhero_PR->getName(); //uhero_PRはTwitterAccountなので、getName()することができる。
class クラス名 extends 親クラス名 { }
<?php class User { private $userId; private $password; /* * 新規登録のメソッドです。 */ public function __construct($userId, $password) { $this->userId = $userId; $this->password = $password; } /* * 記事を投稿するメソッドです。 */ public function submit($text) { [処理]; } } /* * 管理者ユーザーを管理するクラス */ class AdminUser extends User { /* * 管理者は削除することができます。 */ public function delete($id) { [処理]; } }
<?php //上記の続き $adminUser = new AdminUser('admin', 'pass'); $adminUser->submit('AdminUserも投稿することができます');
abstract クラス名 { [クラスの中身] }
<?php abstract class Student { private $grade;//学年 private $studentId;//学籍番号 /* * コンストラクタでセットする */ public function __construct($studentId, $grade) { $this->studentId = $studentId; $this->grade = $grade; } /* * 学年を取得するメソッドは全学部共通 */ public function getGrade() { return $this->Grade; } /* * キャンパス名を取得する抽象メソッド * 学部によって取得方法が異なるので中身を書くことは出来ないが、 * どの学部生もどこかしらのキャンパスに在籍しているので、共通のメソッドである。 * このクラスを継承した子クラスでも必ず中身を書く必要があることを宣言。 */ abstract public function getCampus(); } /* * 環境情報学部の学生を管理するクラス */ class EnvironmentalInformationStudent extends Student { /* * 抽象メソッドの中身 */ public function getCampus() { return '湘南藤沢'; } } /* * 経済学部の学生を管理するクラス */ class EconomicsStudent extends Student { /* * 抽象メソッドの中身 */ public function getCampus() { if ($this->getGrade() <= 2) { return '日吉'; } return '三田'; } } $economicsStudent = new EconomicsStudent(21204723, 2); $environmentalInformationStudent = new EnvironmentalInformationStudent(81271483, 4); echo $economicsStudent->getCampus() . PHP_EOL; echo $environmentalInformationStudent->getCampus() . PHP_EOL;
interface インターフェイス名 { [インターフェイスの定義]; }
class クラス名 implents インターフェイス名[, インターフェイス名(複数指定も可), ...] { [クラスの中身]; }
<?php interface Products { public function getProductNumber(); } class Book implements Products { public function getProductNumber() { [本の商品番号取得するロジックの実装]; } } class DVD implements Products { public function getProductNumber() { [DVDの商品番号取得するロジックの実装]; } } class CD implements Products { public function getProductNumber() { [CDの商品番号取得するロジックの実装]; } }
<?php //続き function getProductDetial(Products $product) { $product->getProductNumber(); [以下省略]; }
throw new 例外クラス名([メッセージ]);
try { [処理] } catch (例外クラス 変数名) { [例外処理] }
例外 | 解説(php.netより引用) |
---|---|
Exception | Exception は、すべての例外の基底クラスです。 |
ErrorException | エラー例外です。 |
BadFunctionCallException | 未定義の関数をコールバックが参照したり、引数を指定しなかったりした場合にスローされる例外です。 |
BadMethodCallException | 未定義のメソッドをコールバックが参照したり、引数を指定しなかったりした場合にスローされる例外です。 |
DomainException | 定義したデータドメインに値が従わないときにスローされる例外です。 |
InvalidArgumentException | 引数の型が期待する型と一致しなかった場合にスローされる例外です。 |
LengthException | 長さが無効な場合にスローされる例外です。 |
LogicException | プログラムのロジック内でのエラーを表す例外です。 |
OutOfBoundsException | 値が有効なキーでなかった場合にスローされる例外です。 |
OutOfRangeException | 無効なインデックスを要求した場合にスローされる例外です。 |
OverflowException | いっぱいになっているコンテナに要素を追加した場合にスローされる例外です。 |
RangeException | プログラムの実行時に範囲エラーが発生したことを示すときにスローされる例外です。 |
RuntimeException | 実行時にだけ発生するようなエラーの際にスローされます。 |
UnderflowException | 空のコンテナ上で無効な操作 (要素の削除など) を試みたときにスローされる例外です。 |
UnexpectedValueException | いくつかの値のセットに一致しない値であった際にスローされる例外です。 |
<?php //例外クラスの拡張。 //中身はexceptionと同一だが、catchするときに名前で識別するために新しいクラスを作る。 class FileNotFoundException extends exception { } /** * テキストファイルから中身を読み込みます。 * @param string $filePath ファイルパス * @return string ファイルの中身 */ function getText($filePath) { if(!'txt'==strtolower(substr(strrchr($filePath, '.'), 1))){ throw new InvalidArgumentException('拡張子がtxtではありません'); } if (!file_exists($filePath)) { throw new FileNotFoundException('ファイルが存在しません'); } return file_get_contents($filePath); }
<?php//(つづき) try { getText($filePath); } catch (FileNotFoundException $e) { echo 'ファイルが存在しなかったため処理を終了します。'; exit; } catch (Exception $e){ echo '想定外のデータが渡されました。'; }
ノート
catch文の中で$e->getMessage()と記述すると、その例外をthrowしたときに添えたメッセージを取得することができます。 上の場合だと’拡張子がtxtではありません’もしくは’ファイルが存在しません’にあたります。
<?php $values = array(1, 5, 6, 2, 0, 4, "hogehoge", 7, 3,); foreach ($values as $value) { [todo]; }
はじめに、 tweet.json をダウンロードしなさい。