前提
クラスを使ったことがなくその利便性が理解できません。
関数でできるのになぜ使うのかを知りたいです。
現状の関数
現状では次の関数apply_row()を用いて、INSERT, DELETE, UPDATE などの処理をまとめています。
php
1// INSERT, DELETE, UPDATE の共通処理 2function apply_row( $type, $args ){ 3 $result = []; 4 5 // INSERT 6 if ( $type === 'insert' ) { 7 $result = insert_row( $args ); 8 9 // DELETE 10 } else if ( $type === 'delete' ) { 11 $result = delete_row( $args ); 12 13 // UPDATE 14 } else if ( $type === 'update' ) { 15 $result = update_row( $args ); 16 } 17 18 return $result; 19} 20 21// INSERT 22function insert_row( $args ){ 23 $sql = "INSERT INTO tbl (name, age) VALUES ($args['name'], $args['age']);"; 24} 25 26// DELETE 27function delete_row( $args ){ 28 29} 30 31// UPDATE 32function update_row( $args ){ 33 34} 35 36// INSERTを実行 37$args = ['name'=>'a','age'=>20]; 38$result = apply_row( 'insert', $args );
試したクラス
上記の関数に対し、ある方から「クラスを使うべし」とアドバイスを頂きました。
そこで初めてクラスを調べ、上記関数と同じ動作を実現するクラスを書けたかと思います。
php
1// INSERT, DELETE, UPDATE の共通処理 2class apply_row { 3 public $id; 4 public $name; 5 public $age; 6 7 public function __construct( $args ) { 8 $this->name = $args['name']; 9 $this->id = $args['id']; 10 $this->age = $args['age']; 11 } 12} 13 14// INSERT 15class insert_row extends apply_row { 16 public function apply(){ 17 $sql = "INSERT INTO tbl (name, age) VALUES ({$this->name}, {$this->age});"; 18 } 19} 20 21// DELETE 22class delete_row extends apply_row { 23 public function apply(){ 24 25 } 26} 27 28// UPDATE 29class update_row extends apply_row { 30 public function apply(){ 31 32 } 33} 34 35// INSERTを実行 36$args = ['name'=>'a','age'=>20]; 37$insert_row = new insert_row( $args ); 38$insert_row->apply();
ですが、こうしてクラスを使うと何が便利なのか、よくわかりません。
クラスの利便性とはどのようなものなのでしょうか?
また、現状私のアプリケーションは全て関数で構成されているのですが、上のようにすべてクラスに置き換えた方がいいのでしょうか?
クラスという概念は、オブジェクト指向プログラミングから来ているのですが、オブジェクト指向プログラミングについての理解はどのくらいでしょうか? オブジェクト指向プログラミング(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
コメントありがとうございます。「機能を最小限に分割して、必要に応じて組み合わせるという原則」のように捉えています。なので「細かい機能の関数に分けておけばいい」と考えていおり、やはりクラスを使う必要性に至れないのです。
質問文のコードの場合、クラスは 1 つで、insert, delete, update はメソッドにすると良いのでは。
コメントありがとうございます。その正確な記述は不明ですが、恐らく class insert_row、class delete_row、class update_row の3つを、class apply_row の中に入れ、3つ共 class でなく function にする。というイメージを仰っているのかと思います。
しかし分からないのは、
「その class apply_row{} というクラスの中で、3つの関数を実行すること」は、
「現状の function apply_row(){} という関数の中で、3つの関数を実行すること」と比べて何が便利なのか?
という点です。
(もちろんこのような質問だけの狭義にとどまらず、広くクラスの利便性をこの機会に掴みたいというのが本意ですが。)
私が低評価したわけではありませんが、謎な回答なので低評価が二つついています。
回答の真意を本人から詳しく聞いてみてはどうでしょうか?
その質問特有の問題だと思うので、一般論では語れないのではないかと思います。
コメントありがとうございます。低評価が二つついた謎な回答とは、どちらの件でしょうか?
質問からリンクされている、この疑問の発端になった回答です。
あ、なるほどあちらの質問でしたか。ありがとうございます。
タイトルだけに応えると、過去に多く語りつくされてきているものなので、
過去質問、Web検索 して一通り読んでから来た方がいいです。
そのほうが回答もしっくりきて、今後どう活用できるかまで見えるはずです。
コメントありがとうございます。ネットにある一般論や例で理解する力が無いので、自分の例で質問させて頂きました。大変申し訳ございませんがどうかご容赦ください。
回答も結局ネットにある一般論や例と変わらないですよ。
そうなのですね。ネットで見つけることができずに質問してしまい大変申し訳ございません。
質問内容から何も調べずに質問してるような印象を受けましたので。
そうでしたか。確かに何を調べてどうわからないのかきちんと書かないとダメですね。大変申し訳ございません。
回答6件
あなたの回答
tips
プレビュー