• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 4年前 (2022-01-23) 20次浏览 已收录 0个评论
文章目录[隐藏]
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语句本文来源[email protected]搞@^&代*@码)网9搞代gaodaima码中的脚本将会停止执行,然后马上转向执行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的局部变量的作用域规则,不过谢谢版主的帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php中为什么在trycatch块中定义的变量在块外也可以使用?

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址