Ver Mensaje Individual
  #15 (permalink)  
Antiguo 08/01/2009, 09:25
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Exclamación Fatal error: Access level to sql::$_server must be protected (as in class database)

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 ? 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!!!!!!!
__________________
Salu2!