iT邦幫忙

0

PHP - file_get_contents 的變數問題

Rach 2019-08-27 22:30:001102 瀏覽

各位大大們日安,我遭遇到了一個理想卻無法實現的問題,我想讓我的主要的頁面能夠加載額外的tmeplate,並且在template可以使用主要頁面的變數,但是在main.php的變數只能通用在自己的scope

include 'todo.php';

$order_number = 1569;
$html = file_get_contents('./todo.php');
echo $html;
<!-- template -->
<div>
    <div>
        <?php 
            echo $order_number; 
        ?>
    </div>
</div>

此為錯誤訊息,在加載下個頁面後,是錯誤的。

Notice: Undefined variable: order in /*/side.php on line 4

是否這個方法,只能靠著全域變數來解決呢?還是有其他不同性質的函示可以呼叫呢?先在此謝謝各位大俠鼎力相助。

甲土豆 iT邦新手 5 級 ‧ 2019-08-28 09:10:18 檢舉
自己想
Rach iT邦新手 4 級 ‧ 2019-08-28 09:29:00 檢舉
真的很謝謝你
1
dragonH
iT邦超人 5 級 ‧ 2019-08-27 22:58:33

index.php

<?php
  $order_number = 1569;
  include 'todo.php';
?>

todo.php

<div>
    <div>
        <?php 
            echo $order_number; 
        ?>
    </div>
</div>

result
https://ithelp.ithome.com.tw/upload/images/20190827/20117259dahlMHSQaI.png

雖然不是用 file_get_contents

但這樣是你要的?

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2019-08-28 08:49:03 檢舉

還有這種操作.

dragonH iT邦超人 5 級 ‧ 2019-08-28 09:15:18 檢舉

/images/emoticon/emoticon82.gif

Rach iT邦新手 4 級 ‧ 2019-08-28 09:30:36 檢舉

對!我看到就發現我的順序放置是錯誤的了,以為整個php宣告會是有hoisting的現象

Rach iT邦新手 4 級 ‧ 2019-08-28 09:30:37 檢舉

對!我看到就發現我的順序放置是錯誤的了,以為整個php宣告會是有hoisting的現象

dragonH iT邦超人 5 級 ‧ 2019-08-28 09:34:31 檢舉
1
ccutmis
iT邦高手 4 級 ‧ 2019-08-28 09:08:52

我想到一個略呆的方式處理給樓主參考看看
index.php

<?php
include 'todo.php';
$myVar = 1569;
$html = file_get_contents('./todo.php');
echo str_replace('{{$myVar}}',$myVar,$html);
?>

todo.php

<!-- template -->
<div>
	<div>{{$myVar}}</div>
</div>

RESULT:

{{$myVar}}
1569

說明:
todo.php裡面要輸出的php變數用{{}}包括起來,這樣比較有像在玩樣版,例如{{$myVar}}
index.php裡面的$html是通過file_get_contents取得,可以把它想像為取得todo.php整個文件的文字內容,接下來就是用str_replace把'{{$myVar}}'換成真正的變數$myVar,結果即為所求。
如果這個取代的動作很頻繁的話可以考慮寫個函式處理,降低源碼重覆性,以上~
/images/emoticon/emoticon82.gif

Rach iT邦新手 4 級 ‧ 2019-08-28 09:33:23 檢舉

謝謝樓主,這個觀念真的很受用,我打算建個instance 來專門執行這些模板變數的轉換

ccutmis iT邦高手 4 級 ‧ 2019-08-28 09:34:31 檢舉

不客氣~加油~

3

這是我在另一個很久以前的問題回答的

參考看看我以前寫給別人的這個做法。
可以更有效的使用及解決你的問題。
其實跟上面第一位的回答意思是類似的。
只是我把他給封裝來使用了。

Rach iT邦新手 4 級 ‧ 2019-08-30 12:06:56 檢舉

謝謝大大!因為php碰沒幾天,不是很熟悉,你的demo code可以幫助到我也建立一個完整class來解析,整個php寫起來也更像是在html中,不會要加上非常多的php start-end tag!

我要發表回答

立即登入回答