Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 09-may-2005, 10:22   #1 (permalink)
hormiga12 ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 5
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();

?>
hormiga12 está desconectado   Responder Citando
Antiguo 10-may-2005, 19:44   #2 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.744
¿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-may-2005 a las 20:33.
jpinedo está desconectado   Responder Citando
Antiguo 11-may-2005, 01:26   #3 (permalink)
hormiga12 ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 5
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
hormiga12 está desconectado   Responder Citando
Antiguo 11-may-2005, 07:42   #4 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.744
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
jpinedo está desconectado   Responder Citando
Antiguo 11-may-2005, 14:06   #5 (permalink)
hormiga12 ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 5
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
hormiga12 está desconectado   Responder Citando
Antiguo 11-may-2005, 14:27   #6 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.744
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
jpinedo está desconectado   Responder Citando
Antiguo 12-may-2005, 06:15   #7 (permalink)
hormiga12 ha deshabilitado el karma
 
Fecha de Ingreso: enero-2005
Mensajes: 5
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
hormiga12 está desconectado   Responder Citando
Antiguo 12-may-2005, 09:37   #8 (permalink)
Moderador PHP
jpinedo ha deshabilitado el karma
 
Avatar de jpinedo
 
Fecha de Ingreso: septiembre-2003
Ubicación: Piura
Mensajes: 2.744
A eso me refería... qué bueno que lo entendiste y lo solucionaste.

saludos
jpinedo está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:27.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93