回答編集履歴

2

修正

2019/01/14 18:38

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -86,7 +86,7 @@
86
86
 
87
87
  include(__DIR__ . '/templates/' . func_get_arg(0) . '.php');
88
88
 
89
- })($template, $params);
89
+ })($template, $variables);
90
90
 
91
91
  }
92
92
 

1

修正

2019/01/14 18:37

投稿

mpyw
mpyw

スコア5223

test CHANGED
@@ -1,4 +1,4 @@
1
- ケースバイケースではありますが今回の例を見る限りでは
1
+ ケースバイケースではありますが今回の例を見る限りでは
2
2
 
3
3
 
4
4
 
@@ -38,15 +38,11 @@
38
38
 
39
39
  }
40
40
 
41
-
42
-
43
- ?>
44
-
45
41
  ```
46
42
 
47
43
 
48
44
 
49
- として上の方またはHTMLを出す部分とは別のファイルで関数を定義しHTML出力部分では
45
+ として上の方またはHTMLを出す部分とは別のファイルで関数を定義しHTML出力部分では
50
46
 
51
47
 
52
48
 
@@ -65,3 +61,51 @@
65
61
  と書くのが正解だと思います。基本的には関数でHTMLをリターンするのは避けたほうがいい設計ですね。
66
62
 
67
63
  ちなみに `<?= ... ?>` は `<?php echo ... ?>` のシンタックスシュガーです。
64
+
65
+
66
+
67
+ そして、もしこの塊を再利用できるようにしたいのであれば、関数ではなくテンプレートファイルとして置くほうがいいと思います。例えば
68
+
69
+
70
+
71
+ ```php
72
+
73
+ <?php
74
+
75
+
76
+
77
+ // テンプレートファイルパス(の一部)とそれで使われている変数を渡してレンダリングする関数
78
+
79
+ function template($template, array $variables = [])
80
+
81
+ {
82
+
83
+ (function () {
84
+
85
+ extract(func_get_arg(1));
86
+
87
+ include(__DIR__ . '/templates/' . func_get_arg(0) . '.php');
88
+
89
+ })($template, $params);
90
+
91
+ }
92
+
93
+ ```
94
+
95
+
96
+
97
+ をどこかに定義しておき、HTML生成部分で
98
+
99
+
100
+
101
+ ```php
102
+
103
+ <?php template('animal', ['animal' => 'dog']) ?>
104
+
105
+ <?php template('animal', ['animal' => 'cat']) ?>
106
+
107
+ ```
108
+
109
+
110
+
111
+ のように呼び出すイメージです。実際、Laravelなどのメジャーなフレームワークにも似たような設計が取り入れられています。