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

problema con una funcion dentro de una clase

Estas en el tema de problema con una funcion dentro de una clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Deseo crear una función que me examine los datos de un array, si este cumple las condiciones impuestas que el programa continué, en caso contrario ...
  #1 (permalink)  
Antiguo 09/05/2005, 10:22
 
Fecha de Ingreso: enero-2005
Mensajes: 5
Antigüedad: 19 años, 4 meses
Puntos: 0
problema con una funcion dentro de una clase

Deseo crear una función que me examine los datos de un array, si este cumple las condiciones impuestas que el programa continué, en caso contrario generara una excepción y mostrara por pantalla un mensaje de alerta. Podrían examinar el código y ver donde me estoy equivocando. Gracias.

<?php
class Usuarios
{
private $_usuario = array ('nombre' => null ,'nick' => null);
function __get ($CaracteristicasUsuario)
{
if (!array_key_exists($CaracteristicasUsuario, $this->_usuario))
throw new Exception ('dato incorrecto');
if (method_exists($this, 'get' . $CaracteristicasUsuario))
{
return call_user_func(array($this, 'get' . $CaracteristicasUsuario));
}
else
{
return $this->_usuario[$CaracteristicasUsuario];
}
}
function __set($CaracteristicasUsuario, $value)
{
if (!array_key_exists($CaracteristicasUsuario, $this->_usuario))
throw new Exception ('dato incorrecto');
if (method_exists($this, 'set' . $CaracteristicasUsuario))
{
return call_user_func(array($this, 'set' . $CaracteristicasUsuario),$value);
}
else
{
return $this->_usuario[$CaracteristicasUsuario] = $value;
}
}
///////////////////////////////////////////////////////////////////////
///////////el problema esta aqui///////////////////////////////////
/////////////////////////////////////////////////////////////////////
function setVerificarDatos($a)
{
if(strlen($a) < 2)
{
throw new Exception ("dato incorrecto");
}
$this->_usuarios['nombre'] = $a;
}
function EscribirDatos()
{
print " Mi nombre es $this->nombre. Y mi nick es $this->nick ";
}
}
?>

<?php
require_once('class.Usuario.php');
$obj = new Usuarios ();
$obj->nombre = 'perro';
$obj->nick = 'gato';
$obj->EscribirDatos();

?>
  #2 (permalink)  
Antiguo 10/05/2005, 19:44
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
¿Podrías decir cuál es el error que te sale??
O ¿qué es lo que esperas que haga y qué hace en realidad??
¿En qué parte llamas al método setVerificarDatos()?

Saludos

Última edición por jpinedo; 10/05/2005 a las 20:33
  #3 (permalink)  
Antiguo 11/05/2005, 01:26
 
Fecha de Ingreso: enero-2005
Mensajes: 5
Antigüedad: 19 años, 4 meses
Puntos: 0
Quiero que examine la variable this->usuario[‘nombre’], y si esta tiene más de un número determinado de caracteres que genere una excepción.
El código no genera ningún error simplemente no hace nada
  #4 (permalink)  
Antiguo 11/05/2005, 07:42
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Y repito la pregunta... ¿En qué momento llamas al método setVerificarDatos()?
Lo que yo veo ahí es que al hacer:
$obj->nombre = 'perro';
Se llamará automáticamente a la función __set() con los parámetros:
__set('nombre', 'perro')

Y dentro de esta función se hará la verificación
if (method_exists($this, 'setnombre'))

Como la línea anterior te dará false, pues no existe ningún método llamado setnombre(), entonces pasará directamente a la línea:
return $this->_usuario[$CaracteristicasUsuario] = $value;

Entonces jamás se llamó al método setVerificarDatos();

Saludos
  #5 (permalink)  
Antiguo 11/05/2005, 14:06
 
Fecha de Ingreso: enero-2005
Mensajes: 5
Antigüedad: 19 años, 4 meses
Puntos: 0
Si no me estoy equivocando a la función setVarificarDatos se invoca por medio de __set. Y “perro” se asigna a $_usuario[‘nombre’] por medio también de __set
  #6 (permalink)  
Antiguo 11/05/2005, 14:27
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Pero en el ejemplo que has puesto no se invoca nunca a la función setVerificarDatos().
Arriba he puesto paso a paso lo que hace tu código... ¿Lo has leído?

Saludos
  #7 (permalink)  
Antiguo 12/05/2005, 06:15
 
Fecha de Ingreso: enero-2005
Mensajes: 5
Antigüedad: 19 años, 4 meses
Puntos: 0
Ya he entendido lo queme querías decir. Le he cambiado el nombre a la función ahora se llama setnombre y todo funciona correctamente.

Muchas gracias
  #8 (permalink)  
Antiguo 12/05/2005, 09:37
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
A eso me refería... qué bueno que lo entendiste y lo solucionaste.

saludos
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 08:24.