首頁  >  文章  >  後端開發  >  PHP中global和include的一個問題

PHP中global和include的一個問題

WBOY
WBOY原創
2016-08-04 09:22:041021瀏覽

本人菜一枚,在學習中有些地方不太懂,也不好搜就發過來問問大家。
先謝謝所有回答和提供幫助的大大。

如題:

<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輸出變數和

include

引入模版檔案放在同一個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的。 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn