【问题标题】:OO database classOO 数据库类
【发布时间】:2010-06-25 05:16:18
【问题描述】:

我试图通过在 PHP 中创建一个数据库类来更清楚地学习面向对象编程。

这就是我现在所拥有的。当我尝试使用 $db->query();

调用它时,我收到关于 $mysqli 是未定义变量的错误

请解释如何定义变量$mysqli。

<?php

class phpDatabaseClass {

 public function __construct()
 {
  $mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname);
 }

 public function query()
 {
  $sql = 'select * from users';
  $results = $mysqli->query($sql);

  if(($results->num_rows) > 0) 
  {
   echo 'We have: '.$results->num_rows;
  }
 }

}

?>

在另一个文件中,我正在实例化对象,然后调用这样的函数:

 require 'phpDatabaseClass.php';
 define('DBhost', 'localhost');
 define('DBusername', 'root');
 define('DBpassword', 'root');
 define('DBname', 'campbellCustomCoatings');


 $db = new phpDatabaseClass();
 $db->query();

【问题讨论】:

    标签: php oop class


    【解决方案1】:

    您的mysqli 实例需要成为您班级的成员,请看这里...

    class phpDatabaseClass {
     private $mysqli;
     public function __construct()
     {
      $this->mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname);
     }
    
     public function query()
     {
      $sql = 'select * from users';
      $results = $this->mysqli->query($sql);
    
      if(($results->num_rows) > 0) 
      {
       echo 'We have: '.$results->num_rows;
      }
     }
    
    }
    

    另外,由于您正在学习,请尝试扩展 PDO 类以了解继承。

    另外,稍微有点切线,但通常常量以ALL_CAPS_WITH_UNDERSCORE_SEPARATORS 命名。

    此外,全局定义中的数据库内容可能存在风险,因为每个 PHP 都可以访问它。我知道 WordPress 做到了,但相信我,它的代码质量值得怀疑。然而,它的受欢迎程度无疑是巨大的。

    【讨论】:

    • 我认为定义常量的目的是使它们无法更改。您是说它有风险是因为它可以更改还是因为它可以被用户查看?有什么更好的解决方案?
    • @Catfish 只有风险,因为它们在全球范围内可用。也看到这个问题stackoverflow.com/questions/593440/…
    【解决方案2】:

    我看到的问题是试图让$mysqli 在同一个对象内的函数调用之间持续存在。

    需要做的是将变量存储为实例变量,由$this-&gt;[VARIABLE]限定:

    <?php
    
    class phpDatabaseClass {
    
     public function __construct()
     {
      $this->mysqli = new mysqli(DBhost, DBusername, DBpassword, DBname);
     }
    
    
     public function query()
     {
      $sql = 'select * from users';
      $results = $this->mysqli->query($sql);
    
      if(($results->num_rows) > 0) 
      {
       echo 'We have: '.$results->num_rows;
      }
     }
    
    }
    
    ?>
    

    我会考虑使用PDO

    【讨论】:

    • 您可能还需要定义属性:P
    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多