Hello Greg,

  I think Johannes has a point here. It is doable in PHP already and you
don't hit a performance issue here as you are showing the message only
when the class is not present. That is just add Johanne' code after you
know that your autoload was responsible but cannot find the class.

marcus

Wednesday, October 3, 2007, 10:27:45 PM, you wrote:

> Johannes Schlüter wrote:
>> Greg,
>> 
>> On Wed, 2007-10-03 at 15:07 -0500, Greg Beaver wrote:
>>> Now what?  The error message doesn't tell Joe where to find PEAR2::Foo,
>>> or any other useful information on how to find it, just that it can't be
>>> found.  PEAR2, however, knows exactly where it should be found, and has
>>> some idea of why it isn't there (package not installed).  In addition,
>>> there is no stack trace that can be used to debug the call chain that
>>> led to the problem if PEAR2::Foo *is* installed, and Joe reports the
>>> problem to the maintainers of PEAR2::Blah.
>>>
>>> Without my die(new Exception()), there is no way to pass this known
>>> information back out of PEAR2_Autoload to Joe, and it makes both
>>> development and debugging much more difficult, and unnecessarily so.
>> 
>> function __autoload($a) {
>>    $b = debug_backtrace();
>>    if ($bt[1]["function"] == "class_exists") {
>>        echo "in get_class";
>>    }
>> }
>> 
>> should work quite well without obscure engine hacks - or am I missing
>> something?

> I do that now, but it is a severe performance hog as well as being
> fugly.  Also, if you use spl_autoload_register, the frame is $bt[2].  In
> other words, it's possible, but still an ugly, unnecessary hack with
> lots of potential pitfalls caused by the inability to customize an error
> message when a class doesn't exist.

> Greg



Best regards,
 Marcus

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to