Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/03/2012, 22:22
loogys
 
Fecha de Ingreso: marzo-2012
Mensajes: 9
Antigüedad: 12 años, 1 mes
Puntos: 0
Por que no funciona esta interfaz?

Que tal, espero que alguien me haga el favor de explicarme por que no puedo hacer correr el siguiente script.

Resulta que si funciona tal como lo muestro:

index.php
Código PHP:


<?php


require_once 'conectordb.php';
require_once 
'managerdb.php';

class 
index
{
    public function 
run()
    {
        
$query "INSERT INTO animales (animal,stat) VALUES (3388,4)";
        
        
$conx = new conectordb();
        
$conx->conect();
        
$conx->query($query);
        
$conx->exe();
        
        
$q = new managerdb();
        
$q->testQuery($conx);
        
$conx->close();
        
        

    }
}

$test = new index();
$test->run();
interfacedb.php

Código PHP:
<?php

interface interfacedb
{
    public function 
exe();
    public function 
query($query);
    public function 
conect();
    public function 
close();
}
managerdb.php

Código PHP:
<?php
require_once 'interfacedb.php';

class 
managerdb
{
    public function 
testQuery(interfacedb $manager)
    {
        echo 
$manager->exe();
        
//mysql_query($manager->insert());
    
}
}
conectordb.php
Código PHP:
<?php

require_once 'interfacedb.php';

class 
conectordb implements interfacedb
{
    const 
USUARIO 'root';
    const 
PASS '';
    const 
SERVIDOR 'localhost';
    const 
DB 'dairyevents';
    
    private 
$_conexion;
    private 
$_query;
    
    public function 
conect()
    {
        
$this->_conexion mysql_connect(self::SERVIDOR,self::USUARIO,self::PASS);
        
mysql_select_db(self::DB,$this->_conexion);
    }
    public function 
query($query)
    {
        
$this->_query $query;
        
    }
    public function 
exe()
    {
        return 
$this->_query;
    }
    public function 
close()
    {
        
mysql_close($this->_conexion);
    }
    public function 
__toString()
    {
        return 
$this->query();
    }
}

Como dije, funciona bien pero cuando trato de quitar el metodo exe() para hacer todo desde el metodo query() me arroja el siguiente error:

Código PHP:
WarningMissing argument 1 for conectordb::query(), called in C:xampphtdocsimanagerdb.php on line 8 and defined in C:xampphtdocsiconectordb.php on line 20

Notice
Undefined variablequery in C:xampphtdocsiconectordb.php on line 22 
Esto lo arroja cuando cambio el codigo de la siguiente forma:

index.php
Código PHP:
<?php


require_once 'conectordb.php';
require_once 
'managerdb.php';

class 
index
{
    public function 
run()
    {
        
$query "INSERT INTO animales (animal,stat) VALUES (3388,4)";
        
        
$conx = new conectordb();
        
$conx->conect();
        
$conx->query($query);
        
//$conx->exe();
        
        
$q = new managerdb();
        
$q->testQuery($conx);
        
$conx->close();
        
        

    }
}

$test = new index();
$test->run();
conectordb.php
Código PHP:
<?php

require_once 'interfacedb.php';

class 
conectordb implements interfacedb
{
    const 
USUARIO 'root';
    const 
PASS '';
    const 
SERVIDOR 'localhost';
    const 
DB 'dairyevents';
    
    private 
$_conexion;
    private 
$_query;
    
    public function 
conect()
    {
        
$this->_conexion mysql_connect(self::SERVIDOR,self::USUARIO,self::PASS);
        
mysql_select_db(self::DB,$this->_conexion);
    }
    public function 
query($query)
    {
        
$this->_query $query;
        return 
$this->_query;
        
    }
    public function 
exe()
    {
        return 
$this->_query;
    }
    public function 
close()
    {
        
mysql_close($this->_conexion);
    }
    public function 
__toString()
    {
        return 
$this->query();
    }
}
managerdb.php
Código PHP:
<?php
require_once 'interfacedb.php';

class 
managerdb
{
    public function 
testQuery(interfacedb $manager)
    {
        echo 
$manager->query();
        
//mysql_query($manager->insert());
    
}
}
interfacedb.php
Código PHP:

<?php

interface interfacedb
{
    
//public function exe();
    
public function query($query);
    public function 
conect();
    public function 
close();
}

Solo quiero ahorrarme el metodo exe()... no logré dar con "el por que" solo pude hacer correr el script agregando el metodo exe pero no veo caso tenerlo ya que solo recibe y retorna como se darán cuenta... como se soluciona y lo mas importante... por que ???


Gracias !!