Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 似乎不太了解如何使用构造函数_Php_Oop - Fatal编程技术网

Php 似乎不太了解如何使用构造函数

Php 似乎不太了解如何使用构造函数,php,oop,Php,Oop,我正在做一个小CMS的具体用途在我目前的工作,我想做的权利。。。因此,OOP 为此,我想创建一个数据库连接类,当我需要进行数据库查询时,可以在其他类中使用该类。然而,由于某种原因,我一直被停在同一点上,因为我似乎无法将连接字符串放入我的类中 无论我做什么改变,每次都会有“未定义…”的结果 文件-databaseManagement.class.php: class database { private $user; private $pass; private $db; private $ser

我正在做一个小CMS的具体用途在我目前的工作,我想做的权利。。。因此,OOP

为此,我想创建一个数据库连接类,当我需要进行数据库查询时,可以在其他类中使用该类。然而,由于某种原因,我一直被停在同一点上,因为我似乎无法将连接字符串放入我的类中

无论我做什么改变,每次都会有“未定义…”的结果

文件-databaseManagement.class.php:

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
    赋值来显式分配它

  • 与Java不同,PHP中的OOP实现不会自动别名属性。方法中的变量
    $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要求您更明确一点。