質問編集履歴
4
修正
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
|
-
|
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
誤字
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` に入れていますが、こ
|
86
|
+
ここで上述の問題が生じまして、つまり、`insert_my_relations` を下記は `class Book` に入れていますが、これを `class Tag` に入れた方がいいのかで悩んでいる次第です。
|
87
87
|
```php
|
88
88
|
// パスワードを確認
|
89
89
|
function check_thread_password( $thread_id, $password ){
|
2
バージョン情報を追加
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修正
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
|
-
$
|
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
|
-
$
|
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
|
|