我有这个方法适用范围:
class Database{
private $name = '';
private $user = '';
private $password = '';
private $host = 'localhost';
private $prefix = '';
private $connection_handle = null;
private function Connect(){
$this->connection_handle = mysql_connect($this->host, $this->user, $this->password);
if(!$this->connection_handle){
die('Could not connect: ' . mysql_error());
}else{
mysql_select_db($this->name, $this->connection_handle);
}
}
private function Close(){
mysql_close($this->connection_handle);
}
public static function Query($query){
$this->Connect();
$result = mysql_query($query, $this->connection_handle);
if(!$result){
die('Error: ' . mysql_error());
}else{
$DatabaseQuery = new DatabaseQuery();
$DatabaseQuery->result = $result;
$DatabaseQuery->mysql_num_rows = mysql_num_rows($result);
return $DatabaseQuery;
}
$this->Close();
}
}
我已经查询静态的,因为它会被称为像“数据库查询:: “ 其他功能不需要被任何其他类访问,所以我把它们设置为私有...
从Query函数访问Connect函数时出现此错误。
“使用$这个时候不是在对象上下文”
转念一想私人使得私有这一类,但可在其内的所有方法的变量,我有越来越的职能范围内的问题.. 。
我可以做自己::连接(),但我真的不明白这足以保证它的使用...
你能解释一下自我之间的区别::和%这个 - >
我也不能访问我的私有变量,他们真的永远不需要在这个类之外访问,我再次让它们成为私有的,因为这...然而$ this-> connection_handle没有变量的范围。
我真的需要让它们全部公开吗?必须有办法让它们仅适用于这个类,并且它的扩展吗?
----------------------编辑:///
我已经结束了让我所有的变量私有静态。 这是一个可以接受的方式吗?
----------------------编辑:///
现在我已经得到这个代码:
class Database{
private static $name = '';
private static $user = '';
private static $password = '';
private static $host = 'localhost';
private static $prefix = '';
private static $connection_handle = null;
private static function Connect(){
self::$connection_handle = mysql_connect(self::$host, self::$user, self::$password);
if(!self::$connection_handle){
die('Could not connect: ' . mysql_error());
}else{
mysql_select_db(self::$name, self::$connection_handle);
}
}
private static function Close(){
mysql_close(self::$connection_handle);
}
public static function Query($query){
self::Connect();
$result = mysql_query($query, self::$connection_handle);
if(!$result){
die('Error: ' . mysql_error());
}else{
$DatabaseQuery = new DatabaseQuery();
$DatabaseQuery->$result = $result;
$DatabaseQuery->$mysql_num_rows = mysql_num_rows($result);
return &$DatabaseQuery;
}
self::Close();
}
}
但是返回指针引用不起作用?实际上,我并没有像PHP指针那么熟悉,任何人都会对我在这里做错的事情有所了解?
这是因为我声明函数内的DatabaseQuery类的新实例不是它。 HELPPP :)
编辑:: ///////
我已经完成了我的类,它看起来像这样:
class DatabaseQuery{
public $result;
public $mysql_num_rows;
}
class Database{
private static $name = '';
private static $user = '';
private static $password = '';
private static $host = 'localhost';
private static $prefix = '';
private static $connection_handle = null;
protected function Connect(){
self::$connection_handle = mysql_connect(self::$host, self::$user, self::$password);
if(!self::$connection_handle){
die('Could not connect: ' . mysql_error());
}else{
mysql_select_db(self::$name, self::$connection_handle);
}
}
protected function Close(){
mysql_close(self::$connection_handle);
}
public static function FetchQueries(&$queries){
$db_query = array();
self::Connect();
foreach($queries as $key => $query){
$result = mysql_query($query, self::$connection_handle);
if(!$result){
die('Error: ' . mysql_error());
}else{
$DatabaseQuery = new DatabaseQuery();
$DatabaseQuery->result = $result;
$DatabaseQuery->mysql_num_rows = mysql_num_rows($result);
$db_query[ $key ] = $DatabaseQuery;
}
}
self::Close();
return $db_query;
}
}
现在,你可以把它在模型 - 视图 - 控制(MVC)的方式,因为你是在顶部定义(或者在一个单独的文件)
$queries = array(
"bottoms" => "SELECT * FROM bottoms",
"users" => "SELECT * FROM users"
);
$dbr = Database::FetchQueries($queries);
//display some users
while($row = mysql_fetch_object($dbr["apps"]->result)){
echo $row->title;
}
//display some bottoms
while($row = mysql_fetch_object($dbr["bottoms"]->result)){
echo $row->title;
}
你能告诉我你觉得这个MVC方法的所有数据?
有关更灵活的代码和示例,请参阅:http://stackoverflow.com/a/11580420/367456 - 也考虑直接使用PDO或Mysqli,它们将预制对象已经可以免去整个代码。 – hakre