xmontero at dsitelecom dot com
24-Aug-2002 05:49
You can do some kind of overloading functions in PHP using
"function_exists".
Let's suppose you want a script to
call plugins that are php files and you want the plugins to
"override" behaviours that if not overriden are used by
default.
You might for example write a "mySQL table
viewer" which displays a table and it "opens a table",
"dumps the header", "dumps row-by-row" and then
"closes the table".
Let's suppose you want a plugin for
"Stocks" which prints negative stocks in red, so you want to
override the "dumping row-by-row" to do that behaviour. Instead
you do not want to have all the "default behaviour" repeated in
the plugin.
You may then do the following:
1) Define a
default plugin (ex: "default.php"
2) Write all your
functions in default.php to open, dump and close, but add them a
suffix:
open_table_default()
dump_header_default()
dump_row_default()
close_table_default()
3)
Call your functions with a wrapper: Insetad of this:
open_table() or
open_table_default() write
this:
plugincall("open_table");
4) Then write a
function called plugincall which uses function_exists() to see if you call
one or the other function:
function
plugincall($desired_function_name)
{
if( function_exists(
$desired_function_name))
{
//Call the plugin
//Note the $
before the name
$desired_function_name()
}
else
{
$desired_function_name = $desired_function_name . "_default";
if( function_exists($desired_function_name))
{
//Call the
default
//Note the $ before the name
$desired_function_name()
}
else
{
// Nor the plugin
nor the default were defined
}
}
So, now, if the
require_once(plugin.php) contains a function called
"open_table()", it will be used. Instaed,
"open_table_default()" will be used.
It's not like
overloading functions, but it is very useful to write scripts ampliable by
other programmers: If they write a function, it is used, if not, the
default is used.
See ya!
Xavier Montero.