gpt4 book ai didi

PHP变量生命周期/作用域

转载 作者:行者123 更新时间:2023-12-04 20:35:52 26 4
gpt4 key购买 nike

我是一名 Java 开发人员,最近我接受了 PHP 代码审查的任务。在浏览 PHP 源代码时,我注意到一个变量在 if、while、switch 和 do 语句中初始化,然后在这些语句之外使用相同的变量。下面是一段代码

场景 1

if ($status == 200) {
$messageCode = "SC001";
}

// Here, use the $message variable that is declared in an if
$queryDb->selectStatusCode($message);

场景 2

foreach ($value->children() as $k => $v) {
if ($k == "status") {
$messageCode = $v;
}
}

// Here, use the $messageCode variable that is declared in an foreach
$messageCode ....

在我看来,在控制语句中声明的变量只能在控制代码块中访问。

我的问题是,PHP 函数中变量的变量范围是什么?如何在控制语句 block 外访问该变量?

上述代码如何工作并产生预期结果?

最佳答案

在 PHP 中,控制语句没有单独的作用域。如果不存在函数,它们与外部函数或全局范围共享范围。 (PHP: Variable scope)。

$foo = 'bar';

function foobar() {
$foo = 'baz';

// will output 'baz'
echo $foo;
}

// will output 'bar'
echo $foo;

您的变量将具有在控制结构中分配的最后一个值。在控制结构之前初始化变量是一种很好的做法,但这不是必需的。

// it is good practice to declare the variable before
// to avoid undefined variables. but it is not required.
$foo = 'bar';
if (true == false) {
$foo = 'baz';
}

// do something with $foo here

命名空间不影响变量作用域。它们只影响类、接口(interface)、函数和常量 (PHP: Namespaces Overview)。以下代码将输出“baz”:

namespace A { 
$foo = 'bar';
}

namespace B {
// namespace does not affect variables
// so previous value is overwritten
$foo = 'baz';
}

namespace {
// prints 'baz'
echo $foo;
}

关于PHP变量生命周期/作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33750942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com