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

Insertar un objeto dentro de otro y acceder a las propiedades

Estas en el tema de Insertar un objeto dentro de otro y acceder a las propiedades en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola buenas!! Estoy intentando acceder a las propiedades de un objeto a través de otro. Me explico, estoy haciendo una clase para la validación de ...
  #1 (permalink)  
Antiguo 01/07/2010, 05:34
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Insertar un objeto dentro de otro y acceder a las propiedades

Hola buenas!!

Estoy intentando acceder a las propiedades de un objeto a través de otro.

Me explico, estoy haciendo una clase para la validación de formularios y quiero hacer lo siguiente.


Código PHP:
$form = new form();

$Nombre = new field();


class 
field() {

funcion validacampo()

}

class 
form() {

public function 
asignfield(field $field) {
array_push($fields$field);
}

public function 
validate() {
  foreach(
$fields as $field) {
 
$field->validate();
}

}


y lo que quiero es que la clase form reciba por ejemplo 3 campos y acceda al método validacampo a través de un bucleDespués los errores que devuelva la clase field se los asignará form y los mostrará juntos.

$form->validate(); 
Muchas gracias!!
  #2 (permalink)  
Antiguo 01/07/2010, 07:41
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

Tu puedes instanciar dentro de una clase.
Código PHP:
Ver original
  1. <?php
  2. class foo{
  3.     public function bar($baz){
  4.         return $baz;
  5.     }
  6. }
  7. class candy{
  8.     public function twix(){
  9.         $objFoo = new foo;
  10.         return $objFoo->bar('snickers');
  11.     }
  12. }
  13. $obj = new candy;
  14. echo $obj->twix();
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 01/07/2010, 07:51
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

Hola buenas,

Muchas gracias por tu respuesta!!

Pero... y si quiero crear los objetos aparte de la clase?

Es decir yo quiero crear los objetos field aparte y luego pasárselos a form.

como lo puedo hacer?


Muchas gracias y un saludo!
  #4 (permalink)  
Antiguo 01/07/2010, 08:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

A ver si entendí ¿algo así?
Código PHP:
Ver original
  1. <?php
  2. class foo{
  3.     public function bar(candy $baz){
  4.         return $baz->twix();
  5.     }
  6. }
  7. class candy{
  8.     public function twix(){
  9.         return array('foo','bar','baz','candy');
  10.     }
  11. }
  12. $objFoo = new foo;
  13. var_dump($objFoo->bar(new candy));

¿O esto?
Código PHP:
Ver original
  1. <?php
  2. class foo{
  3.     public function bar(array $baz){
  4.         return $baz;
  5.     }
  6. }
  7. class candy{
  8.     public function twix(){
  9.         return array('foo','bar','baz','candy');
  10.     }
  11. }
  12. $objCandy = new candy;
  13. $candy = $objCandy->twix();
  14.  
  15. $objFoo = new foo;
  16. var_dump($objFoo->bar($candy));
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 01/07/2010, 08:24
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

Hola.. no se si es exactamente eso..

Yo quiero poder hacer algo así:

$a new hotel.
$a->ciudad = barcelona.

$b new habitacion
$b->sayCiudad y esto que devuelva barcelona

Y así para todas las habitaciones, me gustaría saber como crear la función dentro de hotel para pasarle todas las habitaciones con algo como addHabitacion( objeto a) y luego lo mismo con objeto b y así para todos, al pasarle los objetos le añadiría la propiedad ciudad barcelona.

muchas gracias por tu tiempo!
  #6 (permalink)  
Antiguo 01/07/2010, 08:48
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: Insertar un objeto dentro de otro y acceder a las propiedades

Pues usa tu ejemplo que tienes inicialmente, solo ajustalo para que lea las propiedades de la clase:
Código PHP:
Ver original
  1. class Field
  2. {
  3.          public function validate()
  4.          {
  5.                  echo "I'm validating!";
  6.          }
  7. }
  8. class Form
  9. {
  10.         private $_fields = array();
  11.  
  12.         public function addField(Field $field)
  13.         {
  14.                 $this->_fields[] = $field;
  15.         }
  16.  
  17.         public function validate()
  18.         {
  19.                 foreach ($this->_fields as $field) {
  20.                          $field->validate();
  21.                 }
  22.         }
  23. }
  24.  
  25. $field = new Field();
  26. $form = new Form();
  27. $form->addField($field);
  28. $form->validate();

Saludos.
  #7 (permalink)  
Antiguo 01/07/2010, 08:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

Lo que estás pidiendo no es recomendable porque rompes con lo el concepto de encapsulamiento. Te recomiendo que sigas leyendo algún manual para que aprendas a desenvolverte bien en OOP. Ya por lo menos tienes una idea de lo que se puede hacer y como asignar un valor dentro de la clase y como llamarla en diferentes formas en otra clase. Trata los ejemplos a ver si cumplen con lo que quieres.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 01/07/2010, 10:20
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

Muchas gracias por vuestras respuestas!!

GaitorV creo que eso es exactamente lo que buscaba.

Te puedo preguntar porque usas "_" delante de field??

Muchas gracias de nuevo!!

Un saludo!!
  #9 (permalink)  
Antiguo 01/07/2010, 10:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

Es más bien una recomendación para estandarizar el código. En ese caso es para distinguir una propiedad que es privada.

Edito:
Aquí tienes donde se sugiere ese tipo de "standard" http://framework.zend.com/manual/en/...nventions.html
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 01/07/2010 a las 10:33
  #10 (permalink)  
Antiguo 01/07/2010, 10:48
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 8 meses
Puntos: 165
Respuesta: Insertar un objeto dentro de otro y acceder a las propiedades

A vale!!

Muchas gracias por la info!!

Un saludo!

Etiquetas: acceder, objeto, propiedades
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 21:20.