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

tengo una duda sobre este codigo

Estas en el tema de tengo una duda sobre este codigo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. no entiendo esta linea public function addContacto(Contacto $contacto) QUE ES Contacto---ES UNA VARIABLE O NOMBRE O CLASE O QUE ES y como se usa Y ...
  #1 (permalink)  
Antiguo 20/03/2014, 04:41
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
tengo una duda sobre este codigo

no entiendo esta linea
public function addContacto(Contacto $contacto)
QUE ES Contacto---ES UNA VARIABLE O NOMBRE O CLASE O QUE ES y como se usa
Y QUE ES $contacto--- esto es una variable

Contacto.php
Código PHP:
Ver original
  1. <?php
  2. /* Clase Contacto */
  3. Class Contacto
  4. {
  5.     private $_nombre;
  6.     private $_telefono;
  7.      public function __construct($nombre, $telefono) {
  8.         $this->_nombre = $nombre;
  9.         $this->_telefono = $telefono;
  10.     }
  11. }
  12. ?>
Agenta.php
Código PHP:
Ver original
  1. <?php
  2. /* Incluimos la clase Contacto */
  3. require_once 'Contacto.php';
  4.  /* Clase Agenda */
  5. class Agenda
  6. {
  7.    private $_contactos = array();
  8.     public function __construct() {
  9.     }
  10.  
  11.    public function addContacto(Contacto $contacto)
  12.    {
  13.       $this->_contactos[] = $contacto;
  14.    }
  15. }
  16. ?>
en platica
Código PHP:
Ver original
  1. <?php
  2. /* Creamos una instancia de Agenda */
  3. $miAgenda = new Agenda();
  4.  /* Agregamos algunos Contactos*/
  5. $miAgenda->addContacto(new Contacto("Pepe", "3-21-54-87"));
  6. $miAgenda->addContacto(new Contacto("Juan", "3-32-65-98"));
  7. $miAgenda->addContacto(new Contacto("Luis", "3-78-13-46"));
  8. ?>

gracias por ayudarme
  #2 (permalink)  
Antiguo 20/03/2014, 06:08
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: tengo una duda sobre este codigo

"Contacto $contacto" significa que el método espera que le pases un objeto de clase "Contacto", e internamente lo llamará $contacto ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #3 (permalink)  
Antiguo 16/04/2014, 02:56
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: tengo una duda sobre este codigo

Cita:
Iniciado por Eleazan Ver Mensaje
"Contacto $contacto" significa que el método espera que le pases un objeto de clase "Contacto", e internamente lo llamará $contacto ;)
una pregunta mas es como si tubiéramos adentro la otra clase por asi decir la otra clase, ya que se me hace muy raro que en un método este
una clase adentro

Código PHP:
Ver original
  1. <?php
  2. class Agenda{
  3.     private $_contactos = array();
  4.     public function __construct() {}
  5.     public function addContacto(Contacto $contacto)
  6.    {
  7.      Class Contacto{
  8.     private $_nombre;
  9.     private $_telefono;
  10.     public function __construct($nombre, $telefono) {
  11.         $this->_nombre = $nombre;
  12.         $this->_telefono = $telefono;
  13.                             }
  14. }
  15.       $this->_contactos[] = $contacto;
  16.    }
  17.  
  18. ?>
  #4 (permalink)  
Antiguo 16/04/2014, 03:05
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
se puede tener adentro del método una clase en php

se puede tener adentro del método una clase en php
por ejemplo
public function avisar(Contacto $c);
y como usar, es decir si se puede esto puede romper el encapsulamiento pregunto, ya que en java lo usan pero en php no lo he visto

Contacto es una clase
$c es una variable
  #5 (permalink)  
Antiguo 16/04/2014, 06:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: se puede tener adentro del método una clase en php

Código PHP:
Ver original
  1. public function avisar($c){
  2.  
  3. echo $c->tostring();
  4.  
  5. }

Te refieres a poder hacer esto?

php no es tipado, es decir no debes declarar el tipo de los parametros de un metodo o función....

Si puedes hacerlo.

Cita:
esto puede romper el encapsulamiento
No lo que hace es un encapsulamiento mas sofisticado por decirlo de alguna manera.... una capsula usa otra capsula......
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 16/04/2014, 08:29
Avatar de bng5  
Fecha de Ingreso: junio-2009
Ubicación: 127.0.0.1
Mensajes: 269
Antigüedad: 14 años, 10 meses
Puntos: 24
Respuesta: se puede tener adentro del método una clase en php

Cita:
Iniciado por quimfv Ver Mensaje
php no es tipado, es decir no debes declarar el tipo de los parametros de un metodo o función....
PHP es un lenguaje débilmente tipado y desde la versión 5 permite indicar el tipo de objeto que debe recibir el método.

Por lo que el siguiente código sería perfectamente válido:

Código PHP:
Ver original
  1. public function avisar(Contacto $c) {
  2.     echo $c->tostring();
  3. }

El parámetro $c puede ser tanto del tipo Contacto, extender de la clase Contacto o implementar la interface Contacto.

Más info: http://www.php.net/manual/es/languag...ypehinting.php
  #7 (permalink)  
Antiguo 16/04/2014, 08:58
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: tengo una duda sobre este codigo

Cita:
Iniciado por jor_0203 Ver Mensaje
una pregunta mas es como si tubiéramos adentro la otra clase por asi decir la otra clase, ya que se me hace muy raro que en un método este
una clase adentro
Simplemente esta indicándole el tipo de dato, el parámetro $contacto es un objeto que pertenece a la clase Contacto, en vez de pasar un numero, o una cadena, estas pasando un objeto como parámetro.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #8 (permalink)  
Antiguo 16/04/2014, 16:36
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: tengo una duda sobre este codigo

Cita:
Iniciado por h2swider Ver Mensaje
Simplemente esta indicándole el tipo de dato, el parámetro $contacto es un objeto que pertenece a la clase Contacto, en vez de pasar un numero, o una cadena, estas pasando un objeto como parámetro.
donde puedo buscar este tipo de ejemplos ya que casi no encuentro gracias
  #9 (permalink)  
Antiguo 16/04/2014, 16:54
Avatar de jor_0203  
Fecha de Ingreso: octubre-2011
Ubicación: mexico
Mensajes: 760
Antigüedad: 12 años, 6 meses
Puntos: 8
Respuesta: se puede tener adentro del método una clase en php

Cita:
Iniciado por bng5 Ver Mensaje
PHP es un lenguaje débilmente tipado y desde la versión 5 permite indicar el tipo de objeto que debe recibir el método.

Por lo que el siguiente código sería perfectamente válido:

Código PHP:
Ver original
  1. public function avisar(Contacto $c) {
  2.     echo $c->tostring();
  3. }

El parámetro $c puede ser tanto del tipo Contacto, extender de la clase Contacto o implementar la interface Contacto.

Más info: http://www.php.net/manual/es/languag...ypehinting.php
mil gracias

entonces es correcto esto
por lo que entiendo, pero esto no rompe con el encapsulamiento
  #10 (permalink)  
Antiguo 16/04/2014, 17:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: tengo una duda sobre este codigo

Se conoce como Typehint, en el manual tienes toda la información:

http://www.php.net/manual/en/languag...ypehinting.php

Etiquetas: clase, php, tener, variable
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 02:24.