申し訳ありませんが、私はブラジル人です。 行きましょう。シングルトンPDOモデル - 階層
class DataBase extends PDO
{
/**
* @var object PDO
*/
private static $instance;
/**
* Cria uma instância do PDO representando a conexão ao banco de dados e torna a instância disponível como "singleton"
*
* @param string $dsn O DSN completo, ex.: mysql:host=localhost;dbname=testdb
* @param string $username O nome de usuário para a string DSN. Esse parâmetro é opcional para alguns drivers do PDO.
* @param string $password A senha para a string DSN. Esse parâmetro é opcional para alguns drivers do PDO.
* @param array $driver_options Um array key => value de opções de conexão específicas do driver
*
* @return PDO
*/
public
function __construct()
{
global $config;
$dsn = "mysql:dbname={$config['database'][AMBIENTE]['banco']};host={$config['database'][AMBIENTE]['url']}";
$username = $config['database'][AMBIENTE]['usuario'];
$password = $config['database'][AMBIENTE]['senha'];
if (!isset (self::$instance))
{
try
{
self::$instance = parent::__construct($dsn , $username , $password);
}
catch (PDOException $e)
{
Functions::Log('Erro de conexão de banco de dados: ' . $e->getMessage());
header('HTTP/1.1 500 Internal Server Error');
}
}
$this->storage = new ArrayObject();
}
public static
function getInstance()
{
if (!self::$instance)
{
self::$instance = new DataBase;
}
return self::$instance;
}
}
とクラスのデータベースを拡張したモデル::
はclass Model extends DataBase
{
protected $TABLE_NAME;
protected $TABLE_PREFIX;
/* all logic here, like getters, setters and methods like update, delete and insert... */
}
しかし、私は、クエリのようなPDOのメソッドにアクセスするか、または準備する$この変数を使用することはできません私はこれを持っています。 ModelクラスのコンストラクタがgetInstanceを呼び出しても、私はPDOコンストラクタと呼ばれていません。
可能でしょうか?
なぜデータベースコンストラクタは公開されていますか? – busypeoples
check self :: $ instance。これがあなたの問題です。コード例が必要な場合はお知らせください。 – busypeoples
@busypeoples私のエラーを啓発できますか?私はすべての魔法の方法がデフォルトで公開されるべきだと思った。私は例を持っていたいと思います! –