MySQLI在类和函数中


MySQLI in classes and in functions

我的问题很简单,在检查了这里的一些细节后,我觉得最好再问一个新问题。

比方说我有两个班

class FirstClass {
  function test() {
    return "info";
  }
}
class SecondClass {
  function test() {
    return "info";
  }
}

然后我有我的mysqli对象

$mysqli = new mysqli(host, user, password, db);

我需要做些什么才能在类中的函数中使用mysqli对象。

到目前为止,这是我的两个想法,尽管我还没有把它放在网站上进行测试。

class FirstClass {
global $mysqli;
  function test() {
    $mysqli->query("some query");
    return "info";
  }
}

class FirstClass {
  function test() {
    global $mysqli;
    $mysqli->query("some query");
    return "info";
  }
}

如果需要的话,我很确定我可以设置一个构造,但我只需要知道哪种方式是共享mysqli对象的最佳方式/唯一方式。

感谢


编辑:

所以我已经做了大量的学习,现在在传递信息方面有了更多的经验。

这是我使用的最新的工作示例类型。

namespace Page;
use mysqli;
class edit extends details{
  protected $db;
  //this function is actually in the details class but there is no point in demoing 2 classes
  function __construct(mysqli $con){
    $this->db = $con;
  }
}

扩展Kneel在评论中告诉你的内容,并反驳其他答案

class foo {
  function __construct($mysqli){
    $this->mysqli = $mysqli;
  }
  function test() {
    return $this->mysqli->query("some query");
  }
}

这是必须的。
您应该在类之外的某个地方创建一个mysqli实例,然后将其传递给coustructor。

您可以使用__construct()来初始化您的MYSQLi。然后,您可以使用$this在课堂上访问它。

class FirstClass {
  public function __construct(){
    $this->mysqli = new mysqli("host", "user", "password", "db");
  }
  function test() {
    $this->mysqli->query("some query");
    return "info";
  }
}

如果你也想在第二个类中使用它,你可以用同样的方式构造它,或者扩展你的第一个类。

class SecondClass extends FirstClass {
  public function __construct(){
    parent::__construct();
  }
  function test() {
    return "info";
  }
}