Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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_Constructor - Fatal编程技术网

Php 连接到数据库时未定义的变量

Php 连接到数据库时未定义的变量,php,oop,constructor,Php,Oop,Constructor,我不知道为什么当我尝试调用connect()方法时,user、host和password变量未定义 $app->get('/get', function () use($app){ $db = new Db_handler; $db->connect(); } ); 下面是Db\u处理程序类本身 <?php class Db_handler{ private $driver

我不知道为什么当我尝试调用
connect()
方法时,
user
host
password
变量未定义

    $app->get('/get', function () use($app){
        $db = new Db_handler;
        $db->connect();
    }
);
下面是
Db\u处理程序
类本身

    <?php
        class Db_handler{
                private $driver;
                private $host;
                private $port;
                private $schema;
                private $username;
                private $password;

                function Db_handler( $config_file = 'connection.ini' ){
                        if(!$connection_data = parse_ini_file($config_file, true)) throw new exception("No se puedo abrr el fichero de configuracion ".$config_file." .");
                        $driver = $connection_data["database"]["driver"];
                        $host = $connection_data["database"]["host"];
                        $port = $connection_data["database"]["port"];
                        $schema = $connection_data["database"]["schema"];
                        $username = $connection_data["database"]["username"];
                        $password = $connection_data["database"]["password"];

                        echo $host;
                        echo $username;
                        echo $password;
                }

                function connect(){
                        $link = mysql_connect($host, $username, $root)
                        or die('No se pudo conectar: ' . mysql_error());
                }

        }
?>


构造函数的回音正确显示变量。

编辑连接函数。更改此行:

$link = mysql_connect($host, $username, $root)
为此:

$link = mysql_connect($this->host, $this->username, $this->password)
函数connect中使用的变量是未初始化的局部变量。当您将关键字$this与指针->一起使用时,您将调用构造函数中已经定义的类变量。因此,在构造函数中设置类私有变量也很重要:

$this->driver = $connection_data["database"]["driver"];
$this->host = $connection_data["database"]["host"];
$this->port = $connection_data["database"]["port"];
$this->schema = $connection_data["database"]["schema"];
$this->username = $connection_data["database"]["username"];
$this->password = $connection_data["database"]["password"];

我认为未定义的变量只有$root。 您可以调用
mysql\u connect($host,$username,$root)

并且$root不会在任何地方声明。

在构造函数和
connect()
方法中,使用$this作为每个变量名称的前缀

$this->driver = ...
$this->host   = ...
等等