Smartyの Syntax Errorの原因はスペースかも
2014/06/26
Smartyのなかなか見つからない Syntax Errorの原因
半角スペースを入れていることでエラーに
Smartyを使っていて、ときどき意味が分からない Syntax Errorに出会うことがあります。
文法は間違っていないはずなのに....どんなに悩んでもエラーが消えない。
そんなあなた!
余計な半角スペースを入れていませんか?
プログラムの記述の仕方は人それぞれ違いますが、PHPのプログラムを書く方の場合は、PHPがスペースもタブも改行も単なるスペースとして処理されるため、スペースを入れて見やすく調整をする方は多いものです。
ですが、そのスペースが Smartyでは Syntax Errorの原因になってしまうために厄介なのです。
Smartyは PHPのテンプレートエンジンにもかかわらず、PHPで使い慣れたいくつかの法則が使えないのです。
その代表的なものがスペースで、下記のような IF文を書くとしましょう。
下記のような記述は問題ないのですが、
—————
|
1 |
{if $aaaa == "yes"}ああああ{/if} |
—————
下記の 2行目の様に上下の文字の位置を合わせるために、「”no”」の後ろにスペースを入れたとします。そうすると、このスペースが Syntax Errorの原因になってしまうのです。
—————
|
1 2 |
{if $aaaa == "yes"}ああああ{/if} {if $aaaa == "no" }いいいい{/if} |
—————
同じように、単純に変数を表示させる際、下記のように変数名の前後にスペースを入れては行けません。下記は正しく表示されます。
|
1 |
{$aaaa} |
ですが、下記の様に「$aaaa」の変数の前後にスペースを入れた場合、これでは表示されなくなってしまうのです。
|
1 |
{ $aaaa } |
|
1 |
{ $aaaa} |
上記の様に前にスペースを入れた場合は、変数として処理されず、「{ $aaaa}」がそのまま表示されます。
|
1 |
{$aaaa } |
上記の様に後ろにスペースを入れた場合は、Syntax Errorになります。
私がそうなのですが、半角スペースを入れてソースコードの見やすさを調整している方はご注意ください。
header(“Location: $url”);を使う際もスペースの取り扱いに注意が必要
2014.04.02追記
同じように PHPでの開発においてスペースの取り扱いに注意が必要なものとして、header(“Location: $url”);があります。
こちらについて「PHP画面が真っ白 header(“Location: $url”);」に記事を書きましたので、併せてご覧ください。
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
乱数発生器(パスワード生成サービス)がバージョンアップで高速化!
乱数やパスワードを生成する乱数発生器を高速化!重複しない10桁、20桁の文字列を10万件、20万件と生成することも可能!イベントのキャンペーンのシリアルコードなどにも利用可能!
-
-
PHP range関数を使って階乗と重複組み合わせを計算
PHPの range関数を使って階乗と重複組み合わせを計算し、それを元に乱数発生器を作成しました。
-
-
配列の値をテキスト表示する際に「、」でつなげるときの処理方法の一例
配列の値を「、」でつないで出力する際、単純にforeachで繰り返し処理をすると「イヌ、サル、キジ、」となるが文字列最後の「、」を出力しない方法を3つ解説している。
-
-
JSON形式の値を配列形式に変換・PHPでは json_decode()、json_encode()
JSONとは「JavaScript Object Notation」の略でテキストベースのデータフォーマット。JSONの値をPHPで配列に変換するWebツールの紹介とその処理「json_encode()」「json_decode()」関数の解説。
-
-
フォルダを指定してファイルのパーミッションを変更するプログラム
フォームからフォルダ、パーミッションを指定しパーミッションを変更するサンプルプログラムの解説です。
-
-
PHPで月末から1ヶ月後「+1 month」を算出すると想定する日付にならない場合がある
PHPでは月末の1ヶ月後が想定した日付にならない場合がある。原因はバグではなくPHPの1ヶ月後の定義によるもの。なので必要とする日付を定義しそれに合わせてDateTime、modifyを使用して算出方法を解説している。
-
-
AdminerはphpMyAdmin代替のデータベース管理ツール
AdminerはphpMyAdminとほぼ同機能のデータベース管理ツール。PHP 1ファイルのため設置が非常に簡単で軽快に動作し、phpMyAdminの置き換えで使うのも問題なし。
-
-
PHP画面が真っ白 header(“Location: $url”);
PHPの開発で header(“Location: $url”);を使うと画面が真っ白になる不具合が出る場合もあります。
-
-
パーミッション(属性)一括変更ツール・WordPress最適化済
WordPressのパーミッション(属性)を一括変更するツールを作成!ファイル、フォルダのパーミッションが一覧表示でき、ファイルを選んでパーミッションの変更が行えます。
-
-
WindowsのXAMPPのPHPではstrptimeは使用不可。代替はdate_parse_from_formatを使う
strptimeはWindowsのPHPには未実装。LinuxとMacで挙動が異なる。PHP8.1で非推奨になる。なので日付のチェックはdate_parse_from_formatを使おう。使い方を詳細解説。
Comment
参考になりました!ありがとうございます!