人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。
ユーザー定義関数とクラスの違いが今ひとつわかりません。
特にクラスににできてユーザー定義関数にできないこと、
どういう時にクラスを使うべきかということをを素人にもわかりやすく教えてください。

●質問者: taroemon
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP ひとつ クラス ユーザー 定義
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tasklight
●28ポイント

クラスと関数の違いは、データの持ち方という観点から眺めてみると明らかです。


関数は与えられた入力(引数)に対して、処理結果を戻り値として出力するだけのしくみです。つまり、データはただ関数を「通過」していくだけで、その中に留まることはありません。

しかし、クラス/オブジェクトは自分自身の中にデータを格納することができます。処理前、あるいは、処理後のデータを保持しておき、必要に応じて利用することができます。

つまり、クラス/オブジェクトと関数、そして、変数とを比較してみると、下表のようになります。

データを保持 データを処理
変数 ×
関数 ×
クラス/オブジェクト

【参考書籍】

独習PHP 第2版

独習PHP 第2版

  • 作者: 山田 祥寛
  • 出版社/メーカー: 翔泳社
  • メディア: 大型本


クラスを使うべき時というのは、“データありき”で動くシステム(オブジェクト指向型システム)を作る時です。

方程式やグラフで解けるような問題は、ユーザー定義関数を使えば十分です。

◎質問者からの返答

ご回答ありがとうございます。

私にはデータの保持というのがもう少しわかりませんでした。

具体的な例を示していただけるとさらに参考になります。


2 ● うぃんど
●42ポイント ベストアンサー

>データの保持

コードを書いたほうがいいのか迷いましたがキッチリ説明しようとすると、いろいろ長くなりますので、今回は大まかに書いてみます(それでも長いです。笑)

値の引渡しが不要な処理の場合もありますが、ここでは値を渡す必要がある場合を想定して話を進めます

【1】関数への値渡し

$変数x = 関数(引数);

呼び出す度に引数を渡す必要があります

引数を与えずとも、パブリックな変数を関数内から参照する事は可能なのですが、関数の独立性や判読性が悪くなるのであまり使いません

(関数を複数人で共有したり配布したり、システムを移植したりメンテナンスしたりする時に「引数はxxにしてね」だけのほうが楽なのです)

【2】クラスへの値渡し

$変数y = new クラス;

$変数y->クラス変数 = 値;

値はいつの状態でも与えることが可能であり、次に変更するまで保持され続けます

【3】クラスの利点

複雑なシステムになってくると同名の関数が存在してしまったりする心配がありますが、クラスは下記のように使いますので同名でも心配がなく、これまた使いまわしが楽になります

$変数y = new クラスy;

$変数y->関数a;

$変数z = new クラスz;

$変数z->関数a;

同名の関数を使えるという点を利用してクラスでは次のような使い方も出来ます。例えばMySQL接続用のクラスを作ったとします

$変数y = new MySQL用クラス;

$変数y->関数y;

同名で同様の機能を持ったPostgreSQL接続用クラスを作ったとします

$変数y = new PostgreSQL用クラス;

$変数y->関数y;

置き換えはnewの部分だけで済み、他の部分は改造が不要なので使いまわしや移植、システム変更が楽になります

【4】関数とクラスの使い分け例

複数のスクリプトで使いまわすならばクラスが便利です。そのスクリプト内だけで使うならば関数が便利です

使いまわしでも、あまりに単純な処理をいちいちクラスにすると使うときが逆に面倒なので少し長くなるものをクラスとします

そのスクリプト内だけの場合でも状態を保持したほうが便利な場合はクラスにします

◎質問者からの返答

丁寧なご回答ありがとうございます。

ずいぶんすっきりとわかりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ