質問編集履歴

4

修正

2022/05/31 04:44

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
@@ -1 +1 @@
1
- クラスの分け方いて
1
+ 関数のクラスいて、何が適切か分かりません
test CHANGED
@@ -3,11 +3,19 @@
3
3
 
4
4
  現状は400個ほどの関数のみで構成されているのですが、クラス化に挑戦することにしました。
5
5
 
6
+ どの関数をクラス化するのが適切かが分からないので、ひとまず「投稿コンテンツ(本やタグ)にまつわる処理」をクラス化していこうと考えました。
7
+
6
- ### 問題
8
+ ### 発生している問題
9
+ しかし、本テーブルへのINSERTの過程で、タグテーブルとリレーションテーブルもINSERTするのですが、
10
+
7
- 本テーブルへのINSERTの過程で、タグテーブルとリレーションテーブルもINSERTするのですが、クラス化にあたって **リレーションテーブルの処理を `class Book` の中に書くか `class Tag` の中に書くか**、これが分かりません
11
+ クラス化にあたって **リレーションテーブル保存処理を `class Book` の中に書くか `class Tag` の中に書くか**、分からず躓いておりま
12
+
13
+ (リレーションテーブルへの保存処理は、関数 `insert_my_relations` が担っています。)
8
14
 
9
15
  ### 知りたいこと
10
16
  どちらが良いのか、または別の書き方が良いのかを知りたいです。アドバイス頂戴できましたら幸いです。
17
+
18
+ ご回答を頂戴する身として大変僭越ではございますが、「その関数群(該当のソースコード)なら、このようにクラス化したらいいだろう」といった内容でご教示頂くと大変ありがたく思います。
11
19
 
12
20
  ### 該当のソースコード
13
21
  現状の関数はこのようになっています。(エラー処理とセキュリティ面は無視してください。)
@@ -34,7 +42,7 @@
34
42
 
35
43
  // おすすめの本を投稿
36
44
  function ajax_post_recommend_book(){
37
- // post された値( セキュリティは無視 )
45
+ // post された値
38
46
  $password = $_POST['password'];
39
47
  $book_data = $_POST['book_data'];
40
48
  $thread_id = $_POST['thread_id'];
@@ -81,9 +89,11 @@
81
89
  ```
82
90
 
83
91
  ### 試したこと
84
- 上記について、`class Book`と `class Tag` に分けて次のようにクラス化してみました。
92
+ 上記の関数群について、`class Book`と `class Tag` に分けて次のようにクラス化してみました。
85
93
 
86
- ここで上述の問題が生じまして、つまり、`insert_my_relations` を下記は `class Book` に入れていますが、これを `class Tag` に入れた方がいいのかで悩んでいる次第です。
94
+ ここで上述の問題が生じまして、つまり、関数 `insert_my_relations` を下記は `class Book` に入れていますが、これを `class Tag` に入れた方がいいのかで悩んでいる次第です。
95
+
96
+ もしくは何か全く別の書き方で適切なクラス化の方向性があるでしょうか…
87
97
  ```php
88
98
  // パスワードを確認
89
99
  function check_thread_password( $thread_id, $password ){
@@ -144,7 +154,7 @@
144
154
 
145
155
  // おすすめの本を投稿
146
156
  function ajax_post_recommend_book(){
147
- // post された値( セキュリティは無視 )
157
+ // post された値
148
158
  $password = $_POST['password'];
149
159
  $book_data = $_POST['book_data'];
150
160
  $thread_id = $_POST['thread_id'];

3

誤字

2022/05/30 13:18

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -83,7 +83,7 @@
83
83
  ### 試したこと
84
84
  上記について、`class Book`と `class Tag` に分けて次のようにクラス化してみました。
85
85
 
86
- ここで上述の問題が生じまして、つまり、`insert_my_relations` を下記は `class Book` に入れていますが、こ `class Tag` に入れた方がいいのかどうかで悩んでいる次第です。
86
+ ここで上述の問題が生じまして、つまり、`insert_my_relations` を下記は `class Book` に入れていますが、これを `class Tag` に入れた方がいいのかで悩んでいる次第です。
87
87
  ```php
88
88
  // パスワードを確認
89
89
  function check_thread_password( $thread_id, $password ){

2

バージョン情報を追加

2022/05/30 13:16

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -83,7 +83,7 @@
83
83
  ### 試したこと
84
84
  上記について、`class Book`と `class Tag` に分けて次のようにクラス化してみました。
85
85
 
86
- ここで問題が生じまして、つまり、`insert_my_relations` を下記は `class Book` に入れていますが、こは `class Tag` に入れた方がいいのかどうかで悩んでいる次第です。
86
+ ここで上述の問題が生じまして、つまり、`insert_my_relations` を下記は `class Book` に入れていますが、こは `class Tag` に入れた方がいいのかどうかで悩んでいる次第です。
87
87
  ```php
88
88
  // パスワードを確認
89
89
  function check_thread_password( $thread_id, $password ){
@@ -165,6 +165,4 @@
165
165
  ```
166
166
 
167
167
  ### 補足情報(FW/ツールのバージョンなど)
168
-
169
- ここより詳細な情報を記載してください
168
+ PHPは7.2ですが、8.0アプデ可能です
170
-

1

PDO修正

2022/05/30 13:14

投稿

nikuatsu
nikuatsu

スコア177

test CHANGED
File without changes
test CHANGED
@@ -55,7 +55,8 @@
55
55
  // テーブルロックして INSERT
56
56
  function insert_my_books_with_table_lock( $book_data ){
57
57
 
58
+ $pdo = new PDO();
58
- $sql = "LOCK TABLES my_books WRITE, my_tags WRITE, my_relations WRITE";
59
+ $pdo->query("LOCK TABLES my_books WRITE, my_tags WRITE, my_relations WRITE");
59
60
 
60
61
  // book テーブルを INSERT
61
62
  $inserted = insert_my_books( $book_data );
@@ -72,7 +73,8 @@
72
73
  }
73
74
 
74
75
  }
76
+
75
-
77
+ $pdo->query("COMMIT");
76
78
  return ['status'=>'ok','book_id'=>$book_id];
77
79
  }
78
80
 
@@ -114,8 +116,9 @@
114
116
  // テーブルロックして INSERT
115
117
  public function insert_my_books_with_table_lock( $book_data ){
116
118
 
119
+ $pdo = new PDO();
117
- $sql = "LOCK TABLES my_books WRITE, my_tags WRITE, my_relations WRITE";
120
+ $pdo->query("LOCK TABLES my_books WRITE, my_tags WRITE, my_relations WRITE");
118
-
121
+
119
122
  // book テーブルを INSERT
120
123
  $inserted = $this->insert_my_books( $book_data );
121
124
  if ( $inserted['status'] === 'ok' ) {
@@ -132,7 +135,8 @@
132
135
  }
133
136
 
134
137
  }
138
+
135
-
139
+ $pdo->query("COMMIT");
136
140
  return ['status'=>'ok','book_id'=>$book_id];
137
141
  }
138
142