金高真悟の奇天烈(キテレツ)大百科

日々徒然なるままに

株式会社ニコシスの新入社員が毎日のあれやこれやを語ります。

クラスまで来たぜ!! (´・ω・)ノ

PHPのクラスあれこれ (*´∀`)ノ

こんばんは。
キテレツです。

今日はPHPのクラスってのをあれこれと。
PHP5になってから大幅パワーアップと紹介されていた機能ですが、他のクラスをそんなに知っているわけではないので・・・どうなんだろう?

基本的には同じだなぁ(´-ω-`;)ゞポリポリ

ってのが感想でした。

  1. クラスの作成
  2. メソッドの作成
  3. メンバーの参照
  4. 外部に公開する変数(これってプロパティか!?)
  5. クラスの継承
  6. 例外処理
  7. コンストラクタとデストラクタ
  8. 例外処理
  9. 抽象クラス(abstract)
  10. インターフェイス(interface)

何と比べるの??って部分ですが、昔勉強したDelphiだったり、Rubyだったり。
およそクラスを宣言するプログラミング言語は似たような感じの機能を持っていて、共通する部分があったりします。

キテレツは「多重継承」と呼ばれる機能が嫌いです。
簡単にスーパークラスな機能を持ったやつを実装できるんですが、、、、同じメソッド名だったりした場合にどれがどれやらわからずめんどくさい。(´-ω-`;)ゞポリポリ

複雑になりやすいし。。。。賢くないキテレツには多重継承は鬼門です。
ちゃんと使いこなせる人なら問題ないんでしょうけれども・・・・

この多重継承を使いまくっているC++のコードを読んだことがあり、全く読みきれず・・・・・
まぁ、そもそもコードを読むことに慣れていないのもあったわけですが、一発で嫌いになってしまいました。(´-ω-`;)ゞポリポリ

まぁ、まずは抽象クラスの利用かな。
正直、何のためのabstractなのか・・・・複数人で開発するときのテンプレートとして共通化を図るとかしか思い浮かばない。
abstractで「哺乳類」を宣言しておき、そいつを継承した「人間」クラスを作って、肺やら胃やら腸をオーバーライドする。
同じ哺乳類でも、人間と犬は違うわけなので、そういう使い方をするときに、統一感のあるメソッドが出来上がりますね。

犬の肺メソッドと人間の肺メソッドは違うわけですね。
キテレツみたいな人種は、すぐにオリジナルなメソッドとか作っちまう傾向にありますので・・(´д`ι)
abstractできっちりと枠にはめられるのは有用かもしれません。

<?php
abstract class User {
  protected $name = NULL;
abstract protected function print_hello();
}

class Guest extends User {
  protected $name = "ゲスト";
  public function print_hello() {
    echo $this->name;
    echo "さん。はじめまして!!<br/>";
  }
}

$newuser = new Guest();  // Guestクラスのインスタンス生成
$newuser->print_hello(); // メソッド読んでみる
?>

インターフェイスがよくわからん・・・

キテレツです。

これ・・・abstractとよく似ているんですがちと違います。
extendsキーワードでの継承とは違って、複数のクラスを継承することが可能・・・
あぁ、書いててわかった。
これ・・・多重継承だ。(´・ω・)ノ

<?php

// インターフェイスを作成
interface Datainterface
{
  public function add($key,$data);
  public function get($key);
}

// 抽象クラス作成
abstract class User implements Datainterface
{
  private $array = array();
  abstract protected function print_hello();
  
  // 抽象クラスの中で、インターフェイスをオーバーライド
  public function add($key,$data)
  {
    $this->array[$key] = $data;
  }

  public function get($key)
  {
    return $this->array[$key];
  }
}

class Member extends User
{
  public tunction print_hello()
  {
    echo "会員:ログイン中<br/>";
    echo "$this->get("name");
    echo "さん。こんにちは!!<br/>"
  }
}

$member = new Member();
$member->add('name',"キテレツ");    // 名前をセットして
$member->print_hello();             // 名前を表示させる
?>

うん。
思いつくままにインターフェイスを作りまくると、収集がつかなくなりそうです。
インターフェイスも、複数人で開発案件をこなす場合などに威力を発揮しますね。
別のチームが作ったインターフェイスと自分のチームが作ったインターフェイスを合体。

インターフェイスも抽象化も、複数人でルールを決めて開発するときに役に立つ。
そう考えると、自分の中ではしっくりくるかなぁ。

こいつを実装した設計者は、今、キテレツが思い描く方法を想定して設計したんだろうか。
何かを作る時って、解決したい問題があったりするわけですが、はたしてどんな問題を解決するために実装されたのか。

そのへんが分かると、ちゃんとした使い方が理解できるんだろうなぁ。

今日のPHP

クラスはざっとだけどやってみた。
わからなくなったら戻ればいいし。

さぁ、いよいよデータベースの世界だ!!

■PHPの基礎
section 07 PHPスクリプトの書き方
section 08 文字の表示
section 09 HTMLにPHPを埋める
section 10 定数の利用
section 11 変数の利用
section 12 配列の利用
section 13 連想配列の利用
section 14 演算子
section 15 if
section 16 switch
section 17 while
section 18 for
section 19 foreach
section 20 continue、break
section 21 require、include
section 22 関数
section 23 関数の引数
section 24 関数の戻り値
section 25 グローバル変数

■PHPの組み込み関数
section 26 文字列操作
section 27 配列操作
section 28 日付・時刻の操作
section 29 ファイル操作
section 30 HTTPヘッダーの利用
section 31 メール送信
section 32 正規表現の利用

■PHP(WEB)
section 33 テキストの送信
section 34 複数テキストの送信
section 35 hiddenタグの扱い
section 36 送信ボタンの扱い
section 37 チェックボックスの扱い
section 38 ラジオボタンの扱い
section 39 プルダウンメニューの扱い
section 40 リストボックスの扱い
section 41 Cookie
section 42 Basic認証
section 43 セッション管理
section 44 ファイルのアップロード
section 45 画像の縮小
section 46 メール受信
section 47 外部コマンド実行

■オブジェクト指向(PHP4、PHP5)
section 48 クラス作成
section 49 インスタンスとコンストラクタ
section 50 メソッド
section 51 継承
section 52 PHP5でのクラス
section 53 クラスの利用                      ← 今ココ

■PHPによるデータベース利用(PDO)
section 63 データベース接続
section 64 SQL
section 65 データ挿入
section 66 データ検索
section 67 データ更新
section 68 データ削除
section 69 処理の連携

■会員管理システム(基本機能)
section 70 構成
section 71 テーブル設計
section 72 設定と確認
section 73 テンプレートエンジン
section 74 認証
section 75 入力チェック
section 76 登録処理
section 77 メールによる確認
section 78 更新処理
section 79 削除処理

■会員管理システム(管理機能)
section 80 管理画面表示
section 81 分割表示
section 82 その他機能