|
Posted by Richard Levasseur on 12/18/09 11:51
Bob Stearns wrote:
> Richard Levasseur wrote:
>
> > There is also __autoload for use with classes, which is automatically
> > invoked if the class does not exist.
> >
> > See http://us2.php.net/__autoload
> >
> > function __autoload($class_name) {
> > require_once $class_name . '.php';
> > }
> >
> > $obj = new MyClass1();
> > $obj2 = new MyClass2();
> >
> > Henk Verhoeven wrote:
> >
> >>Extending the solution of Bob:
> >>
> >>function callWithAutoInclude($functionName, $parameters) {
> >> if (!function_exists($functionName)) {
> >> require($functionName.'.php');
> >> }
> >> return call_user_func_array($functionName, $parameters);
> >>}
> >>
> >>the following:
> >> callWithAutoInclude('somefunction', array($param1, $param2) );
> >>
> >>will then be the equivalent of:
> >> somefunction($param1, $param2);
> >>
> >>
> >>Greetings,
> >>
> >>Henk Verhoeven,
> >>www.phpPeanuts.org
> >>
> >>Janwillem Borleffs wrote:
> >>
> >>
> >>>Bob Stearns wrote:
> >>>
> >>>
> >>>>Is there an option in php to do a 'require xxx.php' if, when a
> >>>>function call to xxx is encountered, it is not defined? It would look
> >>>>in all the standard places.
> >>>>
> >>>
> >>>
> >>>The best you can do is to test if the function exists and include its
> >>>definition when it doesn't:
> >>>
> >>>if (!function_exists('somefunction')) {
> >>> require 'funcdef.php';
> >>>}
> >>>
> >>>You can also use require_once/include_once to prevent the file being
> >>>included more than once, which causes an error because of the re-definition.
> >>>
> >>>
> >>>JW
> >>>
> >>>
> >
> >
>
> Thanks for the ideas guys.
>
> I was trying to get my functions to behave like builtin functions; be
> there when they are called. Right now I am including my whole library in
> the initialization procedure every module uses, which, while very
> wasteful of processor resources, lets me use my functions on an ad hoc
> basis without remembering if I've included them; this is especially
> important in the maintenance portion of the life cycle of a module.
> Another possible choice, between dynamic loading and REQUIREing unneeded
> modules, would be a REQUIRE IF NEEDED statement which would create a
> table the compiler would use to include the file if a function call to
> the same name was invoked.
I was thinking somet a bit more like this:
function __autoload($c) {
switch($c) {
case 'Utility':
include('Utility.class.php');
}
}
overload('Utility');
class Utility {
public static $includeMap = array('myfunc'=>'myfunc.function.php');
public function __call($m,$a,&$r) {
if(!function_exists($m)) {
include(self::$includeMap[$m]);
}
$r = call_user_func_array($m,$a);
return true;
}
}
then you do:
Utility::myfunc();
Of course, you'd have to prefix all the function calls with Utility or
what not.
[Back to original message]
|