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

PHP OO Funciones dentro de métodos

Estas en el tema de Funciones dentro de métodos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Buenas a todos, Ya se que es mi primer tema y que aún no he ayudado a nadie pero e necesito ayuda bastante urgente. Resulta ...
  #1 (permalink)  
Antiguo 10/07/2012, 08:50
Avatar de vgrdominik  
Fecha de Ingreso: julio-2012
Mensajes: 9
Antigüedad: 11 años, 9 meses
Puntos: 0
Funciones dentro de métodos

Buenas a todos,

Ya se que es mi primer tema y que aún no he ayudado a nadie pero e necesito ayuda bastante urgente.

Resulta que soy bastante nob en esto de los objetos y me he quedado encallado en un tema.
He hecho un método y dentro he creado una función. Hasta aquí bien pero resulta que luego tengo que llamar esta función dos veces y me salta un error de sobrecarga. He pensado que puede ser porqué se declara dos veces la misma función (La que hay dentro del método) al llamarse dos veces el método.

Aquí os dejo la declaración del método.

Código:
private function llenar_tabla($taula_a_gestionar, $campo_id = null, $condicion = null)
    {
    
        function inicializar(&$propiedades_tabla, $tabla)
        {
        }
     }
Y aquí el error.

Fatal error: Cannot redeclare inicializar() (previously declared in C:\Program Files (x86)\EasyPHP-5.3.9\www\proyecto bases de datos\clases.php:217) in C:\Program Files (x86)\EasyPHP-5.3.9\www\proyecto bases de datos\clases.php on line 217

Gracias de antemano,
Valentí
  #2 (permalink)  
Antiguo 10/07/2012, 09:03
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: Funciones dentro de métodos

No se puede hacer eso que intentas hacer, tendrías que en dado caso dejar la función fuera de la clase para evitar el error, o hacerlo un método de la tabla, o usar un Closure (si usas PHP5.3+) pero así como lo tienes no es correcto.

Aparte si estas usando PHPOO pues no debes de usar funciones planas y menos dentro de un método.

Saludos.
  #3 (permalink)  
Antiguo 10/07/2012, 09:36
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Funciones dentro de métodos

Estas seguro GatorV ?, yo creo que PHP permite anidar funciones..., me parece que el problema es que la función inicializar ya existe en el scope global y por el mensaje de error esta definida en:

datos\clases.php on line 217

otro tema es si en el contexto que lo quiere aplicar es correcto, pero PHP lo permite, creo .

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 10/07/2012, 09:36
Avatar de vgrdominik  
Fecha de Ingreso: julio-2012
Mensajes: 9
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Funciones dentro de métodos

Cita:
Iniciado por GatorV Ver Mensaje
No se puede hacer eso que intentas hacer, tendrías que en dado caso dejar la función fuera de la clase para evitar el error, o hacerlo un método de la tabla, o usar un Closure (si usas PHP5.3+) pero así como lo tienes no es correcto.

Aparte si estas usando PHPOO pues no debes de usar funciones planas y menos dentro de un método.

Saludos.
Ok lo entiendo.

Pero entonces si en un método necesitas repetir una misma estructuro o simplemente deseas organizar mejor un código debes hacer otro método en la clase¿? Lo veo un poco sucio...
  #5 (permalink)  
Antiguo 10/07/2012, 09: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: Funciones dentro de métodos

Claro, de que es permitido es permitido, el problema es que al volver a llamar al método se re-define la función y causa error, ejemplo:
Código PHP:
Ver original
  1. function foo() {
  2.       function bar() {
  3.              echo 'bar';
  4.       }
  5.  
  6.       bar();
  7. }
  8.  
  9. foo(); // bien, imprime 'bar'
  10. foo(); // error, bar ya fue definida antes

Para repetir estructuras tienes que usar un while(), no funciones, y sí, lo ideal es que sean métodos de la misma clase.

También puedes usar los nuevos traits para poder "compartir" código que sea re-usable entre diferentes clases pero que no tengan un contexto específico de la clase.

Saludos.
  #6 (permalink)  
Antiguo 10/07/2012, 12:16
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: Funciones dentro de métodos

Claro pero en ese caso se puede utilizar function_exists :P.

PD: traits = Zend 3 XD.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 10/07/2012, 13:03
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: Funciones dentro de métodos

Claro, pero pues no creo que sea correcto, menos por organización
  #8 (permalink)  
Antiguo 11/07/2012, 07:48
Avatar de vgrdominik  
Fecha de Ingreso: julio-2012
Mensajes: 9
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Funciones dentro de métodos

Cita:
Iniciado por GatorV Ver Mensaje
Claro, de que es permitido es permitido, el problema es que al volver a llamar al método se re-define la función y causa error, ejemplo:
Código PHP:
Ver original
  1. function foo() {
  2.       function bar() {
  3.              echo 'bar';
  4.       }
  5.  
  6.       bar();
  7. }
  8.  
  9. foo(); // bien, imprime 'bar'
  10. foo(); // error, bar ya fue definida antes

Para repetir estructuras tienes que usar un while(), no funciones, y sí, lo ideal es que sean métodos de la misma clase.

También puedes usar los nuevos [URL="http://us.php.net/manual/en/language.oop5.traits.php"]traits[/URL] para poder "compartir" código que sea re-usable entre diferentes clases pero que no tengan un contexto específico de la clase.

Saludos.
Gracias no sabía acerca de los traits, les voy a dar una ojeada a ver que tal.

Etiquetas: funciones, php
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 05:08.