数据成员即使是初始化也未初始化

时间:2014-07-22 00:02:49

标签: php

我是一名尝试用PHP编写代码的Java程序员,我有点困惑。我使用Netbeans作为我的IDE,并且有$ host,$ user,$ pass和$ db的警告消息说这些数据成员即使它们都没有被初始化。

class Database {

    private $host = "localhost";
    private $user = "MYDATABASE";
    private $pass = "MYPASSWORD";
    private $db = "MYDATABASE";

    private $con = null;

    function connect() {
        $con = pg_connect("host=$this->$host dbname=$this->$db user=$this->$user password=$this->$pass")
                or die("Could not connect to server\n");
    }

    function disconnect() {
        pg_close($this->$con);
    }
}

当我使用下面的代码运行脚本时,我收到以下错误消息

<?php

require_once "./helpers/Database.php";
$database = new Database();
$database->connect();
?>

“PHP Catchable致命错误:类数据库的对象无法在第13行的/var/www/MYSITE/helpers/Database.php中转换为字符串”

3 个答案:

答案 0 :(得分:1)

"host={$this->$host}..."

你有两个问题。

第一个(出错的原因)是你没有{braces}。这意味着PHP正在尝试将“$ this”评估为字符串,然后将字符串文字“ - &gt;”,然后将“$ host”评估为字符串。使用{braces}是很好的做法,但如果第二个问题得到纠正则不是绝对必要的。

第二个问题是,当您需要Database对象的“host”属性时,您正在使用“$ host”变量。它说$,在那里,评估$ host变量(“localhost”),然后查找数据库对象的“localhost”属性(没有)。通过保留$ out,可以引用“host”对象属性,而不是$ host变量指定的属性。

答案 1 :(得分:1)

您使用properties的语法错误,应为$this->foobar

答案 2 :(得分:0)

这会创建一个连接字符串,您可以使用该字符串传递到pg_connect()

$dsn = sprintf("host='%s' dbname='%s' user='%s' password='%s'",
    addcslashes($this->host, "\\'"),
    addcslashes($this->db, "\\'"),
    addcslashes($this->user, "\\'"),
    addcslashes($this->pass, "\\'")
);

它消除了双引号字符串中的$this->host等表达式的歧义,并将每个参数封装在单引号中,以便它支持空格或空值。