No.2ベストアンサー
- 回答日時:
手っ取り早くオブジェクト指向のメリットを理解するのであれば「プロパティ」から入るといいでしょうね。
言葉で書いていても伝わりにくいので具体例で示します。[基本情報] 田中太郎(男)
[詳細情報] 1年2組 田中太郎(男)
[基本情報] 山田花子(女)
[詳細情報] 1年3組 山田花子(女)
と表示することを目標とします。
【クラス・メソッドでの例】
class Student {
private $name;
private $grade;
private $class;
private $gender;
public function __construct($name, $grade, $class, $gender) {
$this->name = $name;
$this->grade = $grade;
$this->class = $class;
$this->gender = $gender;
}
public function getInfo() {
return $this->name . '(' . $this->gender . ')';
}
public function getDetail() {
return $this->grade . '年' . $this->class . '組 ' . $this->getInfo();
}
}
$st = new Student('田中太郎', 1, 2, '男');
echo '[基本情報] ' . $st->getInfo() . PHP_EOL;
echo '[詳細情報] ' . $st->getDetail() . PHP_EOL;
$st = new Student('山田花子', 1, 3, '女');
echo '[基本情報] ' . $st->getInfo() . PHP_EOL;
echo '[詳細情報] ' . $st->getDetail() . PHP_EOL;
【関数での例】
function format_student_info($name, $gender) {
return $name . '(' . $gender . ')';
}
function format_student_detail($name, $grade, $class, $gender) {
return $grade . '年' . $class . '組' . format_student_info($name, $gender);
}
echo '[基本情報] ' . format_student_info('田中太郎', '男') . PHP_EOL;
echo '[詳細情報] ' . format_student_detail('田中太郎', 1, 2, '男') . PHP_EOL;
echo '[基本情報] ' . format_student_info('山田花子', '女') . PHP_EOL;
echo '[詳細情報] ' . format_student_detail('山田花子', 1, 3, '女') . PHP_EOL;
さて、あなたはこれを見てどっちが美しいと感じますか?単純なコード量で比較すれば関数で書いた方がスッキリしているように思えますが、「再利用性(何回も使うことを考慮)」という観点から見れば…言うまでもないですよね。クラス・メソッドで書けば限定した複数のメソッド間で「プロパティ」を共有させることが出来るので、何回も引数を渡したりする必要が省けます。これがオブジェクト指向最大の強みの一つです。また、関数名よりもメソッド名のほうが(所属するクラスも含めての分類になるので)短く書ける傾向にあると思います。
関数を用いる方法でも、強引に引数を渡す必要を無くしてしまう方法はあります。「グローバル変数」の利用です。
【関数での例(グローバル変数)】
function format_student_info() {
global $name;
global $gender;
return $name . '(' . $gender . ')';
}
function format_student_detail() {
global $grade;
global $class;
global $name;
global $gender;
return $grade . '年' . $class . '組' . format_student_info($name, $gender);
}
$name = '田中太郎';
$grade = 1;
$class = 2;
$gender = '男';
echo '[基本情報] ' . format_student_info() . PHP_EOL;
echo '[詳細情報] ' . format_student_detail() . PHP_EOL;
$name = '山田花子';
$grade = 1;
$class = 3;
$gender = '女';
echo '[基本情報] ' . format_student_info() . PHP_EOL;
echo '[詳細情報] ' . format_student_detail() . PHP_EOL;
さて、こうすると一見スッキリしたように感じるかもしれません。しかし、これには大きな問題点があります。「他の関数と使う変数名が被っていたらどうするのか」ということです。グローバル変数は全ての領域で共有される変数なので、プログラムの規模が大きくなってくると訳のわからないことになります。それに対し、「これだけの範囲でなら共有させてもいい」と限定的な提供を行える優秀な役割を持つのが「プロパティ」なのです。
他にもメリットはたくさんありますが、大雑把に取っつきやすい点から述べるとこんな感じでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript 【Javascript】ボタンクリックで2つのclassに対し、それぞれ別のclassを追加したい 1 2022/07/29 20:52
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPで入力フォームでデータを確...
-
foreachがうまく動かない
-
ファイル名を変更してアップロ...
-
$a = ( $b == $c ) ? $d、 この...
-
XMLをツリー形式で表示
-
if文のなかで
-
フォームでのリセットを使う方法
-
PHPでURLにジャンプするには?
-
POSTデータのNAME属性をVALUEに...
-
ラジオボタンを押すと、表示が...
-
PHPでCookieを使った訪問回数に...
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPでユーザー情報を入力して簡...
-
セッションを使わずに遷移先画...
-
エラーを元の画面に表示させるには
-
チェックボックスの必須項目指定
-
チェックボックスがチェックさ...
-
PHP・MYSQLで複数のチェックボ...
-
JavaScript変数をPHPへ渡す
-
配列をhiddenで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
PHPで入力フォームでデータを確...
-
Flaskでサーバー立ち上げに関して
-
phpで変数を使ってcopyできない
-
ファイル名を変更してアップロ...
-
PHPからHTMLへの変数の受け...
-
$_SESSIONに渡した後はそのまま...
-
テキストボックスの値を取得したい
-
openCVのトラックバーについて
-
scanfでの読み込み文字数制限
-
アップロードファイル名の文字化け
-
PHP MySql 画像を取得
-
Fortranでのファイル名操作につ...
-
ポインタ配列をfscanfで読み込...
-
UPDATEできない
-
WordのIDataObject::GetData呼...
-
C# 同じ処理をまとめたい
-
POSTの項目に追加
-
イタリア人がCatherineと聞いた...
おすすめ情報