Hola amigos,
Por lo visto no puedo acceder una "propiedad" privada (atributo)... y no acabo de comprender exactamente cual es mi error.
Cita: Fatal error: Cannot access private property DatabaseConfig::$_dsn in C:\Users\pc1\Desktop\php\ModelsBase.php on line 21
Tengo dos archivos, dos clases. La primera clase se encarga simplemente de los atributos de la base de datos, usuario, contraseña, host, dsnPrefix etc...
Código PHP:
<?php
class DatabaseConfig
{
private $_dsnPrefix = 'mysql';
private $_host = 'localhost';
private $_port = '3306';
private $_user = 'root';
private $_pass = 'password';
private $_dbName = 'phpbb3';
private $_dsn = NULL;
public function __construct()
{
$this->_dsn = $this->_dsnPrefix . ':host=' . $this->_host . ';port=' . $this->_port . ';dbname=' . $this->_dbName;
}
}
Y con esta segunda clase lo que se pretende es, primero observar que hay un Singleton, para así tener una instancia siempre disponible para la DB... Como deshabilitamos el Constructor para evitar llamadas explicitas. Inicializo dentro del getInstance la conexión. Cogiendo los valores del la base de datos de la primera clase.
Código PHP:
<?php
require 'DatabaseConfig.php';
class ModelsBase
{
private $_db;
static private $instance = NULL;
private function __construct() {}
static public function getInstance()
{
if (self::$instance == NULL) {
self::$instance = new ModelsBase();
self::$instance->_db = new DatabaseConfig();
self::$instance->connect();
}
return self::$instance;
}
public function connect()
{
return new PDO($this->_db->_dsn, $this->_db->_user, $this->_db->_pass);
}
}
// Comprobación de acceso a DB
$db = ModelsBase::getInstance();
$consulta = $db->prepare('SELECT * FROM phpbb3_users');
$consulta->execute();
?><ul><?php
while($fila = $consulta->fetch())
{
?>
<li><?php echo $fila[0]?></li>
<li><?php echo $fila[1]?></li>
<?php
}
?></ul>
Que mi forma de acceder a las "propiedades" (atributos) de la primera clase es incorrecta parece obvio. Pero lo que busco comprender más que nada es el... ¿ Por que ?
Mi conjetura es que no tenga acceso o visibilidad ya que la llamada primera será estática... pero si así fuese, todavía no comprendo la razón de ese comportamiento.
Espero podais ayudarme.
Gracias