我可以从我的函数中访问$ conn,如下所示:
function xyz($a){
global $conn;
....
}
我想知道是否有办法在前一课中做到这一点。
class abc
{
global $conn;
public function xyz($a)
{
$conn->execute...
}
public function xya($a)
{
$conn->execute...
}
}
上述方法给我一个错误。我知道我可以像这样访问它:
class abc
{
public function xyz($a)
{
global $conn;
$conn->execute...
}
public function xya($a)
{
global $conn;
$conn->execute...
}
}
我希望你能明白我的意思。在此先感谢您的帮助。
答案 0 :(得分:3)
你的第二个例子是可能的,你的第一个例子不是。没有一个类的成员变量是一个全局变量,或者像你在第一个例子中一样使用范围。
但是,一般情况下,我建议您完全避免使用global关键字。我做了很多PHP编程,并且从未在任何严肃的事情中使用过它(实际上,在过去10年左右的时间里都是如此)。
如果您需要能够在整个班级中访问变量,我会将变量传递给您的类构造函数,如下所示:
class abc
{
private $conn;
function __construct($conn)
{
$this->conn = $conn;
}
public function xyz($a)
{
$this->conn->execute();
}
public function xya($a)
{
$this->conn->execute();
}
}
然后你有
$myabc = new abc($conn);
这样,您就明确了哪些变量可用于哪些函数。它还使得将来更容易/可能为不同的类提供不同的$ conn值,甚至重命名$ conn是什么,但是你不必遍历所有类并更改对该变量的每个引用。
对于全局变量,跟踪哪些变量可用于哪些函数或以结构化方式进行操作要困难得多。此外,还有更多的诱惑是继续在全局变量上依赖更多依赖,直到你失去了拥有类的好处。
答案 1 :(得分:1)
将其分配给class variable。
$conn = 'something';
class abc
{
private $conn;
public function __construct($conn) {
$this->conn = $conn;
}
public function xyz($a)
{
$this->conn->execute...
}
public function xya($a)
{
$this->conn->execute...
}
}
您也可以使用setter方法,例如:
,而不是在构造函数中指定它public function setConn($conn) {
$this->conn = $conn;
}
或(虽然我不建议这样做)将变量设置为类中的公共范围,允许您随意更改它:
class abc{
public $conn;
...
}
$abc = new abc;
$abc->conn = $conn;
答案 2 :(得分:0)
您不能将全局视为修饰符。
您可以在以下方式中执行您想要的操作:
$con;
class abc
{
private $conn;
public function __construct($conn) {
$this->conn = $con;
} .....
}
OR
class abc
{
static public $conn; ....
}
对于其中一个对象,您实例化它而不是实例化全局。
答案 3 :(得分:0)
它很脏(我根本不喜欢“全球”)但它应该有效:
// ...
private $var;
public function foo() {
global $var;
$this->var = $var;
}
// ...
答案 4 :(得分:-2)
是的,只需将global
更改为var
或public
,private
,protected
。
示例:强>
class myClass {
public $myClassVar = "Apples";
public __construct(){
echo( $this->myClassVar );
}
}
有关这些变量(public,private,protected)的可见性的更多信息,请参阅PHP.net上的this page。