LoginSignup
0
0

More than 3 years have passed since last update.

【オブジェクト指向】懐疑派の私が使ってみると

Posted at

はじめに

(対象言語:PHP)

まず私は、オブジェクト指向の信者ではありません。

逆に(逆なのか?)、関数(function)やグローバル変数の多用派です。
オブジェクト指向は便利なら使ってみようか、という程度です。

そんな私がオブジェクト指向を取り入れてみて、便利さを評価しました。
(既存のフレームワークではなく、すべて私の手作りクラスです。)

種類 評価
ログ出力
日時計算
画面操作
セッション
データアクセス(PDO)
データそのもの(RDB) ×

ログ出力 ◎

ログには色んな種類があります。
・デバッグログ
・エラーログ
・アクセスログ

例えばこれらを関数のみで作ると、少し面倒です。
ログ1種類ならともかく、上記のように複数のログを管理するとなると、
配列で状態管理しなければなりません。
それよりは、インスタンスで分けたほうが便利でした。

日時計算 ◎

「日時計算なら元々 DateTimeクラス があるじゃないか」
と言われそうですが、その DateTimeクラスを内包して作りました。
(ただし継承はしていません。)

たとえば日時フォーマット出力(メソッド)で、年は 'Y' だっけ 'y' だっけ?
時間は 'H' だっけ 'h' だっけ? と いちいち迷うんですよ。
なのでその方法は継承せず、よく使うフォーマットをあらかじめ洗い出して、
数値の定数を引数で渡すことでフォーマット出力するメソッドを作ったりしました。

ただし関数と併用しています。
例えばデータベースから取得した日時 (2020-09-20 12:34:56) は文字列なので、
それをいちいちインスタンスにする手間を省くため、文字列を直接 関数に渡して、
内部でインスタンスにして処理する方法も用意しています。これも便利です。

画面操作 ○

画面操作に必要な諸々をカプセル化したものです。

・表示対象データのキー
・次画面の行き先
・戻り画面
・データの最終更新日時
・ワンタイムトークン
・ページネーション情報
などなど

以前はこれらを画面毎にグローバル変数に保持していましたが、
クラス化でだいぶ すっきりしました。

セッション管理 △

作っては見たけど、メリットは感じませんでした。
単に session_start()session_destroy() をするだけだし、
そもそも複数のインスタンスを作る必要もありません。

クラス化せず単なる共通関数でよかったかも。

データアクセス(PDO)○

ほぼPDOですが、PDOは直接 操作せず
それを内包した手作りクラスで、データベースにアクセスするようにしました。

日時計算クラスと同じく、親クラス(PDO)は継承していません。
理由は後述します。

データそのもの(RDB) ×

データアクセスはクラス化できても、
データそのもの(RDB)はクラス化できません。

変数を直接 取得後、変数を直接 参照したほうがよいです。
(システムの種類にもよるのでしょうが。)

私の作っているものは、テーブルが100以上あります。
これらをテーブル毎に いちいちクラス化していたら、
さらにカラムごとにゲッターセッターを作っていたら、いつまで経っても終わりません。
(PDOで連想配列でデータ取得するだけで十分です。)

インターフェイス的なものを作るにしても、共通関数で十分です。

まとめ

日時計算やPDOがそうなのですが、
親クラスの継承はせず、それを隠蔽して、機能を制限して使っています。

というのも、親クラスは往々にして、以下の特徴があるからです。
・全世界の人に使ってもらうため、汎用的に作られている。
・よって細かい(使わない)機能が多くなりがち。

私は必要最低限の範囲で、オブジェクト指向を利用したいと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0