私はこれを持っています:
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();
}
}
「Database::Query」のように呼び出されるため、Queryを静的にしました。他の関数は他のクラスからアクセスする必要がないため、プライベートにしました。
クエリ関数から接続関数にアクセスすると、このエラーが発生します。
「オブジェクトコンテキストにないときに$thisを使用する」
privateは、これらの変数をこのクラスに対してプライベートにしますが、その中のすべてのメソッドで使用できると考えていたため、関数のスコープを取得する際に問題が発生しました...
私はself::Connect()を行うことができますが、それを使用することを保証するほど十分に理解していません...
self ::と%this->の違いを説明していただけますか
また、プライベート変数にアクセスできず、このクラスの外部でアクセスする必要はありません。このため、もう一度プライベート変数にしました...それでも$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;
}
}
すべてのデータを上部(または別のファイル)で定義しているため、Model View Control(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メソッドについてどう思いますか?