我目前正在編寫一門初級課程,主要關注PHP,在一次練習中我們將代碼從通過普通名稱空間包含模板改爲包含它通過一個函數使我們可以使用輸出緩衝。爲了使它工作,我們正在使用extract(),雖然我理解提取如何工作,但我很難理解爲什麼我們需要使用它來使包括的工作。在通過函數運行之前,我們不需要發送或提取新的變量。有人能夠解釋這背後的原因嗎?在使用輸出緩衝的PHP函數中使用extract()
這裏的功能是什麼樣子:
const TEMPLATE_EXTENSION = '.phtml';
const TEMPLATE_FOLDER = 'templates/';
const TEMPLATE_PREFIX = 'cart_view_';
function display($template, $variables, $extension = TEMPLATE_EXTENSION) {
extract($variables);
ob_start();
include TEMPLATE_FOLDER . TEMPLATE_PREFIX . $template . $extension;
return ob_get_clean();
}
下面是我們如何把它叫做:
<?php echo display('user', ['users' => $users, 'cart' => $cart]); ?>
<?php echo display('item', ['new_item' => $new_item]); ?>
<?php echo display('items', ['cart' => $cart]); ?>
這裏還有什麼是在模板中我們包括:
<h2>New Item</h2>
<p><?php printf($new_item['name']);?> is $<?php printf($new_item['price']);?></p>
<h2>User: <?php printf($cart['user']); ?></h2>
<p>ID: <?php printf($users[$cart['user']]['id']); ?></p>
<p>Email: <?php printf($users[$cart['user']]['email']); ?></p>
<h2>Cart</h2>
<?php foreach ($cart['items'] as $item) {
printf("<p>%s is $%d</p>\n", $item['name'], $item['price']);
} ?>
的變量是在已經包含在索引中的另一個文件中定義的。 以前使用的功能緩衝區之前,所有我們需要的是這樣的:
<?php include 'templates/cart_view_user.phtml'; ?>
<?php include 'templates/cart_view_item.phtml'; ?>
<?php include 'templates/cart_view_items.phtml'; ?>