在php类中包含文件

在php类中包含文件,php,class,Php,Class,我第一次用php中的类做一些事情。 我正在尝试获取类中的返回对象数组项 这是我的课 class User { $dbconn = include("config.php"); private $dbHost = $dbconn->host; private $dbUsername = $dbconn->username; private $dbPassword = $dbconn->pass; private $dbName

我第一次用php中的类做一些事情。 我正在尝试获取类中的
返回对象数组

这是我的课

class User {

    $dbconn = include("config.php");
    private $dbHost     = $dbconn->host;
    private $dbUsername = $dbconn->username;
    private $dbPassword = $dbconn->pass;
    private $dbName     = $dbconn->database;
    private $userTbl    = 'users';

    function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: " . $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
}
这是我的
config.php
文件

return (object) array(
    'host' => 'localhost',
    'username' => 'my_user',
    'pass' => 'my_pass',
    'database' => 'my_db'
);
我该怎么做

PHP Parse error:  syntax error, unexpected '$dbconn' (T_VARIABLE)
包括:

 $dbconn = include("config.php");

在构造函数中。

变量定义中不能有可执行代码,只能有静态值。所以这类事情不受支持:

class foo {
    public $var = result_of_some_function();
}
如果要初始化值,请使用构造函数。您最好将其作为配置文件阅读:

class User {
    public function __construct() {
        $config = json_decode(file_get_contents('config.json'));
        $conn = new mysqli($config->host, ...);
    }
}
或者更好,使用依赖项注入:

class User {
    protected $db = null;
    public function __construct($db) {
        $this->db = $db;
    }
}
然后在创建用户对象的代码中:

$db = new Db($config);
$user = new User($db);

试试这种使用方法

<?php
class User
{

    private $dbconn = null;
    private $dbHost;
    private $dbUsername;
    private $dbPassword;
    private $dbName;
    private $userTbl = 'users';

    function __construct()
    {
        include 'config.php'; //included file in constructor
        if (!isset($this->db))
        {
            $this->dbHost= $this->dbconn->host;
            $this->dbUsername= $this->dbconn->username;
            $this->dbPassword= $this->dbconn->pass;
            $this->dbName= $this->dbconn->database;
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if ($conn->connect_error)
            {
                die("Failed to connect with MySQL: " . $conn->connect_error);
            } else
            {
                $this->db = $conn;
            }
        }
    }

}

也许您应该将代码更改为

function __construct()
    {
        //included db file
        include 'config.php'; 
        if (!isset($this->db))
        { 
//code here
}

另一种方法是在配置文件中定义常量并在类中使用它们

在config.php文件中

define('HOST', 'localhost');
define('USERNAME', 'my_user');
define('PASS', 'my_pass');
define('DATABASE', 'my_db');
类内文件

include("config.php")
class User {
    private $dbHost     = HOST;
    private $dbUsername = USERNAME;
    private $dbPassword = PASS;
    private $dbName     = DATABASE;
    private $userTbl    = 'users';

    function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: " . $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
}

你为什么有这个$dbconn=include(“config.php”);在类之前包含该文件。@RavinderReddy我已经尝试过了。你是什么意思?我包括主机,用户名,通行证,数据库从文件。但这在课堂上不起作用。我只想感谢大家给了我各种各样的答案,这些答案对我很有帮助!谢谢这个答案我最喜欢,谢谢,我会试试的now@Darktwen欢迎尝试……:)让我知道它工作正常吗?如果在构造函数中建立连接,在对象上设置host、user、pass和dbname变量没有意义。我可以用$this->dbconn->database立即调用它,而不必在上面定义它,我明白了。可能是这样。但我所做的是以OP想要的方式回答了这个问题。
include("config.php")
class User {
    private $dbHost     = HOST;
    private $dbUsername = USERNAME;
    private $dbPassword = PASS;
    private $dbName     = DATABASE;
    private $userTbl    = 'users';

    function __construct(){
        if(!isset($this->db)){
            // Connect to the database
            $conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
            if($conn->connect_error){
                die("Failed to connect with MySQL: " . $conn->connect_error);
            }else{
                $this->db = $conn;
            }
        }
    }
}