Bug #49143 [Com]: is_callable() and unnecessary backslash

2010-06-10 Thread alex dot howansky at gmail dot com
Edit report at http://bugs.php.net/bug.php?id=49143edit=1

 ID:   49143
 Comment by:   alex dot howansky at gmail dot com
 Reported by:  david at grudl dot com
 Summary:  is_callable() and unnecessary backslash
 Status:   Open
 Type: Bug
 Package:  Class/Object related
 Operating System: *
 PHP Version:  5.3.0

 New Comment:

This bug is still present in 5.3.2 and also affects instantiating a new
class 

from a string variable:



function __autoload($class)

{

echo $class\n;

}



$obj = new MyProject\Thing();

// correct: MyProject\Thing



$obj = new \MyProject\Thing();

// correct: MyProject\Thing



$class = '\\MyProject\\Thing';

$obj = new $class();

// wrong: \MyProject\Thing


Previous Comments:

[2010-04-09 08:18:22] abca_b_cabcom at hotmail dot com

hi david, you are not in a namespace it is just a classname.


[2009-08-04 11:24:35] david at grudl dot com

The two same class invokes autoloader with different class name (maybe 

better term is non-canonicalized class name).



This means: every autoloader must call $name = ltrim($name, \).



defined() removes leading \ automatically, is_callable and 

method_exists do not.


[2009-08-04 11:16:07] j...@php.net

Yes, which problem..? I don't see any errors. 


[2009-08-04 00:34:46] david at grudl dot com

Tested with 5.3.1-dev (Sun, 02 Aug 2009 18:53:57 +), problem still 

exists.


[2009-08-03 16:19:59] david at grudl dot com

Description:

is_callable() and method_exists() may invoke autoloader with 
unnecessary namespace backslash.



\My\MyClass::func() is the same as My\MyClass::func().









Reproduce code:
---
function __autoload($name)

{

echo $name;

}



is_callable('\My\MyClass::func'); // ERROR



is_callable('My\MyClass::func'); // OK



method_exists('\My\MyClass', 'func'); // ERROR



method_exists('My\MyClass', 'func'); // OK



// defined works well:

defined('\My\MyClass::CONST'); // OK



defined('My\MyClass::CONST'); // OK





Expected result:

My\MyClass

My\MyClass



My\MyClass

My\MyClass



My\MyClass

My\MyClass

Actual result:
--
\My\MyClass

My\MyClass



\My\MyClass

My\MyClass



My\MyClass

My\MyClass






-- 
Edit this bug report at http://bugs.php.net/bug.php?id=49143edit=1


Bug #49143 [Com]: is_callable() and unnecessary backslash

2010-04-09 Thread abca_b_cabcom at hotmail dot com
Edit report at http://bugs.php.net/bug.php?id=49143edit=1

 ID:   49143
 Comment by:   abca_b_cabcom at hotmail dot com
 Reported by:  david at grudl dot com
 Summary:  is_callable() and unnecessary backslash
 Status:   Open
 Type: Bug
 Package:  Class/Object related
 Operating System: *
 PHP Version:  5.3.0

 New Comment:

hi david, you are not in a namespace it is just a classname.


Previous Comments:

[2009-08-04 11:24:35] david at grudl dot com

The two same class invokes autoloader with different class name (maybe 

better term is non-canonicalized class name).



This means: every autoloader must call $name = ltrim($name, \).



defined() removes leading \ automatically, is_callable and 

method_exists do not.


[2009-08-04 11:16:07] j...@php.net

Yes, which problem..? I don't see any errors. 


[2009-08-04 00:34:46] david at grudl dot com

Tested with 5.3.1-dev (Sun, 02 Aug 2009 18:53:57 +), problem still 

exists.


[2009-08-03 16:19:59] david at grudl dot com

Description:

is_callable() and method_exists() may invoke autoloader with 
unnecessary namespace backslash.



\My\MyClass::func() is the same as My\MyClass::func().









Reproduce code:
---
function __autoload($name)

{

echo $name;

}



is_callable('\My\MyClass::func'); // ERROR



is_callable('My\MyClass::func'); // OK



method_exists('\My\MyClass', 'func'); // ERROR



method_exists('My\MyClass', 'func'); // OK



// defined works well:

defined('\My\MyClass::CONST'); // OK



defined('My\MyClass::CONST'); // OK





Expected result:

My\MyClass

My\MyClass



My\MyClass

My\MyClass



My\MyClass

My\MyClass

Actual result:
--
\My\MyClass

My\MyClass



\My\MyClass

My\MyClass



My\MyClass

My\MyClass






-- 
Edit this bug report at http://bugs.php.net/bug.php?id=49143edit=1