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

Llamar métodos

Estas en el tema de Llamar métodos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. ¿Puedo llamar métodos de una clase en esta misma? Ejemplo: Código PHP: class  prueba { private  $num1 ; private  $num2 ; public  __function (){ $num1  ...
  #1 (permalink)  
Antiguo 05/06/2009, 23:15
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Llamar métodos

¿Puedo llamar métodos de una clase en esta misma?

Ejemplo:

Código PHP:

class prueba{

private 
$num1;
private 
$num2;

public 
__function(){

$num1 "";
$num2 "";
}

public function 
asignarSuma($num1$num2){

$this->num1 num1;
$this->num2 num2;
}

public function 
suma(){

return (
$this->num1+$this->num2);
}

// La suma dividirla en 5, como ejemplo.

public function division(){

return ((
$this->suma())/5);

}


La linea de contenido $this->suma() indica que es lo primero que imaginé para acceder al mismo método de clase y procesarlo.

¿Es posible?, siendo posible; ¿qué estructura debo tener en cuenta?.

Pd: agradeceria tambien algun manual referente a este tema, he encontrado muy pocos...
  #2 (permalink)  
Antiguo 06/06/2009, 08:49
Avatar de bacdavi  
Fecha de Ingreso: junio-2006
Ubicación: http://localhost/
Mensajes: 351
Antigüedad: 17 años, 11 meses
Puntos: 7
Respuesta: Llamar métodos

Código PHP:
<?
prueba
::suma();
?>
proba si te funciona!
  #3 (permalink)  
Antiguo 06/06/2009, 10:11
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: Llamar métodos

jeje.... y el manual de PHP ¿no sirve??

http://php.net/oop

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 06/06/2009, 10:18
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Respuesta: Llamar métodos

Cita:
Iniciado por pateketrueke Ver Mensaje
jeje.... y el manual de PHP ¿no sirve??

http://php.net/oop

¿Qué tema es en especial?, igual sólo habia pensado declarar el método como de clase, y utilizarlo de la forma: self::método...
  #5 (permalink)  
Antiguo 06/06/2009, 11:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Llamar métodos

Claro que es posible, y lo haces igual como lo indicas, usando $this->metodo().

Saludos.
  #6 (permalink)  
Antiguo 06/06/2009, 11:54
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Cita:
Iniciado por GatorV Ver Mensaje
Claro que es posible, y lo haces igual como lo indicas, usando $this->metodo().

Saludos.
Código PHP:
...

public function 
obtenerConexion(){

return (
mysql_connect($this->servidor$this->usuario$this->contrasenia)or die(mysql_error()));
}

public function 
asignarBaseDatos($arg){

$this->baseDatos $arg;
}

public function 
obtenerBaseDatos(){

return (
mysql_select_db($this->baseDatos$this->obtenerConexion())or die(mysql_error()));
}

... 
Ello me indica la siguiente excepción:

Código:
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in D:\xampp\htdocs\Clases\MySql.php on line 43
Si el método es static, consecuentemente es satisfactorio, pero me ha quedado la duda del ¿por qué no?...

Vamos, he eliminado la función or die, y la excepción se ha suprimido...

¿Es asi de simple?...disculpas, si era ese el motivo.

Última edición por GatorV; 06/06/2009 a las 13:54
  #7 (permalink)  
Antiguo 06/06/2009, 13:58
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Llamar métodos

A la hora de usar el or die() en el return context es incorrecto, lo mejor es que compruebes antes de regresar el recurso (en dado caso):
Código php:
Ver original
  1. public function obtenerConexion(){
  2.        $this->conexion = mysql_connect($this->servidor, $this->usuario, $this->contrasenia);
  3.        if (!$this->conexion) {
  4.               throw new Exception("Error al conectar: " . mysql_error());
  5.        }
  6.  
  7.        return $this->conexion;
  8. }

Saludos.
  #8 (permalink)  
Antiguo 06/06/2009, 17:07
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Respuesta: Llamar métodos

Si lo entiendo, pero dado que no es correcto imprimir dentro de un método que obtiene un dato, he decidido hacer un método para la impresión de excepciones.
  #9 (permalink)  
Antiguo 06/06/2009, 19:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Llamar métodos

Por eso la importancia de las excepciones al usarlas dentro del control de flujo.

Saludos.
  #10 (permalink)  
Antiguo 06/06/2009, 23:41
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Respuesta: Llamar métodos

Cita:
Iniciado por GatorV Ver Mensaje
Por eso la importancia de las excepciones al usarlas dentro del control de flujo.

Saludos.
Una ultima duda, trabajo al método obtenerConexión() como método adicional, es decir; como acumulador, aún asi intento generar la excepción para controlar el return y me complique, no sé si me hice entender.
  #11 (permalink)  
Antiguo 07/06/2009, 09:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Llamar métodos

No entiendo realmente tu duda, al tu generar la excepción puedes tener un mejor control de flujo:
Código php:
Ver original
  1. try {
  2.        $conn = $db->obtenerConexion();
  3. } catch (Exception $e) {
  4.        echo "hubo un error: " . $e->getMessage();
  5. }

Saludos.
  #12 (permalink)  
Antiguo 07/06/2009, 09:58
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Respuesta: Llamar métodos

Me he equivocado y confundido al implementar las excepciones en la clase de datos, el control de flujo radica es en la interfaz o bien de una clase que extiende, de esto ultimo no estoy muy seguro, he leido demasiados conceptos y este fue el que más lógica aplico, desde mi punto de vista.

Es decir; hacer el control una vez creada la instancia de la clase que contiene obtenerConexion(); que fue lo ultimo que me diste a entender.
  #13 (permalink)  
Antiguo 07/06/2009, 10:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Llamar métodos

Por eso la importancia de las excepciones, tu puedes lanzar una excepción desde cualquier clase, y "cacharla" en una clase más grande y en base a eso realizar una u otra acción.

El muestreo de errores si tiene que ser en la clase que maneje lo grafico, y ahi presentar el error.

Saludos.
  #14 (permalink)  
Antiguo 08/06/2009, 12:25
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Exclamación Respuesta: Llamar métodos

No quize iniciar otro tema, ya que el ultimo mensaje igual es de mi parte...

Código PHP:

...

public function 
asignarConsulta($arg){

$this->consulta $arg;
}

public function 
obtenerConsulta(){

return (
mysql_query($this->consulta$this->obtenerConexion()));
}

public function 
capturarResultadoMixto(){

return (
mysql_fetch_array($this->obtenerConsulta()));
}

... 
Di con un pequeño problema al intentar ejecutar el sistema:

Código PHP:
...

$localhost = new MySQL();
$localhost->asignarConexion("127.0.0.1""root""prueba");
$localhost->obtenerConexion();
$localhost->asignarBaseDatos("servidor");
$localhost->obtenerBaseDatos();
$localhost->asignarConsulta("SELECT Nombre from Usuarios");
$localhost->obtenerConsulta();

while(
$matriz $instancia->capturarResultadoMixto()){


echo 
'Resultado'.$matriz["Nombre"];
}

... 

El resultado de ello, es un error en exceder los 60 segundos por defecto en mi servidor para ejecutar una sentencia...

¿Alguna conclusión?.
  #15 (permalink)  
Antiguo 08/06/2009, 13:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Llamar métodos

Sencillo, estas haciendo un loop infinito, ya que no le das "chance" al mysql_fetch_array de guaradar el resultado de la consulta, se ejecuta por cada llamada del while, que te trae un nuevo resultado.

Tienes que guardar tus resultados en una variable y ciclar sobre esa variable.

Saludos.
  #16 (permalink)  
Antiguo 08/06/2009, 14:23
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Respuesta: Llamar métodos

Cita:
Iniciado por GatorV Ver Mensaje
Sencillo, estas haciendo un loop infinito, ya que no le das "chance" al mysql_fetch_array de guaradar el resultado de la consulta, se ejecuta por cada llamada del while, que te trae un nuevo resultado.

Tienes que guardar tus resultados en una variable y ciclar sobre esa variable.

Saludos.
No sé si te referias a lo siguiente:

Código PHP:

$ciclos 
$localhost->capturarResultadoMixto();

while(
$matriz $ciclos){

echo 
$matriz["Nombre"];

Si era ello, sigo con el mismo problema...

Ahora me rio, es como si empezará de nuevo a programar...
  #17 (permalink)  
Antiguo 08/06/2009, 17:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Llamar métodos

No, el problema esta en tu clase, haces returns directos sin guardar el resultado del query, por ejemplo, eso te causa una recursion infinita, porque por cada vuelta del while vuelves a ejecutar el query y vuelves a descargar el resultado.

Saludos.
  #18 (permalink)  
Antiguo 08/06/2009, 18:36
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 11 meses
Puntos: 53
Respuesta: Llamar métodos

Cita:
Iniciado por GatorV Ver Mensaje
No, el problema esta en tu clase, haces returns directos sin guardar el resultado del query, por ejemplo, eso te causa una recursion infinita, porque por cada vuelta del while vuelves a ejecutar el query y vuelves a descargar el resultado.

Saludos.
Gracias hermano, ha sido el mi problema.

Tomaba muy en juego los métodos como acumuladores y hay radicaba mi problema...
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 17:22.