I would suggest to incorporate a method that serves as a central location to
instantiate exception objects - a *consistent *object-instantiation system,
if you will. This method could go inside a class that is always
required/loaded so we don't have to include another file just for this
purpose. Zend_Loader, maybe? This approach allows us to add more
processing/error-handling logic to the method in future that ripples across
the framework:

//////////////////////////////////////////////////////////////////////////
static function getException( $class, $message = 'ERROR', $code = 0, ... )
//////////////////////////////////////////////////////////////////////////
{
   self::loadClass( $class );
   //
     // Or straight require_once for performance, but then format the
class-name to instantiate...
// require_once( $class );
   //
   return new $class( $message, $code, ... );
}
////////////////////////////////////////////////////////////////////////////////


Then, from within the code where an exception needs to be thrown, this
becomes just a simple *one-liner*,* *instead of spilling require_once/etc
lines of code all over the framework:

throw Zend_Loader::getException( <class>, <message>, <code>, ... );


2. On another note, how about *other *class-files that get included
superfluously? I'm quite sure there are an awful lot of files included in
the framework's classes without ever being used. ViewRenderer.php is just an
example. If we really want to reduce the number of included files to improve
performance, we need to work on these ones, too. Bottom line - include files
only on a *need-to-use *basis and *just-in-time*! I, for one, don't want any
files loaded that I don't want to use in my application - its just an
over-head.

my2c




On 12/13/07, Shahar Evron <[EMAIL PROTECTED] > wrote:
>
> A while back ago there was an attempt to eliminate the loading of unused
> Exception files / classes by different ZF components. I don't know what
> happened with that discussion, but I think we should do something about
> it.
>
> I've made some profiling of relatively simple ZF-based app (doesn't load
> too many components - mostly the MVC, DB, Config, Registry etc. stuff)
> and I've found some 10 calls to require_once to load an Exception class
> without having a single exception thrown (that I know of - unless some
> ZF code threw an exception and some other ZF component caught it).
>
> 10 redundant include files have quite an impact on performance,
> especially in places where you have no opcode cache installed.
>
> A while back ago I changed Zend_Http_Client to require_once it's
> exception classes only when about to throw an exception, something like:
>
> <?php
> if ($error_happened) {
>    require_once 'Zend/Http/Client/Exception.php';
>    throw new Zend_Http_Client_Exception('Good news, everyone!');
> }
> ?>
>
> Now this might seem a bit cumbersome - but when considering the fact
> that it's 1 line of code that never gets executed vs. always loading at
> least one aditional file (not to mention cases where you load
> Zend/Http/Client/Adapter/Exception.php which loads
> Zend/Http/Client/Exception.php which loads Zend/Http/Exception.php which
> loads Zend/Exception.php - you get the point) I think it's worth it.
>
> If nobody has a nicer solution to this overweight problem, I suggest all
> component maintainers will start doing the same (this is not my idea and
> I know some already do so).
>
> If you want, I can try to come up with a list of places that need to be
> fixed.
>
> Better suggestions are most welcome!
>
> Thanks,
>
> Shahar.
>
> --
>
> Shahar.
>
>

Reply via email to