Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

PHP OO problema con clase para conectar a una base de datos MySQL con PHP usando Singleton

Estas en el tema de problema con clase para conectar a una base de datos MySQL con PHP usando Singleton en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Saludos. Estoy aprendiendo php y estoy tratando de llamar una clase de conexiona la db desde otra clase Este es la clase conexion que utiliza ...
  #1 (permalink)  
Antiguo 15/10/2014, 21:39
 
Fecha de Ingreso: abril-2012
Mensajes: 3
Antigüedad: 12 años, 7 meses
Puntos: 0
problema con clase para conectar a una base de datos MySQL con PHP usando Singleton

Saludos.
Estoy aprendiendo php y estoy tratando de llamar una clase de conexiona la db desde otra clase
Este es la clase conexion que utiliza singleton

class.database.php
Código:
<?php
/*
* Mysql database class - only one connection alowed
*/
class Database {
	private $_connection;
	private static $_instance; //The single instance
	private $_host = "HOSTt";
	private $_username = "USERNAME";
	private $_password = "PASSWORd";
	private $_database = "DATABASE";
 
	/*
	Get an instance of the Database
	@return Instance
	*/
	public static function getInstance() {
		if(!self::$_instance) { // If no instance then make one
			self::$_instance = new self();
		}
		return self::$_instance;
	}
 
	// Constructor
	private function __construct() {
		$this->_connection = new mysqli($this->_host, $this->_username, 
			$this->_password, $this->_database);
	
		// Error handling
		if(mysqli_connect_error()) {
			trigger_error("Failed to conencto to MySQL: " . mysql_connect_error(),
				 E_USER_ERROR);
		}
	}
 
	// Magic method clone is empty to prevent duplication of connection
	private function __clone() { }
 
	// Get mysqli connection
	public function getConnection() {
		return $this->_connection;
	}
}
?
Este es mi codigo para llamar y me arroja error

lotes.php[
Código:
<?php

include_once './class.database.php';

         
class lotes   {
        public $db;
           public function __construct() {
               $this->db = Database::getConnection();
            }
            function listarNombres() {                   
                       
                    $sql = "SELECT * FROM nombres";              
                    $result = $this->db->query($sql);
          while ($row = $result->fetch_array()) {
            echo '<option value="' . $row['id'] . '">' . $row['nombre'] . '</option>';
        }
    }

}

$test = new lotes();
$test->listarNombres();
Error que arroja:
Strict standards: Non-static method Database::getConnection() should not be called statically, assuming $this from incompatible context
  #2 (permalink)  
Antiguo 16/10/2014, 00:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: problema con clase para conectar a una base de datos MySQL con PHP usando

Estás invocando como estático un método que no lo es.

Al ser singleton debes acceder al método de la instancia, a través del método estático getInstance() que es público.

Código PHP:
Ver original
  1. Database::getInstance()->getConnection()

Eso es básicamente lo que te indica el mensaje de error.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/10/2014, 17:56
 
Fecha de Ingreso: abril-2012
Mensajes: 3
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: problema con clase para conectar a una base de datos MySQL con PHP usando

Listo.
Eso era muchas gracias Pate.
Ahora se algo sobre método estático y publico y como llamarlos. En los manuales y ejemplos de la internet no hablan de esos temas muy afondo. uno tiene que andarlos investigando.

Etiquetas: clase, mysql, php, select, singleton, sql, usando
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:57.