如何使我的 class (php) 的数据库变量成为全局变量
How to make my db variables global for my class (php)
我是一名菜鸟编码员,我很困惑。我正在编写一个简单的代码,它从 mysql db 获取一些数据并将其发布到我的 CMS (umi cms) 网页上。问题是 cms 要我将此代码放入自定义模块(.php 文件,其中包含新的 class,我需要在其中创建我的函数)。我做到了,但它看起来并不优雅,因为我想让 db connecton 变量成为 class 全局且安全。将来我将在这里编写更多使用数据库连接的函数。这是我的模块 class 文件和底部的 lib() 和 getlib() 中的 2 个函数。你有什么建议?不知何故只有 return 方法在目标 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";
}
}
};
您可以使这些变量 $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常量手册网站:
Like superglobals, the scope of a constant is global. You can access
constants anywhere in your script without regard to scope.
要使变量在您的 class 中随处可见,只需在您的函数之外定义它们。如果您不希望在 class:
之外访问它们,您可以将它们设为私有
class modulelements extends def_module {
private $servername = "server";
private $username = "name";
private $password = "pass";
private $dbname = "jum";
}
然后您可以使用 class 中的任何位置访问这些值,例如
$this->servername
如果 class 的所有实例都相同,您可以使用 class constants:
const SERVERNAME = "server";
然后您可以使用 self 访问它:
self::SERVERNAME;
您可以在 class 中将它们定义为常量:
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
我是一名菜鸟编码员,我很困惑。我正在编写一个简单的代码,它从 mysql db 获取一些数据并将其发布到我的 CMS (umi cms) 网页上。问题是 cms 要我将此代码放入自定义模块(.php 文件,其中包含新的 class,我需要在其中创建我的函数)。我做到了,但它看起来并不优雅,因为我想让 db connecton 变量成为 class 全局且安全。将来我将在这里编写更多使用数据库连接的函数。这是我的模块 class 文件和底部的 lib() 和 getlib() 中的 2 个函数。你有什么建议?不知何故只有 return 方法在目标 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";
}
}
};
您可以使这些变量 $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常量手册网站:
Like superglobals, the scope of a constant is global. You can access constants anywhere in your script without regard to scope.
要使变量在您的 class 中随处可见,只需在您的函数之外定义它们。如果您不希望在 class:
之外访问它们,您可以将它们设为私有class modulelements extends def_module {
private $servername = "server";
private $username = "name";
private $password = "pass";
private $dbname = "jum";
}
然后您可以使用 class 中的任何位置访问这些值,例如
$this->servername
如果 class 的所有实例都相同,您可以使用 class constants:
const SERVERNAME = "server";
然后您可以使用 self 访问它:
self::SERVERNAME;
您可以在 class 中将它们定义为常量:
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