質問するログイン新規登録

回答編集履歴

2

修正

2019/01/14 18:38

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -42,7 +42,7 @@
42
42
  (function () {
43
43
  extract(func_get_arg(1));
44
44
  include(__DIR__ . '/templates/' . func_get_arg(0) . '.php');
45
- })($template, $params);
45
+ })($template, $variables);
46
46
  }
47
47
  ```
48
48
 

1

修正

2019/01/14 18:37

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -1,4 +1,4 @@
1
- ケースバイケースではありますが今回の例を見る限りでは
1
+ ケースバイケースではありますが今回の例を見る限りでは
2
2
 
3
3
  ```php
4
4
  <?php
@@ -18,11 +18,9 @@
18
18
  ];
19
19
  return $animalMap[$animal] ?? '?';
20
20
  }
21
-
22
- ?>
23
21
  ```
24
22
 
25
- として上の方またはHTMLを出す部分とは別のファイルで関数を定義しHTML出力部分では
23
+ として上の方またはHTMLを出す部分とは別のファイルで関数を定義しHTML出力部分では
26
24
 
27
25
  ```html
28
26
  <div class="animal">
@@ -31,4 +29,28 @@
31
29
  ```
32
30
 
33
31
  と書くのが正解だと思います。基本的には関数でHTMLをリターンするのは避けたほうがいい設計ですね。
34
- ちなみに `<?= ... ?>` は `<?php echo ... ?>` のシンタックスシュガーです。
32
+ ちなみに `<?= ... ?>` は `<?php echo ... ?>` のシンタックスシュガーです。
33
+
34
+ そして、もしこの塊を再利用できるようにしたいのであれば、関数ではなくテンプレートファイルとして置くほうがいいと思います。例えば
35
+
36
+ ```php
37
+ <?php
38
+
39
+ // テンプレートファイルパス(の一部)とそれで使われている変数を渡してレンダリングする関数
40
+ function template($template, array $variables = [])
41
+ {
42
+ (function () {
43
+ extract(func_get_arg(1));
44
+ include(__DIR__ . '/templates/' . func_get_arg(0) . '.php');
45
+ })($template, $params);
46
+ }
47
+ ```
48
+
49
+ をどこかに定義しておき、HTML生成部分で
50
+
51
+ ```php
52
+ <?php template('animal', ['animal' => 'dog']) ?>
53
+ <?php template('animal', ['animal' => 'cat']) ?>
54
+ ```
55
+
56
+ のように呼び出すイメージです。実際、Laravelなどのメジャーなフレームワークにも似たような設計が取り入れられています。