如何让我的db变量全局为我的类(php)

时间:2015-02-04 09:00:05

标签: php class variables mysqli

我是新手编码员,我很困惑。我正在编写一个简单的代码,它从mysql db获取一些数据并将其发布在我的CMS(umi cms)网页上。问题是cms要我把这段代码放到一个自定义模块(.php文件中,其中包含我需要创建我的函数的新类)。我做到了,但它看起来并不优雅,因为我想让db connecton变量成为全局类,并且安全。将来我将在这里编写一些将使用数据库连接的函数。这是我的模块类文件和底层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";
}
}
};    

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

您可以制作这些变量$servername$username$password$dbname constants

在文件中包含以下代码,让我们说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网站的常量手册:

  

与超全球一样,常数的范围是全局的。你可以访问   脚本中任何地方的常量,不考虑范围。

答案 2 :(得分:0)

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

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