Doc #52605 [Csd]: get_class(NULL) returns class name when called insid member function of a class

From: 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&amp;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&amp;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

« previous php.doc.bugs (#4866) next »