Edit report at https://bugs.php.net/bug.php?id=51126&edit=1

 ID:                 51126
 Comment by:         dmittner at llnw dot com
 Reported by:        richard at rjharrison dot org
 Summary:            class_exists + namespaces
 Status:             Bogus
 Type:               Bug
 Package:            SPL related
 Operating System:   linux
 PHP Version:        5.3.1
 Block user comment: N
 Private report:     N

 New Comment:

I agree that this behavior is counter-intuitive. I seem to have just run into 
the same problem, myself, where my autoload works just fine where 
class_exists() returns false.

In short... class_exists() should really infer the given namespace of the 
current file, just like it's inferred in all other uses.


Previous Comments:
------------------------------------------------------------------------
[2010-02-23 19:02:17] richard at rjharrison dot org

Hi Johannes,

I double-checked the documentation and found no mention that the string passed 
to class_exists() must be fully qualified. Perhaps this is a documentation bug.

It is certainly seems inconsistent/counter-intuitive:-

class_exists('Things\Car'); // FALSE, class does not exist
$car = new Things\Car(); // HUH? Class does exist after all

So PHP is able to figure out there is a "use Foo/Things" namespace in effect on 
one line, but not on the other? Lame.

------------------------------------------------------------------------
[2010-02-23 18:46:01] johan...@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

When used as a string we need the fully qualified name as we don't know where 
the parameter is coming from.

------------------------------------------------------------------------
[2010-02-23 18:41:57] richard at rjharrison dot org

Description:
------------
class_exists() is not calling my spl_autoload_register'ed function with a fully 
qualified (namespaced) class name.

Because the input to my autoload function is not fully qualified, it cannot 
load the class and class_exists return false; however, if I try to instantiate 
the class that "does not exist" then the correct, fully qualified class now 
passed to the autoloader: it correctly loads the class and my code works.

Reproduce code:
---------------
// register my autoloader

use Foo\Things;

// This fails: my autoload function is called with $class = 'Things\Car'
if(class_exists('Things\Car')){
    echo "class exists!";
}else{
    echo "Weird?";
}


// This works: my autoload function is called with $class = 'Foo\Things\Car'
$x = new Things\Car(); 



Expected result:
----------------
"class exists!"

Actual result:
--------------
"Weird?"


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=51126&edit=1

Reply via email to