Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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_Sql_Database - Fatal编程技术网

如何在php类中使用另一个文件

如何在php类中使用另一个文件,php,sql,database,Php,Sql,Database,我有两个文件dbconnect.php和config.php dbconnect.php <?php class connect{ public function __construct(){ $config = require_once __DIR__ . 'config.php'; } private $dbhost = $config['host']; private $dbuser = $config['username'];

我有两个文件dbconnect.php和config.php

dbconnect.php

 <?php 
class connect{
    public function __construct(){
        $config = require_once __DIR__ . 'config.php';
    }

    private $dbhost = $config['host'];
    private $dbuser = $config['username'];
    private $dbpass = $config['pass'];
    private $dbname = $config['dbname'];

    public function startConn(){
        $this->DBcon = null;
        try{
            $this->DBcon = new PDO("mysql:host=".$this->dbhost.";dbname=".$this->dbname, $this->dbuser, $this->dbpass);
        }catch(Exception $e){
            echo "error connecting:";
        }
        return $this->DBcon;
    }
} 

config.php

<?php

  /**
   * Contains all configurations
   *
  */
  return [
    'dbname' => 'user',
    'pass' => '@user.intern1',
    'username' => 'user1',
    'host' => 'localhost',
  ];
?>

在我的dbconnect.php文件中
如何将config.php中的变量包含到connect类中

如果我按照上面的方法做
它对我大喊大叫,给了我致命的错误:

“解析错误:语法错误,第8行C:\xampp\htdocs\hngfun\profile\adeojoemmanuel\php handler\dbconfig.php中意外的'$config'(T_变量)”

无法为声明的属性(如
private$dbhost
分配依赖于运行时数据的值,例如
$config['host'”

引述:

该声明可能包含一个初始化,但该初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算

在解决方案中,在构造函数中指定值:

class connect{
    public function __construct(){
        $config = require_once __DIR__ . 'config.php';

        private $this->dbhost = $config['host'];
        private $this->dbuser = $config['username'];
        private $this->dbpass = $config['pass'];
        private $this->dbname = $config['dbname'];
    }

    private $dbhost;
    private $dbuser;
    private $dbpass;
    private $dbname;

    public function startConn(){
        $this->DBcon = null;
        try{
            $this->DBcon = new PDO("mysql:host=".$this->dbhost.";dbname=".$this->dbname, $this->dbuser, $this->dbpass);
        }catch(Exception $e){
            echo "error connecting:";
        }
        return $this->DBcon;
    }
} 
private $dbhost;
private $dbuser;
private $dbpass;
private $dbname;

public function __construct(){
    $config = require_once __DIR__ . 'config.php';
    $this->dbhost = $config['host'];
    $this->dbuser = $config['username'];
    $this->dbpass = $config['pass'];
    $this->dbname = $config['dbname'];

}

您需要在构造函数内部设置:

class connect{
    public function __construct(){
        $config = require_once __DIR__ . 'config.php';

        private $this->dbhost = $config['host'];
        private $this->dbuser = $config['username'];
        private $this->dbpass = $config['pass'];
        private $this->dbname = $config['dbname'];
    }

    private $dbhost;
    private $dbuser;
    private $dbpass;
    private $dbname;

    public function startConn(){
        $this->DBcon = null;
        try{
            $this->DBcon = new PDO("mysql:host=".$this->dbhost.";dbname=".$this->dbname, $this->dbuser, $this->dbpass);
        }catch(Exception $e){
            echo "error connecting:";
        }
        return $this->DBcon;
    }
} 
private $dbhost;
private $dbuser;
private $dbpass;
private $dbname;

public function __construct(){
    $config = require_once __DIR__ . 'config.php';
    $this->dbhost = $config['host'];
    $this->dbuser = $config['username'];
    $this->dbpass = $config['pass'];
    $this->dbname = $config['dbname'];

}

我在猜。但我可以清楚地看到,您正在将$config设置为构造函数中的局部变量。这意味着一旦您离开构造函数,它就不可用

<?php 
class connect{
    public function __construct(){
        $config = require_once __DIR__ . 'config.php';
        $this->dbhost = $config['host'];
        $this->dbuser = $config['username'];
        $this->dbpass = $config['pass'];
        $this->dbname = $config['dbname'];
    }

    private $dbhost ;
    private $dbuser ;
    private $dbpass ;
    private $dbname ;

    public function startConn(){
        $this->DBcon = null;
        try{
            $this->DBcon = new PDO("mysql:host=".$this->dbhost.";dbname=".$this->dbname, $this->dbuser, $this->dbpass);
        }catch(Exception $e){
            echo "error connecting:";
        }
        return $this->DBcon;
    }
} 

第一个问题是,您不能仅从config.php文件返回任何内容。只能在函数内部返回结果。实现这一点的一种方法是将数组声明为全局变量,然后在需要该配置数组的所有其他php文件中使用它

<?php
/**
* Contains all configurations
*
*/
$dbconfig = array(
  'dbname' => 'user',
  'pass' => '@user.intern1',
  'username' => 'user1',
  'host' => 'localhost',
);
?>

<?php 
require_once __DIR__ . 'config.php';

class connect{
    public function __construct(){

    }

    private $dbhost = $dbconfig['host'];
    private $dbuser = $dbconfig['username'];
    private $dbpass = $dbconfig['pass'];
    private $dbname = $dbconfig['dbname'];

    public function startConn(){
        $this->DBcon = null;
        try{
            $this->DBcon = new PDO("mysql:host=".$this->dbhost.";dbname=".$this->dbname, $this->dbuser, $this->dbpass);
        }catch(Exception $e){
            echo "error connecting:";
        }
        return $this->DBcon;
    }
} 
?>


最重要的是没有显示
dbconfig.php的代码
声明的属性,如
private$dbhost
不能分配依赖于运行时数据的值,如
$config['host']
文件
dbconfig.php
在哪里?我也这么认为。事实证明,您可以从require返回全局范围。不建议使用这种方法,但您可以这样做。include/require确实允许可以分配的返回,如中所述,并且不限于“全局”范围<代码>可以在包含的文件中执行return语句,以终止该文件中的处理并返回到调用它的脚本。此外,还可以从包含的文件中返回值。您可以像对待普通函数一样接受include调用的值。。。事实上,Laravel在其配置文件中使用了这种方法,这对我来说也是一个学习新东西的好夜晚。谢谢分享:)