2016-02-01 52 views
0

示例1:這裏我期望函數hello必須位於全局範圍內。 但根據我的預期它不會有相同的行爲。它不會將函數hello放入全局範圍。在運行時,php必須將函數hello放入全局範圍。它說未定義的函數hello()。示例2:現在作爲示例1之後,我假設下面的腳本也必須作爲示例1工作。我認爲它也會給錯誤未定義的函數bar()。但現在在這裏它的行爲有所不同,並執行欄。php如何解析和解釋函數範圍

foo(); 


bar(); 

function foo() 
{ 
    function bar() 
    { 
    echo "I don't exist until foo() is called.\n"; 
    } 
} 

所以我無法獲得概念PHP解釋器內部的行爲。它如何解析程序,並且它是一次執行一個步驟還是一次執行整個程序?

回答

1

例一:

你不定義函數hello(),直到腳本的一部分運行後,它的中頻,因此沒有得到確定以後才嘗試調用它

篩選因爲IF在現在定義的函數hello被調用之前運行,所以不會出現錯誤。無論哪種方式,它都在全球範圍內。但是你的方式在你調用它之前並不存在。

<?php 
$fruit=true; 
if($fruit) 
{ 

    function hello() 
    { 
     echo "you are in the hello<br/>"; 
    } 
} 
foo(); 

hello(); 

function foo() 
{ 
    echo "you are in the foo<br/>"; 
} 
2

我舉一個manual你:

當一個函數在有條件地定義....它的定義必須在調用之前進行處理。

多:

所有的函數和類在PHP中具有全局範圍 - 它們可以被調用,即使他們裏面,反之亦然定義的函數之外。

+0

我已經閱讀過此手冊。我知道你在說什麼。但事情是,我想知道它將如何解釋這兩個例子使用哈希表和堆棧。我想知道內部。意味着php如何運行時間 –