Php 似乎不太了解如何使用构造函数
我正在做一个小CMS的具体用途在我目前的工作,我想做的权利。。。因此,OOP 为此,我想创建一个数据库连接类,当我需要进行数据库查询时,可以在其他类中使用该类。然而,由于某种原因,我一直被停在同一点上,因为我似乎无法将连接字符串放入我的类中 无论我做什么改变,每次都会有“未定义…”的结果 文件-databaseManagement.class.php:Php 似乎不太了解如何使用构造函数,php,oop,Php,Oop,我正在做一个小CMS的具体用途在我目前的工作,我想做的权利。。。因此,OOP 为此,我想创建一个数据库连接类,当我需要进行数据库查询时,可以在其他类中使用该类。然而,由于某种原因,我一直被停在同一点上,因为我似乎无法将连接字符串放入我的类中 无论我做什么改变,每次都会有“未定义…”的结果 文件-databaseManagement.class.php: class database { private $user; private $pass; private $db; private $ser
class database {
private $user;
private $pass;
private $db;
private $serv;
private $type;
private $dsn;
private $sqlsrvString;
private $charset;
private $dbIni;
private $options;
public $connectionInfo;
public $dbConn;
public function __construct() {
$this->dbIni = parse_ini_file('settings/database.ini.php');
// ... assign values to individual variables based on values in the database.ini.php file.
$this->user = $this->dbIni['user'];
$this->pass = $this->dbIni['pass'];
$this->db = $this->dbIni['db'];
$this->serv = $this->dbIni['serv'];
$this->type = $this->dbIni['type'];
$this->charset = $this->dbIni['charset'];
$this->connectionInfo = array(
"Database"=>$this->db,
"UID"=>$this->user,
"PWD"=>$this->pass
);
}
public function dbConnect() {
$this->dbConn = sqlsrv_connect($this->serv, $this->connectionInfo);
}
文件-smallInfo.class.php
class smallInfo {
function __construct() {
$initDB = new database();
$initDB->dbConnect();
var_dump($initDB);
}
function showDkProgress(){
echo "<hr />";
print_r($initDB->dbConn);
echo "<hr />";
}
class smallInfo{
函数_u构造(){
$initDB=新数据库();
$initDB->dbConnect();
变量转储($initDB);
}
函数showDkProgress(){
回声“
”;
打印($initDB->dbConn);
回声“
”;
}
现在,smallInfo构造函数中的var_dump()返回所有预期值,包括$dbConn的值,但是,我似乎无法访问showDkProgress()中的$dbConn以用于查询。两个问题:
$variableName
)设置为对象属性。您必须使用$this->variableName
赋值来显式分配它
$variableName
不会自动等于$this->variableName
class smallInfo{
函数_u构造(){
$this->initDB=newdatabase();
$this->initDB->dbConnect();
变量转储($this->initDB);
}
函数showDkProgress(){
回声“
”;
打印($this->initDB->dbConn);
回声“
”;
}
}
在您的smallinfo
类中,initDB
是构造函数内部的局部变量。它在构造函数外部不存在
因此,在showDkProgress
中访问名为initDB
的未定义变量会产生错误
您需要将initDB
设置为一个字段
class smallInfo{
私有$initDB;
函数_u构造(){
$this->initDB=newdatabase();
$this->initDB->dbConnect();
变量转储($this->initDB);
}
函数showDkProgress(){
回声“
”;
打印($this->initDB->dbConn);
回声“
”;
}
}
函数showDkProgress()无法获取它,因为它是构造函数中唯一的局部变量。
如果在类中嵌入$initDB,则应该为它添加字段
所以试试看,例如:
class smallInfo {
public $initDB;
function __construct() {
$this->initDB = new database();
$this->initDB->dbConnect();
function showDkProgress(){
$si = new smallInfo();
echo "<hr />";
print_r($this->initDB->dbConn);
echo "<hr />";
}
class smallInfo{
公共数据库$initDB;
函数_u构造(){
$this->initDB=newdatabase();
$this->initDB->dbConnect();
函数showDkProgress(){
$si=新的smallInfo();
回声“
”;
打印($this->initDB->dbConn);
回声“
”;
}
您的打印什么($initDB->dbConn)
call show?PHP注意:未定义变量:第12行asfo\modules\smallInfo\smallInfo.class.PHP中的initDB PHP注意:尝试获取第12行asfo\modules\smallInfo\smallInfo.class.PHP中非对象的属性'dbConn',这只是一个旁白-对于一些编码标准可能值得一读。这是一些有帮助的基本内容的好指南代码可读性。首先将$initDB
声明为属性,然后作为$this->initDB
访问它,您已经在第一个类中获得了它,只需按照相同的要求在类SmallInfo中定义属性$dbConn
。使用$this->dbConn=$initDB->dbConnect()
在您的构造函数中-现在您可以使用$this->dbConn从类中的其他方法访问dbConn
Wow…这太愚蠢了(对我来说)…我已经尝试了“print\r($this->initDB->dbConn);”解决方案,但从未考虑过构造函数也需要$this->…如此明显,但仍然错过了它…谢谢。对于初学者来说,很容易混淆属性和局部变量。而且不同的语言在同一概念上有不同的实现。您的代码方式(不是确切的语法)PHP可能会在Java中顺利运行。PHP要求您更明确一点。