Yes.... but not :-).

With you use these magic functions, when you write $o->a = 'foo', you create a property in the object. Not ? Even if it is stored in an array member, __set() create a property and __get() retrieve its value.

Doc says :

>The $name parameter used is the name of the variable that should
> be set or retrieved.
>The __set() method's $value parameter specifies the value that
> the object should set set the $name.

Conclusion :

class OO
{
   private $elem = array();
   public function __get ($prop)
   {
      if (isset($this->elem[$prop])) {
         return $this->elem[$prop];
   }
   else
   {
      return NULL;
   }

   public function __set ($prop, $val)
   {
      $this->elem[$prop] = $val;
   }
}

$o = new OO();
echo isset($o->a) ? "yes\n" : "no\n"; # Must return false and return false effectively, cool
$o->a = 'foo';
echo isset($o->a) ? "yes\n" : "no\n"; # Must return false and return false effectively, NOT COOL


Fred.


Catalin Trifu wrote:

        Hi,

    Is this really a bug. I think not.
    There is no variable $o->a or $a->b in the class OO
there is only the variable $elem and $a and $b is a member
of that array
    So ...
    The fact that PHP5 provides __set and __get magic
functions does not mean that the actual variables exist with
that particular name in the class ?
    Perhaps it would be nice to have a __isset magic function ?

Cheers
Catalin



<?php

class OO
{
private $elem = array("a" => 1);

public function __get ($prop)
{
if (isset($this->elem[$prop])) {
return $this->elem[$prop];
} else {
return NULL;
}
}

public function __set ($prop, $val)
{
$this->elem[$prop] = $val;
}
}

$o = new OO();

echo isset($o->a) ? "yes\n" : "no\n";
echo isset($o->b) ? "yes\n" : "no\n";

echo is_null($o->a) ? "yes\n" : "no\n";
echo is_null($o->b) ? "yes\n" : "no\n";

?>

I expected something like this:

yes
no
no
yes

But got this:

no
no
no
yes

It looks like isset() can't handle object properties correctly. I'll post the bug on php.net.

--
Daniel Schierbeck



-- =================================================================== Frederic HARDY Email: [EMAIL PROTECTED] HEXANET SARL URL: http://www.hexanet.fr/ ZAC Les Charmilles Tel: +33 (0)3 26 79 30 05 3, allée Thierry Sabine Direct: +33 (0)3 26 61 77 84 BP 202 - 51686 REIMS CEDEX 2 FRANCE ===================================================================

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Reply via email to