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

From: Date: Sun, 15 Aug 2010 08:48:03 +0000
Subject: Doc #52605 [Com]: 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-4865@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 Comment by: rahul dot pache at gmail dot com 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: <?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. :( Previous Comments: ------------------------------------------------------------------------ [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. ------------------------------------------------------------------------ [2010-08-14 23:31:00] rahul dot pache at gmail dot com Description: ------------ get_class(NULL) returns class name when called inside member function of a class. <?php CLASS foo { public static function bar() { echo get_class(NULL); } public function baz() { echo get_class(NULL); } } foo::bar(); echo "<br>"; $f = new foo(); $f->baz(); ?> output: foo foo Expected output: Warning: get_class() called without object from outside a class in filename.php on line 4 Warning: get_class() called without object from outside a class in filename.php on line 7 -------Message-------- When some string/int is sent an expected output is produced that is a warning message. I am using EasyPHP 5.3.3. This error does not exists in PHP 5.2.6 ---------------------- ------phpinfo()------- [just first table] System Windows NT RAHUL-PC 6.1 build 7600 (Unknow Windows version Ultimate Edition) i586 Build Date Jul 21 2010 20:00:47 Compiler MSVC6 (Visual C++ 6.0) Architecture x86 Configure Command cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--disable-isapi" "--without-mssql" "-- without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=D:\php- sdk\oracle\instantclient10\sdk,shared" "--with-oci8=D:\php- sdk\oracle\instantclient10\sdk,shared" "--with-oci8-11g=D:\php- sdk\oracle\instantclient11\sdk,shared" "--enable-object-out-dir=../obj/" "-- enable-com-dotnet" "--with-mcrypt=static" Server API Apache 2.0 Handler Virtual Directory Support enabled Configuration File (php.ini) Path C:\Windows Loaded Configuration File D:\EasyPHP\apache\php.ini Scan this dir for additional .ini files (none) Additional .ini files parsed (none) PHP API 20090626 PHP Extension 20090626 Zend Extension 220090626 Zend Extension Build API220090626,TS,VC6 PHP Extension Build API20090626,TS,VC6 Debug Build no Thread Safety enabled Zend Memory Manager enabled Zend Multibyte Support disabled IPv6 Support enabled Registered PHP Streams php, file, glob, data, http, ftp, zip, compress.zlib, compress.bzip2, phar Registered Stream Socket Transports tcp, udp Registered Stream Filters convert.iconv.*, mcrypt.*, mdecrypt.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk, zlib.*, bzip2.* Test script: --------------- <?php CLASS foo { public static function bar() { echo get_class(NULL); } public function baz() { echo get_class(NULL); } } foo::bar(); echo "<br>"; $f = new foo(); $f->baz(); ?> Expected result: ---------------- Warning: get_class() called without object from outside a class in filename.php on line 4 Warning: get_class() called without object from outside a class in filename.php on line 7 Actual result: -------------- foo foo ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=52605&edit=1

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