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

llamar al metodo sin pasar por constructor

Estas en el tema de llamar al metodo sin pasar por constructor en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos mren tengo una dudota: ¿Como llamar al metodo de una clase sin pasar por su constructor? Esque tengo una clase pero dentro de ...
  #1 (permalink)  
Antiguo 05/01/2012, 12:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Exclamación llamar al metodo sin pasar por constructor

Hola amigos mren tengo una dudota:

¿Como llamar al metodo de una clase sin pasar por su constructor?

Esque tengo una clase pero dentro de ella tiene su contrcutor

class miClase{
public function __construct($valores){
......
}
public obtenDatos(){
....
}
}

Pero dentro de esta clase tengo un metodo llamado obtenDatos que necesito para realizar un proceso, es posible imbocar la clase y pasar directamente al metodo sin pasar por el constrcutor ?

$valDato = new miClase();
$valDato->obtenDatos(); ????

que hago para saltarme al metodo directamente....

Gracias por la ayuda
  #2 (permalink)  
Antiguo 05/01/2012, 12:06
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: llamar al metodo sin pasar por constructor

$valDato::obtenDatos();

y que obtendato sea static, preferentemente
  #3 (permalink)  
Antiguo 05/01/2012, 12:13
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Exclamación Respuesta: llamar al metodo sin pasar por constructor

Cita:
Iniciado por Patriarka Ver Mensaje
$valDato::obtenDatos();

y que obtendato sea static, preferentemente
Hola gracias por la respuesta!!

Oye mira lo puse como me dijiste con los :: pero me aparece error de sintaxis en el compilador..

Al correrlo asi me pone:

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in line..

jajaja esta rato el error...

Otra dudda porque de preferencia static ???

Gracias!!
  #4 (permalink)  
Antiguo 05/01/2012, 12:19
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: llamar al metodo sin pasar por constructor

perdon es asi:

miClase::obtenDatos();

los dos puntos se hicieron para llamar metodos estaticos, pero es opcional
  #5 (permalink)  
Antiguo 05/01/2012, 12:48
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Exclamación Respuesta: llamar al metodo sin pasar por constructor

Cita:
Iniciado por Patriarka Ver Mensaje
perdon es asi:

miClase::obtenDatos();

los dos puntos se hicieron para llamar metodos estaticos, pero es opcional
Hola, ya se quitó ese error, pero me aparece:

Missing argument 1 for calculaDieta::__construct(), called in line ....

Por lo visto esta entrando al constructor y pide el valor de el.. mi duda es esta bien como lo estoy poniendo:

Código PHP:
$valDato = new miClase();
miClase::obtenDatos(); 
$valDato->obtenDatos(); 
??? o como
  #6 (permalink)  
Antiguo 05/01/2012, 13:14
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: llamar al metodo sin pasar por constructor

//$valDato = new miClase();
miClase::obtenDatos();
//$valDato->obtenDatos();
  #7 (permalink)  
Antiguo 05/01/2012, 14:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: llamar al metodo sin pasar por constructor

El parámetro static aunque es opcional debe de ser requerido esto es porque en versiones futuras de PHP al llamar a un método de forma estatica, sin este ser estatico va a producir un FATAL_ERROR, así que es recomendable desde ahora usar static cuando el método es estatico:

Código PHP:
Ver original
  1. class Matematicas
  2. {
  3.        public static function suma($val1, $val2)
  4.        {
  5.              return $val1 + $val2;
  6.        }
  7. }

Lo usas así:
Código PHP:
Ver original
  1. $suma = Matematicas::suma(1, 2);

Ten en cuenta que si dentro de Matematicas::suma() usas $this, el compilador te generará un fatal_error ya que es necesario entonces usarlo mediante la instancia que creaste (usando el operador new).

Saludos.
  #8 (permalink)  
Antiguo 05/01/2012, 15:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Exclamación Respuesta: llamar al metodo sin pasar por constructor

Cita:
Iniciado por GatorV Ver Mensaje
El parámetro static aunque es opcional debe de ser requerido esto es porque en versiones futuras de PHP al llamar a un método de forma estatica, sin este ser estatico va a producir un FATAL_ERROR, así que es recomendable desde ahora usar static cuando el método es estatico:

Código PHP:
Ver original
  1. class Matematicas
  2. {
  3.        public static function suma($val1, $val2)
  4.        {
  5.              return $val1 + $val2;
  6.        }
  7. }

Lo usas así:
Código PHP:
Ver original
  1. $suma = Matematicas::suma(1, 2);

Ten en cuenta que si dentro de Matematicas::suma() usas $this, el compilador te generará un fatal_error ya que es necesario entonces usarlo mediante la instancia que creaste (usando el operador new).

Saludos.
Perfecto mcuhas gracias por la explicación ya lo hice pero ahora me sal esto:

Fatal error: Using $this when not in object context in line...

Yo tengo esto asi como me mencionó Patriarka al igual que tú:
[PHP]
$valDato = miClase::obtenDatos();
$valDato->cont = "p110";
PHP]

Esto debido a que en mi metodo tengo esto: $this->cont
Así como lo ejemplifique arriba ($valDato->cont = "p110";) deberia de asignarle ese valor no ??

Código PHP:
<?php  function __construct($value,$id,$valor,$cont,$total){ 
     
    
$valoresBD $this->porcionesTablaAlimentosBD() 
    
$this->nombre $valoresBD["NOMBRE"]; 
  
      
    } 
      
    function 
obtenDatos(){ 
    include(
$_SERVER['DOCUMENT_ROOT']."/conexion.php");     
    
$obtenValoresAlimentos "SELECT NOMBRE FROM grupos WHERE ID = {$this->cont}"
    
$querymysql_query($obtenValoresAlimentos,$conexion) or die (mysql_error()); 
    
mysql_close($conexion); 
    return @
mysql_fetch_array($query); 
    } 
?> 
}
GRACIAS!!
  #9 (permalink)  
Antiguo 05/01/2012, 15:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: llamar al metodo sin pasar por constructor

El erro ya te expliqué la causa, es porque estas accesando a un método de forma estatíca, y estas usando $this dentro del método, eso no es posible hacerlo, para que $this exista tienes que crear una instancia de tu clase usando el operador new.

Saludos.
  #10 (permalink)  
Antiguo 05/01/2012, 16:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Exclamación Respuesta: llamar al metodo sin pasar por constructor

Cita:
Iniciado por GatorV Ver Mensaje
El erro ya te expliqué la causa, es porque estas accesando a un método de forma estatíca, y estas usando $this dentro del método, eso no es posible hacerlo, para que $this exista tienes que crear una instancia de tu clase usando el operador new.

Saludos.
Hay alguna forma de accesar a un metodo sin pasar por el constructor imbocando la clase con new y usar el $this ?
  #11 (permalink)  
Antiguo 05/01/2012, 16:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: llamar al metodo sin pasar por constructor

No, el constructor por algo esta ahí y es para construir la clase, no se puede "brincar" ni mucho menos.
  #12 (permalink)  
Antiguo 05/01/2012, 16:52
 
Fecha de Ingreso: septiembre-2010
Mensajes: 350
Antigüedad: 13 años, 6 meses
Puntos: 9
Exclamación Respuesta: llamar al metodo sin pasar por constructor

Cita:
Iniciado por GatorV Ver Mensaje
No, el constructor por algo esta ahí y es para construir la clase, no se puede "brincar" ni mucho menos.
Gracias!! GatorV ya me funcionó lo que hice entonces fue como me mencinaste convertir mi metodo en static e hice esto:
(quite el $this->cont que estaba directo en el metodo y lo asigne con una variable en el metodo)
Código PHP:
<?php  function __construct($value,$id,$valor,$cont,$total){  
      
    
$valoresBD $this->obtenDatos('p100')  
    
$this->nombre $valoresBD["NOMBRE"];  
   
       
    }  
       
    static function 
obtenDatos($valor){  
    include(
$_SERVER['DOCUMENT_ROOT']."/conexion.php");      
    
$obtenValoresAlimentos "SELECT NOMBRE FROM grupos WHERE ID = $valor";  
    
$querymysql_query($obtenValoresAlimentos,$conexion) or die (mysql_error());  
    
mysql_close($conexion);  
    return @
mysql_fetch_array($query);  
    } 
?>
y la mando a llamar:

Código PHP:
$valDatomiClase::obtenDatos('p101');
echo 
$valDato["NOMBRE"]; 

Etiquetas: constructor, metodo
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 03:57.