Re: [PHP] Classes, instances and NULL

2004-07-29 Thread Justin Patrin
On Thu, 29 Jul 2004 14:41:57 +0200, Oliver Hitz <[EMAIL PROTECTED]> wrote:
> Hi all,
> 
> I have stumbled across something odd related to classes, instances and
> NULL in PHP 4. Apparently, an instance of a class that doesn't contain
> any variables is always equal to NULL.
> 
>   class MyClass {
> function anyFunction() {
>   ...
> }
>   }
> 
>   $c = new MyClass();
>   if ($c == null) {
> print "is \$c really null?";
>   }
> 
> `is_null($c)' however, returns `false', as one would expect.
> 
> As soon as the class contains a variable, the `$c == null' comparison
> returns false.
> 
> Is there any logical reason why the comparison with the `==' operator
> returns `true'? I don't know about the internals of PHP, but I think
> this might be related to implementation details (e.g. instances of
> classes being associative arrays). However, from an OOP point of view
> this behaviour seems rather weird.
> 
> I may not be the first to notice this. I couldn't find anything in the
> mailing list, if there has already been a discussion about this, just
> point me to the right direction.
> 

Hmmm, I was about to say: "This is expected behavior", but the output
of this script I whipped up doesn't make sense to me:

class A {
}
$a = array(0,
'0',
'',
null,
array(),
new A());

echo '';
foreach($a as $key => $val) {
  foreach($a as $key2 => $val2) {
if($key != $key2) {
  echo '';
  var_dump($val);
  echo '';
  var_dump($val2);
  echo '';
  if($val == $val2) {
echo 'yes';
  } else {
echo 'no';
  }
  echo '';
}
  }
}
echo '';


I would sugest using === for anything critical where you don't
necessarily know the type.

-- 
DB_DataObject_FormBuilder - The database at your fingertips
http://pear.php.net/package/DB_DataObject_FormBuilder

paperCrane --Justin Patrin--

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



[PHP] Classes, instances and NULL

2004-07-29 Thread Oliver Hitz
Hi all,

I have stumbled across something odd related to classes, instances and
NULL in PHP 4. Apparently, an instance of a class that doesn't contain
any variables is always equal to NULL.

  class MyClass {
function anyFunction() {
  ...
}
  }

  $c = new MyClass();
  if ($c == null) {
print "is \$c really null?";
  }

`is_null($c)' however, returns `false', as one would expect.

As soon as the class contains a variable, the `$c == null' comparison
returns false.

Is there any logical reason why the comparison with the `==' operator
returns `true'? I don't know about the internals of PHP, but I think
this might be related to implementation details (e.g. instances of
classes being associative arrays). However, from an OOP point of view
this behaviour seems rather weird.

I may not be the first to notice this. I couldn't find anything in the
mailing list, if there has already been a discussion about this, just
point me to the right direction.

Thanks
Oliver


pgpCMvNTB17si.pgp
Description: PGP signature