新しいブログに移動しました。
9ensanのLifeHack
こちらの記事も必要に応じて新しいブログに移動させる予定です。
今後ともよろしくお願い致します。

HOME > PHP > 

PHP入門 第14回 関数

PHP入門 第14回 関数

  • 2009.02.12 (木) 08:06
  • PHP

ユーザー定義関数

関数は次のような構文で定義されます。

1
2
3
4
5
6
7
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "関数の例\n";
    return $retval;
}
?>

 関数の中では、他の関数や クラス 定義 を含む PHP のあらゆる有効なコードを使用することができます。

関数名は、PHP の他のラベルと同じ規則に従います。
関数名として有効な 形式は、まず文字かアンダースコアで始まり、その後に任意の数の文字・ 数字・あるいはアンダースコアが続くものです。

PHP では、関数は参照される前に定義されている必要はありません。
ただし以下の二つの例のように、条件付きで関数が 定義されるような場合を除きます。

条件付きの関数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
$makefoo = true;
 
/* ここでは関数foo()はまだ定義されていないので
   コールすることはできません。
   しかし関数 bar()はコールできます。 */
 
bar();
 
if ($makefoo) {
  function foo()
  {
    echo "I don't exist until program execution reaches me.\n";
  }
}
 
/* ここでは $makefooがtrueと評価されているため
   安全にfoo()をコールすることができます。 */
 
if ($makefoo) foo();
 
function bar()
{
  echo "I exist immediately upon program start.\n";
}
 
?>
関数の中の関数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
function foo()
{
  function bar()
  {
    echo "I don't exist until foo() is called.\n";
  }
}
 
/* ここでは関数bar()はまだ定義されていないので
   コールすることはできません。 */
 
foo();
 
/* foo()の実行によって bar()が
   定義されるためここではbar()を
   コールすることができます。*/
 
bar();
 
?>

PHP では、関数やクラスはすべてグローバルスコープです。
関数の内部で定義したものであっても関数の外部からコールできますし、 その逆も可能なのです。

PHP は関数のオーバーロードをサポートしていません。
また、宣言された関数の定義を取り消したり再定義することも できません。

オーバーロードとは、戻り値や引数の数やデータ型が異なる同名の関数やメソッドを複数定義できる機能のことです。

PHP では、関数を再帰的にコールすることが可能です。
ただし、100 から 200 を超えるような再帰呼び出しは避けてください。
そんなことをすると、 スタックが破壊され、スクリプトが異常終了してしまいます。

再帰的な関数

1
2
3
4
5
6
7
8
9
<?php
function recursion($a)
{
    if ($a < 20) {
        echo "$a\n";
        recursion($a + 1);
    }
}
?>

関数の引数

引数のリストにより関数へ情報を渡すことができます。
このリストは、カンマで区切られた式のリストです。

PHP は、値渡し(デフォルト)、 参照渡し、 デフォルト引数値  をサポートしています。
また、 可変長引数リスト  もサポートしてます。

詳しくは、 func_num_args(), func_get_arg(), func_get_args() に関する関数リファレンスを 参照ください。

使用例)

通常の関数の引数
1
2
3
4
5
6
<?php
function takes_array($input)
{
    echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
参照渡しの関数の引数

(PHP5以降ではデフォルトがこの参照渡しになります。
php.iniの設定項目「allow_call_time_pass_reference」のOn/Offで参照渡しがデフォルトかどうかを制御できます。)
関数がその引 数を修正できるようにするには、その引数を参照渡しとする必要があり ます。

1
2
3
4
5
6
7
8
9
<?php
function add_some_extra(&$string)
{
    $string .= 'and something extra.';
}
$str = 'This is a string, ';
add_some_extra($str);
echo $str;    // outputs 'This is a string, and something extra.'
?>
デフォルト引数値

関数は、スカラー引数に関して次のようにデフォルト値を 定義することができます。  
デフォルト値は、定数式である必要があり、 変数やクラスのメンバーであってはなりません。
引数のデフォルト値を使用する際には、デフォルト値を有する引数はデ フォルト値がない引数の右側に全てある必要があることに注意して下さ い。
(デフォルト値を使用したい引数の右側の引数はすべてデフォルト値が設定されていないといけないということです)

1
2
3
4
5
6
7
8
9
<?php
function makecoffee($type = "cappuccino")
{
    return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
?>

 戻り値

オプションの return 文により値を返すことができます。 配列やオブジェクトを含むあらゆる型を返すことができます。
これにより、関数の実行を任意の箇所で終了し、その関数を呼び出した 箇所に制御を戻すことが出来ます。

使用例)

1
2
3
4
5
6
7
<?php
function square($num)
{
    return $num * $num;
}
echo square(4);   //  '16'を出力
?>

複数の値を得る為に配列を返すこともできます

1
2
3
4
5
6
7
<?php
function small_numbers()
{
    return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>

関数からリファレンスを返すこともできます。
リファレンス演算子 & を関数宣 言部および変数への返り値を代入する際の両方で使用します。

1
2
3
4
5
6
7
8
<?php
function &returns_reference()
{
    return $someref;
}
 
$newref =& returns_reference();
?>

可変変数

PHP は可変関数(variable functions)の概念をサポートしています。
これにより、変数名の後に括弧が付いている場合、その値が何であろうと PHPは、同名の関数を探し実行を試みます。
この機能は、コールバック、関数テーブル等を実装するために使用可能です。

使用例)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
function foo()
{
    echo "In foo()<br />\n";
}
 
function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}
 
// This is a wrapper function around echo
function echoit($string)
{
    echo $string;
}
 
$func = 'foo';
$func();        // This calls foo()
 
$func = 'bar';
$func('test');  // This calls bar()
 
$func = 'echoit';
$func('test');  // This calls echoit()
?>

オブジェクトのメソッドを可変関数を使ってコールすることもできます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class Foo
{
    function Variable()
    {
        $name = 'Bar';
        $this->$name(); // Bar() メソッドのコール
    }
 
    function Bar()
    {
        echo "This is Bar";
    }
}
 
$foo = new Foo();
$funcname = "Variable";
$foo->$funcname();  // $foo->Variable() をコールする
 
?>

 内部(ビルドイン)関数

PHPは標準で多くの関数と言語構造を持っています。
また他にも コンパイル済みの特定のPHPエクステンションを必要とする関数があります。
それらはもしコンパイルされていなければ"undefined function(未定義の関数)" として致命的エラーを発するでしょう。
例えば、 imagecreatetruecolor()のような 画像関数を使用するには、 GDサポートを有効にしてPHPをコンパイルしておく必要があります。
また、mysql_connect()を使う場合もやはり MySQLサポートを有効にしてPHPが コンパイルされている必要があります。
stringや variable関数のように どのバージョンのPHPでも含まれているコアの関数もたくさんあります。
phpinfo()やget_loaded_extensions()を コールすることで使用しているPHPにロードされているエクステンションを 見ることができます。

コメント:0件

コメント投稿フォーム
コメントを入力して下さい。
ユーザー名(必須)
メールアドレス(必須)(非公開)
ホームページ
コメント

トラックバック:2件

  1. [...] 第14回 関数 [...]

  2. PHPで組み合わせを生成する -再帰呼び出し-

    PHPで組み合わせの生成を行うプログラムを作る。再帰呼び出しという手法を用いる。

この記事のトラックバックURL
http://blog.veryposi.info/programing/php/php-guide-14/trackback/
お薦めのレンタルサーバー
広告
お薦めの書籍
HOME > PHP > 

PHP入門 第14回 関数