Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php全局类内函数外?_Php_Mysql_Linux_Oop_Adodb - Fatal编程技术网

php全局类内函数外?

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)

我可以从我的函数中访问$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...
       }
    }
我希望你能理解我的意思。提前感谢您的帮助。

将其分配给

您也可以使用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;
}
// ...