質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

解決済

関数でなくクラスを使うと何が便利なのでしょうか?

nikuatsu
nikuatsu

総合スコア144

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

6回答

0評価

4クリップ

3254閲覧

投稿2022/05/24 07:17

編集2022/06/05 22:15

前提

クラスを使ったことがなくその利便性が理解できません。
関数でできるのになぜ使うのかを知りたいです。

現状の関数

現状では次の関数apply_row()を用いて、INSERT, DELETE, UPDATE などの処理をまとめています。

php

// INSERT, DELETE, UPDATE の共通処理 function apply_row( $type, $args ){ $result = []; // INSERT if ( $type === 'insert' ) { $result = insert_row( $args ); // DELETE } else if ( $type === 'delete' ) { $result = delete_row( $args ); // UPDATE } else if ( $type === 'update' ) { $result = update_row( $args ); } return $result; } // INSERT function insert_row( $args ){ $sql = "INSERT INTO tbl (name, age) VALUES ($args['name'], $args['age']);"; } // DELETE function delete_row( $args ){ } // UPDATE function update_row( $args ){ } // INSERTを実行 $args = ['name'=>'a','age'=>20]; $result = apply_row( 'insert', $args );

試したクラス

上記の関数に対し、ある方から「クラスを使うべし」とアドバイスを頂きました
そこで初めてクラスを調べ、上記関数と同じ動作を実現するクラスを書けたかと思います。

php

// INSERT, DELETE, UPDATE の共通処理 class apply_row { public $id; public $name; public $age; public function __construct( $args ) { $this->name = $args['name']; $this->id = $args['id']; $this->age = $args['age']; } } // INSERT class insert_row extends apply_row { public function apply(){ $sql = "INSERT INTO tbl (name, age) VALUES ({$this->name}, {$this->age});"; } } // DELETE class delete_row extends apply_row { public function apply(){ } } // UPDATE class update_row extends apply_row { public function apply(){ } } // INSERTを実行 $args = ['name'=>'a','age'=>20]; $insert_row = new insert_row( $args ); $insert_row->apply();

ですが、こうしてクラスを使うと何が便利なのか、よくわかりません。
クラスの利便性とはどのようなものなのでしょうか?

また、現状私のアプリケーションは全て関数で構成されているのですが、上のようにすべてクラスに置き換えた方がいいのでしょうか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

gU8C8Nud4E8p3uW

2022/05/24 07:24

クラスという概念は、オブジェクト指向プログラミングから来ているのですが、オブジェクト指向プログラミングについての理解はどのくらいでしょうか? オブジェクト指向プログラミング(OOP)とは - 意味をわかりやすく - IT用語辞典 e-Words https://e-words.jp/w/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0.html
nikuatsu

2022/05/24 07:30

コメントありがとうございます。「機能を最小限に分割して、必要に応じて組み合わせるという原則」のように捉えています。なので「細かい機能の関数に分けておけばいい」と考えていおり、やはりクラスを使う必要性に至れないのです。
hoshi-takanori

2022/05/24 07:31

質問文のコードの場合、クラスは 1 つで、insert, delete, update はメソッドにすると良いのでは。
nikuatsu

2022/05/24 08:15 編集

コメントありがとうございます。その正確な記述は不明ですが、恐らく class insert_row、class delete_row、class update_row の3つを、class apply_row の中に入れ、3つ共 class でなく function にする。というイメージを仰っているのかと思います。 しかし分からないのは、 「その class apply_row{} というクラスの中で、3つの関数を実行すること」は、 「現状の function apply_row(){} という関数の中で、3つの関数を実行すること」と比べて何が便利なのか? という点です。 (もちろんこのような質問だけの狭義にとどまらず、広くクラスの利便性をこの機会に掴みたいというのが本意ですが。)
Zuishin

2022/05/24 08:17

私が低評価したわけではありませんが、謎な回答なので低評価が二つついています。 回答の真意を本人から詳しく聞いてみてはどうでしょうか? その質問特有の問題だと思うので、一般論では語れないのではないかと思います。
nikuatsu

2022/05/24 08:26

コメントありがとうございます。低評価が二つついた謎な回答とは、どちらの件でしょうか?
Zuishin

2022/05/24 08:27

質問からリンクされている、この疑問の発端になった回答です。
nikuatsu

2022/05/24 08:34

あ、なるほどあちらの質問でしたか。ありがとうございます。
m.ts10806

2022/05/24 09:27 編集

タイトルだけに応えると、過去に多く語りつくされてきているものなので、 過去質問、Web検索 して一通り読んでから来た方がいいです。 そのほうが回答もしっくりきて、今後どう活用できるかまで見えるはずです。
nikuatsu

2022/05/24 09:37

コメントありがとうございます。ネットにある一般論や例で理解する力が無いので、自分の例で質問させて頂きました。大変申し訳ございませんがどうかご容赦ください。
m.ts10806

2022/05/24 09:53

回答も結局ネットにある一般論や例と変わらないですよ。
nikuatsu

2022/05/24 09:56

そうなのですね。ネットで見つけることができずに質問してしまい大変申し訳ございません。
m.ts10806

2022/05/24 10:49

質問内容から何も調べずに質問してるような印象を受けましたので。
nikuatsu

2022/05/24 11:23

そうでしたか。確かに何を調べてどうわからないのかきちんと書かないとダメですね。大変申し訳ございません。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。