php中為什麼在trycatch塊中定義的變數在塊外也可以使用?

來源:互聯網
上載者:User
function f() {    try {        $a = new obj;    } catch (Exception $e) {        echo $e->getMessage();    }    $a->func();}

如上,$a 變數仍然可以調用func(),也就是說,在try{}塊之外仍可以訪問,我的想法是因為$a是因為new產生的對象,在$a調用func函數時$a對象記憶體沒有被回收。
請問PHP高手,這種現象的原因,望賜教。


回複討論(解決方案)

try塊中的,只是定義裡面的內容如果有異常需要做指定的操作。本身並不是一個function。
如果拋出了一個異常,try語句中的指令碼將會停止執行,然後馬上轉向執行catch語句中的指令碼。

所以,以上代碼,拋開異常處理這塊,相當於

function f() {    $a = new obj;    $a->func();}

try catch 結構只是個處理異常的程式塊
從形式上講與 if else、while、for、foreach結構沒有區別

try塊中的,只是定義裡面的內容如果有異常需要做指定的操作。本身並不是一個function。
如果拋出了一個異常,try語句中的指令碼將會停止執行,然後馬上轉向執行catch語句中的指令碼。

所以,以上代碼,拋開異常處理這塊,相當於

function f() {    $a = new obj;    $a->func();}


這裡不用區分局部變數這些問題嗎?

try catch 結構只是個處理異常的程式塊
從形式上講與 if else、while、for、foreach結構沒有區別

比如if 語句塊裡定義的變數是局部變數,外部應該不可以訪問才對

if(1) {  $a = 123;}echo $a;


你自己看看,不要讀死書

try catch 結構只是個處理異常的程式塊
從形式上講與 if else、while、for、foreach結構沒有區別


我去翻了翻PHP和MySQL Web開發 P110頁-5.7 理解範圍這一節,裡面說不同的程式設計語言有不同的變數範圍規則。
PHP的規則:
在函數內部聲明的變數範圍是從聲明它們的那條語句開始到函數末尾。這叫做函數範圍。這些變數成為局部變數。
雖然版主這樣說,但我並沒有理解PHP的局部變數的範圍規則,不過謝謝版主的協助。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.