An interesting way to use functions is by putting other things than PHP in them, i.e. HTML CSS. This can be useful if you will be using a format for many pages. Yes, the include function can be used also, but by defining them in functions can make them more portable in a way and keep you from having to make many include files. You could use include() when one will be putting big portions of PHP, HTML, and/or CSS and will be using them in many pages. Then you could use PHP, HTML, and/or CSS in a function when it is smaller portions of code and only want it to be on a few pages.
I have been using include() for HTML and CSS in my early days of PHP coding, but I will be using functions for that a lot more now.
<?php function a() { ?>
<style type="text/css">
table {
border: 1px dashed black;
background: #95EAFE;
text-align:left;
width:610px;
}
.linkbar {
font-family:sans-serif;
line-height:40px;
top:1px;
text-align:center;
width:200px;
height:10px;
}
</style>
<?php } ?>
Now doing:
<?php a(); ?>
will return all of the CSS just as if you had wrote it on the actual page, or used include() . The same thing goes for HTML code inside a function. The possibilities are endless...
関数処理関数(funchand)
導入
これらの関数は、関数で行う様々な処理を行います。
要件
外部ライブラリを必要としません。
インストール手順
PHP コアに含まれるため、 追加のインストール無しで使用できます。
実行時設定
設定ディレクティブは定義されていません。
定義済み定数
定数は定義されていません。
目次
- call_user_func_array — パラメータの配列を指定してユーザ関数をコールする
- call_user_func — 最初の引数で指定したユーザ関数をコールする
- create_function — 匿名関数 (ラムダ形式) を作成する
- func_get_arg — 引数のリストから要素をひとつ返す
- func_get_args — 関数の引数リストを配列として返す
- func_num_args — 関数に渡された引数の数を返す
- function_exists — 指定した関数が定義されている場合に TRUE を返す
- get_defined_functions — 定義済みの全ての関数を配列で返す
- register_shutdown_function — シャットダウン時に実行する関数を登録する
- register_tick_function — 各 tick で実行する関数を登録する
- unregister_tick_function — 各 tick の実行用の関数の登録を解除する
関数
Michael T. McGrew
13-May-2005 01:56
13-May-2005 01:56
michael dot bommarito at gmail dot com
31-Jan-2005 04:28
31-Jan-2005 04:28
I've developed an easy-to-use hack using these functions to emulate overloaded functions. It's especially handy for constructors and/or C++ style templating.
Here's a little example to get you going. This does the trick for most circumstances, and if you need more intelligent parsing, it's not too hard to implement with regex or a more suitable classification scheme.
N.B. Note the lack of whitespace between variable types in case strings.
class Matrix {
...
function Matrix() {
$args = func_get_args();
$argmatch = implode(",", array_map('gettype', $args));
switch( $argmatch ) {
case 'integer,integer':
//initialize m x n matrix
break;
case 'integer,integer,integer':
//initialize m x n matrix with constant c
break;
case 'integer,integer,float':
//initialize m x n matrix with constant c
break;
case 'array':
//initialize from array (2D....)
break;
case 'array,integer':
//intialize from array (1D packed with m rows)
break;
default:
//(void) overload?
//error handling?
break;
}
}
...
}
php-note-2003-june-18 at ryandesign dot com
19-Jun-2003 12:22
19-Jun-2003 12:22
Xavier's example is rather complicated, and his task would be much more simply accomplished by using classes. Define a base class to do the basic functions open, dump, and close, and create extension classes to override whatever behavior.
class foo {
function open() {
// Default functionality for open()
}
function dump() {
// Default functionality for dump()
}
function close() {
// Default functionality for close()
}
}
class bar extends foo {
function open() {
// Override functionality of open()
}
// dump() and close() remain as in class foo
}
xmontero at dsitelecom dot com
24-Aug-2002 06:49
24-Aug-2002 06: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.