回答編集履歴
2
修正
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, $
|
45
|
+
})($template, $variables);
|
46
46
|
}
|
47
47
|
```
|
48
48
|
|
1
修正
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を出す部分とは別のファイルで関数を定義し
|
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などのメジャーなフレームワークにも似たような設計が取り入れられています。
|