Bueno... quiero hacer la separacion de clases...... como dijo Enrique, sobre todo porque quiero resolver algo que me criticó sabiamente el amigo GatorV.
El problema es cuando intento lo basico, o sea ... crear la clase abstracta y definir algunas cosas como protected o abstract...... me sale
un error que no encuentro en Google Cita: Fatal error: Access level to sql::$_server must be protected (as in class database) or weaker in C:\xampp\htdocs\dir2.com\db-class3.php on line 107
El punto es que en linea 107 no hay una instruccion!!! alguien me podria ayudar ?
![lloron](http://static.forosdelweb.com/fdwtheme/images/smilies/chillando.png)
gracias desde ya!!!!!!!!!
Ah! yo asumo que la que tiene que tener el patron singleton es la clase hija..... (o las clases hijas) porque me parece que es lo que tiene sentido. O no?
Código PHP:
<?php
abstract class database{
protected $_con;
protected $_user;
protected $_pass;
protected $_server;
protected $_db;
protected $_resultado;
protected $_total;
protected $_pos;
function setServer($server)
{
$this->_server = $server;
}
function setUser($user)
{
$this->_user = $user;
}
function setPass($pass)
{
$this->_pass=$pass;
}
abstract function connect($db);
abstract function execute($consulta);
}
class sql extends database
{
private static $_instancia;
private $_server = 'localhost';
/* Si es privado, no se usa nunca */
private function __construct(){}
public static function getInstance()
{
if (!isset(self::$_instancia)) {
$obj = __CLASS__;
self::$_instancia = new $obj;
}
return self::$_instancia;
}
public function connect($db)
{
if (!isset($this->_con)){
$this->_db = $db;
$this->_con = mysql_connect(
$this->_server,
$this->_user,
$this->_pass) or die(mysql_error()
);
mysql_select_db($db) or die(mysql_error());
}
}
public function execute($sql)
{
$this->_sql = $sql;
$this->_resultado = mysql_query($this->_sql);
}
public function next()
{
$this->_pos++;
}
public function prev()
{
$this->pos--;
}
public function getTotal()
{
if (strtolower($this->_sql[0]) == 's'){
$this->_total = mysql_num_rows($this->_resultado);
}else{
$this->_total = mysql_affected_rows($this->_con);
}
return $this->_total;
}
public function getOne($campo)
{
return mysql_result($this->_resultado,$this->_pos,$campo);
}
public function getMulti() // get into an array
{
return mysql_fetch_array($this->_resultado);
}
public function insert ($my_table, $my_array) { // mysql_insert_array: as opposite of mysql_fetch_array:
$keys = array_keys($my_array);
$values = array_values($my_array);
$sql = 'INSERT INTO ' . $my_table .' VALUES ("' . implode('","', $values) . '")';
echo $sql;
$this->execute ($sql);
}
public function goRow ($fila_num){
return mysql_data_seek ($this->_resultado, $fila_num);
}
public function fetchRow (){ // se trae una fila Y deja los campos en un array
return mysql_fetch_assoc($this->_resultado);
}
private function __clone()
{
throw new Exception('No se permite clonar');
}
}
$my = database::getInstance(); // new dbx; ya no uso NEW porque eso es para crear instancias multiples de un objeto
$my->setUser('user');
$my->setPass('pass');
$res1 =$my->connect('db');
$my->execute("SELECT * FROM `es_contenido` WHERE 1");
echo "Total registros: ".$my->getTotal()."<br/>";
?>
gracias desde ya!!!!!!!