php全局类内函数外?
我可以从我的函数中访问$conn,如下所示:php全局类内函数外?,php,mysql,linux,oop,adodb,Php,Mysql,Linux,Oop,Adodb,我可以从我的函数中访问$conn,如下所示: function xyz($a){ global $conn; .... } 我想知道是否有一种方法可以在课堂上做到这一点 class abc { global $conn; public function xyz($a) { $conn->execute... } public function xya($a)
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...
}
}
我希望你能理解我的意思。提前感谢您的帮助。将其分配给
您也可以使用setter方法,而不是在构造函数中指定它,例如:
public function setConn($conn) {
$this->conn = $conn;
}
或者(尽管我不建议这样做)在类中将变量设置为public scope,这样您就可以随意更改它:
class abc{
public $conn;
...
}
$abc = new abc;
$abc->conn = $conn;
是的,只需将
global
更改为var
或public
,private
,protected
示例:
class myClass {
public $myClassVar = "Apples";
public __construct(){
echo( $this->myClassVar );
}
}
有关这些变量(public、private、protected)可见性的更多信息,请参见PHP.net上的。第二个示例是可能的,第一个示例不是。没有像第一个示例中那样使用全局变量类的成员变量,也没有像第一个示例中那样使用作用域 但是,一般来说,我建议避免完全使用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,但您不必遍历所有类并更改对该变量的每个引用
对于全局变量,跟踪哪个变量可用于哪个函数,或者以结构化的方式进行跟踪要困难得多。此外,在失去类的好处之前,不断增加对全局变量的依赖性是一种更大的诱惑。不能将全局变量作为修饰符 您可以在以下一种情况下做您想做的事情:
$con;
class abc
{
private $conn;
public function __construct($conn) {
$this->conn = $con;
} .....
}
或
对于其中一个对象,您可以在为全局对象实例化时实例化它。它是脏的(我一点也不喜欢“全局”),但它应该可以工作:
// ...
private $var;
public function foo() {
global $var;
$this->var = $var;
}
// ...
构造函数方法将是最好的,因为该资源显然是类的其余部分运行所必需的
class abc
{
static public $conn; ....
}
// ...
private $var;
public function foo() {
global $var;
$this->var = $var;
}
// ...