本人菜一枚,在學習中有些地方不太懂,也不好搜就發過來問問大家。
先謝謝所有回答和提供幫助的大大。
如題:
<code>目前有 a.php b.php c.php 三个文件 </code>
其中a.php偽代碼如下:
<code><?php function say($key,$val){ global $array; $array[$key]=$val; extract($array); } function write($name){ include_once($name.".php"); } $action = $_GET['a'];//假设当前 url: a.php?a=b include_once($action.".php"); $action();</code>
b.php程式碼如下
<code><?php function b(){ say("str","thinks"); write("c"); }</code>
c.php
<code><?php var_dump($str);</code>
需要達到的目的是,最後在C.PHP這個檔案中能直接讀到變數值。
大致邏輯如上,另外個人感覺這部分和框架中的assign/display類似,但不太懂怎麼實現。
以上程式碼報錯:Notice: Undefined variable: str
希望各位大牛幫忙給點意見(或寫習慣之類的).
謝.
本人菜一枚,在學習中有些地方不太懂,也不好搜就發過來問問大家。
先謝謝所有回答和提供幫助的大大。
如題:
<code>目前有 a.php b.php c.php 三个文件 </code>
其中a.php偽代碼如下:
<code><?php function say($key,$val){ global $array; $array[$key]=$val; extract($array); } function write($name){ include_once($name.".php"); } $action = $_GET['a'];//假设当前 url: a.php?a=b include_once($action.".php"); $action();</code>
b.php程式碼如下
<code><?php function b(){ say("str","thinks"); write("c"); }</code>
c.php
<code><?php var_dump($str);</code>
需要達到的目的是,最後在C.PHP這個檔案中能直接讀到變數值。
大致邏輯如上,另外個人感覺這部分和框架中的assign/display類似,但不太懂怎麼實現。
以上程式碼報錯:Notice: Undefined variable: str
希望各位大牛幫忙給點意見(或寫習慣之類的).
謝.
global $array;
只是修改了$array的作用域,但是extract($array);
是在函數內執行的,所以$str的作用域還是在函數內部,你可以在c.php裡面var_dump($arr['str'])。
至於你說的「另外個人感覺這部分和框架中的assign/display類似」和「但不太懂怎麼實現」這兩句話自相矛盾,你都不太懂怎麼實現的,那你憑什麼認為這部分和框架中的assign/display類似呢?
你這個例子用class來寫也是一樣的,不需要分別定義3個文件,看起來也舒服,但是你用的function,說明你不能很好的進行面向對象的思維,走的還不穩當我們給你講衝刺的技巧肯定沒什麼意義。
PHP
中所有的變數都有作用域,你看到的框架中使用assign/display
等形式的模版引擎,都是把extract
輸出變數和include
引入模版檔案放在同一個extract輸出變數和
include引入模版檔案放在同一個extract
輸出變數和
引入模版檔案放在同一個extract
輸出變數和
include
引入模版檔案放在同一個extract
include
引入模版檔案放在同一個extract🎜輸出變數和🎜include🎜引入模版檔案函數中,這樣才能使變數作用域一致,才能從被引入的檔案中獲得變數的值。而你的寫法,把兩個操作拆到不同的函數中,當然就不能互相存取了。別說你在🎜c.php🎜中想得到變數的值,你在🎜say("str","thinks");🎜之後直接取得也取得不到啊。 🎜 🎜 🎜看起來你還沒真正理解global以及函數的內部變數作用域的問題。建議再去查他們的概念或用法! 🎜按照你的思路var_dump($str);裡的$str就是extract($array);裡的參數'str',實際上你這時候要var_dump獲取的是say函數裡的變數$str。 🎜你這麼乾,無非就相當於:🎜<code>function a(){ $str = '123'; } a(); var_dump($str);</code>🎜你是拿不到$str的。 🎜