PHP:プロになるためのPHPプログラミング入門 8

公開:2026.05.27(水) 07:20

プロになるためのPHPプログラミング入門 8

以下書籍に付属するサンプルの実行環境を構築する。
プロになるためのPHPプログラミング入門」(ISBN 978-4-7741-4972-1)

環境は以下記事のものを使用
PHP:プロになるためのPHPプログラミング入門 サンプル環境構築

PHP:8.3.30
MySQL:8.0.46

1.5.6 HTML_Template_Flexyの制御構文

◆ {foreach:value, value}
◆ {foreach:variable, key, value}
Twigとさほど変わらない
{% for record in records %} {% endfor %}
{% for key, value in records %} {% endfor %}

◆ {if:variable}
◆ {if:method()}
Twigではif:method()は使えないが、さほど変わらない
{% if variable %}{% endif %}

サンプルの実行

◆ リスト 1-13 プログラムファイル (/ppa/f15flexyif.php)
実行したところエラーが発生した。
Fatal error: Uncaught TypeError: PpPage::display(): Argument #2 ($elem) must be of type array, stdClass given, called in /var/www/prophp_sample/www/ppa/p15flexyif.php on line 13 and defined in /var/www/prophp_sample/www/ppa/ppPage.php:26 Stack trace: #0 /var/www/prophp_sample/www/ppa/p15flexyif.php(13): PpPage->display('p15flexyif.html', Object(stdClass)) #1 {main} thrown in /var/www/prophp_sample/www/ppa/ppPage.php on line 26

これは \$page->displayの第2引数に $obj (stdClassクラス) を渡しているため。
現在、第2引数は配列のみ指定可能。
なので全体的に配列に変更する。

<?php
//!	HTML_Template_Flexyのサンプル	if制御構文で表示を制御する
require_once 'ppPage.php';
&page = new PpPage;
// &dobj = new stdClass();
&obj = array();
// &dobj->member = false;
&obj['member'] = false;

//	0: 非会員	1: 会員
&kaiin = 1;
if(&kaiin === 1){
	// &dobj->member = true;
	&obj['member'] = true;
}
&page->display('p15flexyif.html', &obj);

テンプレートのif文もTwigの書式に修正

修正前:
{if:member}
<h2>会員さまへのスペシャル情報</h2>
<p id="kaiin">
会員さまだけに、いちはやくお知らせする新商品情報です。
ご案内は<a href="#">こちら</a>からどうぞ。</p>
{end:}

修正後:
{% if member %}
<h2>会員さまへのスペシャル情報</h2>
<p id="kaiin">
会員さまだけに、いちはやくお知らせする新商品情報です。
ご案内は<a href="#">こちら</a>からどうぞ。</p>
{% endif %}

参考 (サンプル全体)

◆ リスト1-12 テンプレートファイル (p15flexyif.html) (P.70)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style TYPE="text/css">
<!--
h2 {  margin-bottom:0; padding:5px; width:400px; color:#FFFFFF;
background-color:#267333; border-left: 12px solid #990026;
}
#kaiin {  margin-top:0; padding:10px; width:400px; color: #000000;
background-color: #DCF0DF; border: 1px solid #267333;
}
-->
</style>
</head>
<body>
{% if member %}
<h2>会員さまへのスペシャル情報</h2>
<p id="kaiin">
会員さまだけに、いちはやくお知らせする新商品情報です。
ご案内は<a href="#">こちら</a>からどうぞ。</p>
{% endif %}
<h3>当店の人気商品</h3>
<ul>
<li>もりもりうどん</li>
<li>シャッキリドリンク</li>
<li>パパイア大福</li>
</ul>
</body>
</html>

◆ リスト1-13 プログラムファイル (/ppa/f15flexyif.php) (P.71)
<?php
//!	HTML_Template_Flexyのサンプル	if制御構文で表示を制御する
require_once 'ppPage.php';
$page = new PpPage;
$obj = array();
$obj['member'] = false;

//	0: 非会員	1: 会員
$kaiin = 1;
if($kaiin === 1){
	$obj['member'] = true;
}
$page->display('p15flexyif.html', $obj);


0 件のコメント:

その他の記事