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的局部變數的範圍規則,不過謝謝版主的協助。