php try catch 作用域,php中为什么在trycatch块中定义的变量在块外也可以使用?

本文探讨了PHP函数中try块与catch语句的作用,指出try块不是函数,而是异常处理结构。它不影响函数内部$a对象的生命周期,即使有异常,func()依然能调用。同时,文章澄清了关于局部变量的作用域问题,强调了try...catch与if等结构在形式上的相似性和不同之处。
摘要由CSDN通过智能技术生成

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的局部变量的作用域规则,不过谢谢版主的帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值