所以我创建了一个数据库类来处理我的所有数据库请求。一切都通过构造函数,它应该返回值。
班级是如此
<?php
class Database {
/**
* This array holds all of the configuration settings for the database
* @var array
*/
private $config = array(
'username' => '',
'password' => '',
'host' => '',
'database' => ''
);
/**
* Holds the parameters passed to the class
* @var mixed
*/
private $parameters;
/**
* Database Handler
* @var [type]
*/
private $DBH;
/**
* Class constructor
* @param [type] $action [description]
* @param [type] $parameters [description]
*/
public function __construct($action, $parameters){
$this->parameters = $parameters;
$this->DBH = new PDO("mysql:host=".$this->config['host'].";dbname=".$this->config['database'], $this->config['username'], $this->config['password']);
return $this->$action();
}
private function query(){
$STH = $this->DBH->prepare($this->parameters);
$STH->execute();
$result = $STH->fetchColumn();
echo "<br><br>RESULT:".$result."<br><br><br>";
echo "<br><br>RESULT:".empty($result)."<br><br><br>";
return (empty($result)) ? FALSE : TRUE;
}
}
我删除了所有问题的功能。它意味着返回真或假。相反,当我调用$result = new Database('query', $query);
时,返回值是一个包含大量数据的对象
知道我做错了吗?
答案 0 :(得分:1)
PHP会忽略您在__construct
中返回的内容。如果使用new
创建新对象,则会返回新对象,而不是return
中__construct
所说的内容。
要实现你想要的,你必须创建一个新的函数,在构造函数之外为你执行动作 - 就像这样:
class Database {
// your code...
public function __construct($parameters) {
$this->parameters = $parameters;
$this->DBH = new PDO("mysql:host=".$this->config['host'].
";dbname=".$this->config['database'],
$this->config['username'],
$this->config['password']);
}
public function perform($action) {
return $this->$action();
}
// rest of your code...
}
// usage:
$db = new Database($query);
$result = $db->perform('query'); // result should be a boolean.
答案 1 :(得分:1)
__construct
用于返回新创建的对象。无法覆盖此行为。请参阅usage。
顺便说一下,当涉及new
运算符时,这是大多数OOP语言的行为。