Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/03/2013, 12:20
jcd
 
Fecha de Ingreso: febrero-2013
Mensajes: 77
Antigüedad: 11 años, 9 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