【问题标题】:How to make my db variables global for my class (php)如何使我的 db 变量对我的班级来说是全局的(php)
【发布时间】:2015-02-04 09:00:04
【问题描述】:

我是一名新手编码员,我很困惑。我正在编写一个简单的代码,它从 mysql db 获取一些数据并将其发布在我的 CMS (umi cms) 网页上。问题是 cms 希望我将此代码放入自定义模块(.php 文件,其中包含我需要创建函数的新类)。我做到了,但它看起来并不优雅,因为我想让 db 连接变量成为全局类并且安全。将来我将在这里编写更多的函数,这些函数将使用数据库连接。这是我的模块类文件和底部 lib() 和 getlib() 的 2 个函数。你有什么建议?以某种方式仅返回用于在目标 div 中输出数据的方法

    class modulelements extends def_module {
public $per_page;

public function __construct() {
parent::__construct();

//module default code
}
//module default functions
// here are my functions: ))

 public function lib ($template = "default", $per_page = false) {

$begin = "<table>
     <tr> 
        <td>Название</td>
             <td>Автор</td> 
                <td>Год</td>
                    <td>Число экземпляров</td>
                        <td>Выдано</td>
                     </tr> " . $this->getlib() ;

$stop = mysqli_close($conn) . "</table>" ;

return $begin . $stop ;
}

public function getlib() {
$servername = "server";
$username = "name";
$password = "pass";
$dbname = "jum";
$conn = mysqli_connect($servername, $username, $password, $dbname);
$sql = "SELECT name, author, year, number, towhom FROM lib";
$conn->set_charset("utf8");
$result = mysqli_query($conn, $sql);
$stop = mysqli_close($conn) ;
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
$outlib = Array();
if (mysqli_num_rows($result) > 0) {
    // output data of each row into a string
    while($row = mysqli_fetch_assoc($result)) {
        $outlib[] = "<tr> 
                            <td> ". $row["name"] . " </td> 
                                <td>". $row["author"]. "</td>
                                     <td> ". $row["year"] ."</td>
                                         <td>". $row["number"]. "</td>
                                            <td>". $row["towhom"].  "</td>
                                        </tr> "  ;
         } 
    $string=implode("",$outlib);
return $string;
} else {
    return "0 results";
}
}
};    

【问题讨论】:

    标签: php class variables mysqli


    【解决方案1】:

    要使变量在您的类中随处可访问,只需在您的函数之外定义它们。如果您不希望在课堂外访问它们,可以将它们设为私有:

    class modulelements extends def_module {
        private $servername = "server";
        private $username = "name";
        private $password = "pass";
        private $dbname = "jum";
    }
    

    然后,您可以在课堂上的任何地方访问这些值,例如。

    $this->servername
    

    如果类的所有实例都相同,则可以使用class constants:

    const SERVERNAME = "server";
    

    然后您可以使用 self 访问它:

    self::SERVERNAME;
    

    【讨论】:

      【解决方案2】:

      您可以将这些变量设为$servername、$username、$password 和$dbnameconstants。

      在文件中包含以下代码,比如说database_config.php,并在必要时要求它:

      <?php
      
      define("SERVERNAME", "server");
      define("USERNAME", "name");
      define("PASSWORD", "pass");
      define("DBNAME", "jum");
      

      然后你可以像这样使用它们:

      <?php
      require 'database_config.php';
      $conn = mysqli_connect(SERVERNAME, USERNAME, PASSWORD, DBNAME);
      

      LE

      摘自php.net网站的常量手册:

      像超全局变量一样,常量的作用域是全局的。您可以访问 脚本中任何位置的常量,而不考虑范围。

      【讨论】:

        【解决方案3】:

        您可以在类中将它们定义为常量:

        class foo {
           const servername = "server";
            ....
        //Or retrieve them by a function
           function getServername() { return self::servername; }
        }
        

        并在任何地方使用它们:

        $fooObject = new foo();
        $server = $fooObject::servername;
        $server = $fooObject->getServername();
        

        更多信息:php.net

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-20
          • 2019-06-21
          • 1970-01-01
          • 1970-01-01
          • 2013-10-14
          相关资源
          最近更新 更多