是否可以在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是否处理变量。
非常感谢对此问题的任何见解!
答案 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代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响:类(包括摘要和特征),接口,函数和常量。
但你仍然可以做的是改为使用 Constants :
namespace App\One;
define('App\One\ABC', 'abc'); // specified namespace
define(__NAMESPACE__ . '\XYZ', 'xyz'); // current namespace -- which is App\One here