Doc #52605 [Csd]: get_class(NULL) returns class name when called insid member function of a class
| From: | degeberg@php.net | Date: | Sun, 15 Aug 2010 09:09:51 +0000 |
| Subject: | Doc #52605 [Csd]: get_class(NULL) returns class name when called insid member function of a class | ||
| References: | 1 | Groups: | php.doc.bugs |
| Request: | Send a blank email to doc-bugs+get-4866@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=52605&edit=1
ID: 52605
Updated by: degeberg@php.net
Reported by: rahul dot pache at gmail dot com
Summary: get_class(NULL) returns class name when called insid
member function of a class
Status: Closed
Type: Documentation Problem
Package: Documentation problem
Operating System: windows 7
PHP Version: 5.3.3
Assigned To: degeberg
Block user comment: N
New Comment:
There is no issue except in the documentation.
Re 1: Because that is only allowed inside a class.
Re 2: Because that is what it defaults to.
Re 3: Undefined variables default to NULL. You're also getting an
E_NOTICE telling you that this might be a problem. Not a bug in PHP.
I actually thought the documentation already addressed point 1 and 2,
but looking at it again it appears it doesn't. I've committed one more
fix.
Previous Comments:
------------------------------------------------------------------------
[2010-08-15 11:09:44] degeberg@php.net
Automatic comment from SVN on behalf of degeberg
Revision: http://svn.php.net/viewvc/?view=revision&revision=302261
Log: Clarified default behavior when omitting param. See PHP bug #52605.
------------------------------------------------------------------------
[2010-08-15 10:48:02] rahul dot pache at gmail dot com
<?php
get_class(NULL);
?>
Output:
Warning: get_class() called without object from outside a class in
D:\EasyPHP\www\index.php on line 2
Comment:
1. Then why is get_class(NULL) when called from outside the class
returning a
warning message.
2. I don't understand why is it returning class name "foo" when null is
passed
to it inside member function of a class.
3. I made a function to check if the argument passed is object of same
class or
not.
<?php
class foo {
public static check($obj) {
if(get_class($obj) == __CLASS__) {
echo "YES";
} else {
echo "NO";
}
}
}
$var = new foo();
foo::check($var); // This will print YES
foo::check($uninitialized_variable)
/*
This will also print YES because NULL is passed to get_class() in the
function
foo::check(). And when NULL is passed to a get_class inside a member
function of
the class it returns class name.
*/
?>
I think this is not a documentation problem, there is some serious bug.
:(
------------------------------------------------------------------------
[2010-08-15 09:17:37] degeberg@php.net
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.
Thank you for the report, and for helping us make our documentation
better.
------------------------------------------------------------------------
[2010-08-15 09:17:25] degeberg@php.net
Automatic comment from SVN on behalf of degeberg
Revision: http://svn.php.net/viewvc/?view=revision&revision=302255
Log: Fixed PHP bug #52605 (get_class(NULL) returns class name when
called insid member function of a class)
------------------------------------------------------------------------
[2010-08-15 04:06:15] cataphract@php.net
This is actually a documentation problem.
The convention is to give internal functions that have optional
arguments a default value and have them behave the same way when the
default value is given and when the argument's not passed at all.
In PHP 5.2, you could not pass an argument to get_class and have it have
the same behavior as when nothing is passed. This was fixed in PHP 5.3
by making "NULL" the default argument value.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/bug.php?id=52605
--
Edit this bug report at http://bugs.php.net/bug.php?id=52605&edit=1