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

[SOLUCIONADO] $this en resources

Estas en el tema de $this en resources en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Antes de nada muchas gracias a todos por leerme. Tengo un problema que me tiene algo inquieto, sea este ejemplo de sobrecarga usando _call en ...
  #1 (permalink)  
Antiguo 11/03/2013, 12:20
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
$this en resources

Antes de nada muchas gracias a todos por leerme.

Tengo un problema que me tiene algo inquieto, sea este ejemplo de sobrecarga usando _call en php.

Código PHP:
Ver original
  1. <?php
  2. class cochecito{
  3. private $marca ;
  4. private $color ;
  5. private $pais ;
  6. private $potencia;
  7. private $vmax;
  8. private $precio;
  9.  
  10. function __call($method, $arguments) {
  11. $prefix = strtolower(substr($method, 0, 3));
  12. $property = strtolower(substr($method, 3));
  13. if (empty($prefix) || empty($property)) {
  14. return;
  15. }
  16. if ($prefix == "get" && isset($this->$property)) {
  17. return $this->$property;//$property es un resource, no puedo en este tipo de datos poner Sthis->nombre porque lo que quiero es que eexpanda lo escrito en $property
  18. }
  19. if ($prefix == "set") {
  20. $this->$property = $arguments[0];
  21. }
  22. }//fin del método
  23.  
  24.  
  25.  } //fi
n de la clase.
Código PHP:
Ver original
  1. <?php
  2. require_once('onewhocalls.php');
  3. ?>
  4. <html>
  5. <head>
  6. <title>probandometodomagicocall</title>
  7. </head>
  8. <body>
  9. <?php
  10. $one=new cochecito();
  11. $one->setmarca("Ferrari");
  12. $one->setcolor("rojo");
  13. $one->setprecio("160000");
  14. echo "la marca del coche es:"."    ".$one->getmarca()."<br>";
  15. echo "el color del coche es:"."     ".$one->getcolor()."<br>";
  16. echo "el precio del capricho es:"."    ".$one->getprecio()."<br>";
  17. ?>
  18. </body>
  19. </html>
  20. ?>

Funciona perfectamente pero me iniquieta que llamemos a $property como $this->$property.

mis pensamientos son estos:

1) al no estar declarado este atributo en la clase sino en un método, no se puede usar $this->
2)en caso de poder usarse sería $this->property y no $this->$property.

3) intuyo que , al ser un RESOURCE, es decir, que el valor sale de realizar una operación, no estamos ante un atributo sino ante un método, y por tanto nos referimos a el como $this->nombre del método, que en este caso es $property, pero claro, en este caso, si fuera cierto lo que digo, ¿por qué a veces nos referimos a él por $this->$property y a veces por $property? ¿cómo funcionan los booleanos isset y empty en el interior de las clases? en el manual explica que se introducen variables mixtas ....

Si alguien puediera arrojarme algo de luz lo agradecería, no sé por qué me ha dado por fijarme en ese detalle pero....lo he hecho.

GRACIAS
  #2 (permalink)  
Antiguo 11/03/2013, 12:50
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: $this en resources

porque no usas?
__set y __get
http://www.php.net/manual/en/languag...verloading.php
un saludo
__________________
>> abimaelmartell.com
  #3 (permalink)  
Antiguo 11/03/2013, 13:17
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: $this en resources

bueno, por varias razones

1) porque con _get y _set ya lo sé hacer

2) porque quiero usar _call para practicar, algo que nunca había hecho.

3) porque quiero saber la explicación, por curiosidad y para aprender y, mirando para otro lado no gano nada mientras que pensando gano experiencia y conociemientos.
  #4 (permalink)  
Antiguo 11/03/2013, 14:07
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: $this en resources

Entonces no entiendo tu duda, si $property es una variable que es lo que quieres que se expanda como propiedad de la clase, por eso debes de usar $this->$property, ya que lo haces de forma dinámica.
  #5 (permalink)  
Antiguo 11/03/2013, 14:58
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: $this en resources

$this->$property = $arguments[0];
arguments es un arreglo? esta linea esta mal

si nos dices que errores te salen te podríamos ayudar mejor ;)
__________________
>> abimaelmartell.com
  #6 (permalink)  
Antiguo 12/03/2013, 05:45
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: $this en resources

no, no me sale ningún error, el programita funciona, lo que no sé es por qué hay que usar $this->$property con la $puesta
  #7 (permalink)  
Antiguo 12/03/2013, 07:31
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 6 meses
Puntos: 80
Respuesta: $this en resources

Entiendes lo que hace el código,
Tu cuando llamas a
Código PHP:
Ver original
  1. $one->setmarca("Ferrari");
En realidad en tu clase no existe dicho método, entonces cae en la función _call
Código PHP:
Ver original
  1. $prefix = strtolower(substr($method, 0, 3)); // Aqui sacas si quieres hacer get o set
  2. $property = strtolower(substr($method, 3)); // y aqui la propiedad que quieres
$prefix = set y $property = marca
Es decir en este caso quieres hacer set sobre el atributo marca.

al hacer $this->$property lo que haces en realidad $this->marca pues es el valor de $property.
Si haces $this->property en realidad no setearas marca si no el atributo property que no existe en tu clase.


SALUDOS
Es lo que te comento GatorV mas arriba.
__________________
"La imaginación es más importante que el conocimiento. El conocimiento es limitado, mientras que la imaginación no" -- A.Einstein
objetivophp.com,twitter.com/objetivophp
  #8 (permalink)  
Antiguo 12/03/2013, 08:53
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: $this en resources

ah!!ok
ahora lo entiendo.

Gracias

Etiquetas: php, resources
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 10:42.