« Dreamwerver で Smarty | メイン | WindowsへXAMMPをインストール »

PHP4でSmarty、tplファイルしか表示されないのは参照渡しが原因でした

php4%2Bsmarty.gif
PHP4でSmartyを使用した際 $smarty->assign(); が効かず、
tplファイルしか表示されないという状態が発生。
実は先月くらいから悩んでいたのですが、目をそらしてましたw

結論から言うと、参照渡し がきちんとされていなかったことが原因。
PHP5での引数受け渡しは、デフォルトで全て 参照渡し となるらしいのですが、
PHP4では 値渡し というのがデフォルトで、普通に関数へnewした$smartyなどを渡すと、
まったく違うオブジェクトとして解釈されてしまうとのこと。

私の解決方法は、
一番初めの、関数の引数の前へ & を付ける
全ての関数内で、クラスの引数を受け取る際 = ではなく =& を使用する
です。

・一番初めの、関数の引数の前へ & を付ける
は、例えば以下のようにPHP5でやっていたのを、

$smarty = new Smarty;
$option = array("smarty" => $smarty, "○○" => $○○);
$file = main($option);
$smarty->display($file);

以下のようにPHP4では変えました。
$smarty = new Smarty;
$option = array("smarty" => &$smarty, "○○" => $○○);
$file = main($option);
$smarty->display($file);

最初に呼び出す親的な関数の引数部分でだけ&を付ければいいようで、
以後その関数内でさらに関数を呼び出す際は、この対処は不要のようです。

・全ての関数内で、クラスの引数を受け取る際 = ではなく =& を使用する
は、例えば以下のようにPHP5でやっていたのを、

function main($option)
{
  $smarty = $option['smarty'];
  $○○   = $option['○○'];
}

以下のようにPHP4では変えました。
function main($option)
{
  $smarty =& $option['smarty'];
  $○○   = $option['○○'];
}

私みたいな最近PHPを始めた方で、
↓のサンプルコードをPHP4の環境で試した方は、
けっこうはまるんじゃないかなぁ・・。
速効!図解プログラミングPHP+MySQLサポート


以下参考にしたサイトです。
Smartyを使用し画面出力を行おうとしていますが実際に...
「Yahoo!がPHPエンジニアを雇う時に聞く質問」に解答付けてみた、の4番
PHP4 と PHP5 の違い
コンストラクタで参照渡しをする理由


おつかれさまでした。。

関連する記事:1件

AD:

今日のひと言

呑みいきたい!

PHOTO COLLECTION

【WordPress】Ktai Entryをさくらで使う【メール投稿プラグイン】 : Go-PEARを使ったPEARのインストール : PEAR2.gif EmEditor で ダイレクトタグジャンプ : emeditor.gif WindowsXP へ XAMPP をインストール : xammp.jpg 携帯サイトで文字化け : 070707.gif 動的ページを静的URLで表示させる(PATH_INFO使用) : 400-300.gif PHP4でSmarty、tplファイルしか表示されないのは参照渡しが原因でした : php4%2Bsmarty.gif Dreamwerver で Smarty : Macromedia-Dreamweaver.gif MySQLの自動バックアップ phpMyBackupPro : logo.png さくらのレンタルサーバ へ PHP5.2.2 をインストールした : php.gif ダイナミックディスク⇔ベーシックディスクにはまる・・。 : 294574802_636f6f5e8c.jpg
RSS 2.0(XML)

Add to Google
My Yahoo!に追加
ADD TO Hatena::RSS
Subscribe with livedoor Reader

(→RSS/FEEDとは?

DJ SHU a.k.a NK-SUNSHINE BLOG 最新記事

CLUB BASE st.215 最新NEWS