我是一名尝试用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中转换为字符串”
答案 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
等表达式的歧义,并将每个参数封装在单引号中,以便它支持空格或空值。