note 24639 added to ref.funchand
| From: | xmontero at dsitelecom dot com | Date: | Fri, 23 Aug 2002 18:49:03 +0000 |
| Subject: | note 24639 added to ref.funchand | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-35419@lists.php.net to get a copy of this message | ||
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.
--
http://www.php.net/manual/en/ref.funchand.php
http://master.php.net/manage/user-notes.php?action=edit+24639
http://master.php.net/manage/user-notes.php?action=delete+24639
http://master.php.net/manage/user-notes.php?action=reject+24639