PHP“范围块”

时间:2013-12-29 19:18:59

标签: php scope

是否可以在C#(以及可能还有其他)中执行与using关键字类似的操作来限制变量范围?我正在尝试使用数据库连接模式,目前我正在尝试使用它:

$db = array(
    "server"   =>"localhost",
    "user"     =>"root",
    "pass"     =>"my_password",
    "database" =>"my_database"
);

$pdo = null;

{  // ???  These seem to be completely ignored, no errors, no effect at all
    extract($db);
    $pdo = new PDO("mysql:host=$server;dbname=$database", $user, $pass);
}

//Do database stuff

我正在使用extract,这通常是一个坏主意,所以我试图保护那些花括号所返回的东西。在C#中我可能会做喜欢 using (extract($db)) { ... }的事情,而且extract返回的内容仅限于该范围,但我无法弄清楚这是否可以在PHP中实现。我甚至不确定PHP是否处理变量。

非常感谢对此问题的任何见解!

1 个答案:

答案 0 :(得分:1)

PHP >= 5.3以来,您可以像Namespaces这样使用:

// per file
namespace App\One
$var = 1;

// or, per block
namespace App\Two {
    $var = 2;
}

之后您可以这样称呼它 - 还有其他方法:

echo \App\Two\var;

<强>更新

好吧,似乎variables不受namespace的影响。

  

虽然任何有效的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响:类(包括摘要和特征),接口,函数和常量。

source

但你仍然可以做的是改为使用 Constants

namespace App\One;
define('App\One\ABC', 'abc');            // specified namespace
define(__NAMESPACE__ . '\XYZ', 'xyz');   // current namespace -- which is App\One here