我正试图使用另一个php文件中的函数创建一个连接。所以我可以在每个php文件中访问它。如何从另一个php文件调用class
中的函数。创建函数实例的正确方法是什么?我会把它放在文件的顶部还是类中?我试图运行我的系统,但连接无法加载。
connection.php
<?php
DEFINE ('host', 'localhost');
DEFINE ('username', 'root');
DEFINE ('password', '');
DEFINE ('database', 'librarysystem');
function getConnection()
{
$myDB = mysqli_connect(host,username,password,database);
if (!$myDB)
{
trigger_error ('Could not connect to MySQL: ' . mysqli_connect_error());
}
else
{
return $myDB;
}
}
?>
另一个我要调用函数或方法的文件。
loginCRUD.php
<?php
error_reporting(0);
require_once ('../connection/connection.php');
$myConnection = getConnection();
class loginCRUD
{
public function readLogin($dbusername,$dbpassword)
{
$statement = $myConnection->prepare("SELECT * FROM loginmodule WHERE loginUsername = ? AND loginPassword = ? LIMIT 1");
$statement->bind_param("ss", $dbusername, $dbpassword);
if($statement->execute())
{
$result = $statement->get_result();
if($result->num_rows)
{
$row = $result->fetch_assoc();
return $row;
}
else
{
return false;
}
}
else
{
return false;
}
}
}
(new loginCRUD)->readLogin($dbusername,$dbpassword);
?>
至少有两种可能的方法可以将$myConnection
传递给loginCRUD
类。
第一个是在类本身中创建$myConnection
:
class loginCRUD
{
protected $dbCon;
public function __construct()
{
$this->dbCon = getConnection();
}
public function readLogin($dbusername,$dbpassword)
{
$statement = $this->dbCon->prepare("YOUR SQL")
// other codes
}
}
(new loginCRUD)->readLogin($dbusername,$dbpassword);
第二步是将$myConnection
作为参数传递给类构造函数:
class loginCRUD
{
protected $dbCon;
public function __construct($myCon)
{
$this->dbCon = $myCon;
}
public function readLogin($dbusername,$dbpassword)
{
$statement = $this->dbCon->prepare("YOUR SQL")
// other codes
}
}
$myConnection = getConnection();
(new loginCRUD($myConnection))->readLogin($dbusername,$dbpassword);
出现错误的原因是您的变量范围。在loginCRUD
类中,试图访问一个名为myConnection
的变量,但它找不到,因为函数的作用域仅为该函数。它不知道您指的是全局声明的变量。解决此问题的正确方法应该是:
...
public function readLogin($dbusername,$dbpassword)
{
global $myConnection;
$statement = $myConnection->prepare("SELECT * FROM loginmodule WHERE loginUsername = ? AND loginPassword = ? LIMIT 1");
$statement->bind_param("ss", $dbusername, $dbpassword);
if($statement->execute())
{
...
供参考:访问类定义之外的变量和方法