Re: class_is_loadable?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



First of all, I don't think using autoload is recommended.

If you really want to do it that way, you could check if the file which autoload will try to include exists and if it does, include it and create your object.

Actually to make the script more safe, after including the file you should check if the class exists (because the file might exist but not have the class in it) and only then you can make the object of that class.

I suppose you could throw the exception you want and do it with the try-catch as you like it :)

Sorry if my English is bad and if didn't get what you want to do.

"Larry Garfield" <larry@xxxxxxxxxxxxxxxx> wrote in message news:200807051236.13458.larry@xxxxxxxxxxxxxxxxxxx
Greetings, all.

I am trying to figure out a way to implement the following logic, but I am not
sure if it is possible to do so without a lot of additional side work:

I have a class, A, and another class B that extends A. They live in separate
files.  The logic I need to implement is as follows:

if (class_exists('B')) {
 $foo = new B();
}
else {
 $foo = new A();
}

That is all well and good if both A and B are already loaded and parsed, but I
am using spl_autoload to lazy-load classes as needed.  That means the
class_exists() call will return false if B exists but hasn't been included
yet.  What I would like to happen is for PHP to include B if it exists or
give a non-fatal error if it doesn't so that I can instantiate A instead.

Ideally, the logic would be something like the following:

try {
 $foo = new B();  // Try to autoload B, throw exception if it can't.
}
catch (ClassDoesntExistEvenAfterRunningThroughAutoloadException $e) {
 $foo = new A(); // May autoload A at this point, too.
}
// do stuff with $foo

However, as far as I am aware $foo = new B(); will cause a fatal exception if
autoload doesn't find a B.

Does anyone know of a way to achieve the above effect? This is specifically
for PHP 5.2 and later.  Thanks.

--
Larry Garfield
larry@xxxxxxxxxxxxxxxx


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux