English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP基礎チュートリアル

PHP高級チュートリアル

PHP & MySQL

PHPリファレンスマニュアル

PHP 関数

このチュートリアルでは、PHPでカスタム関数を作成する方法を学びます。

PHPの内部関数

関数は特定のタスクを実行する独立したコードブロックです。

PHPには、特定のタスクを実行するために直接呼び出して実行できる巨大な内部関数セットがあります。例えば、gettype()、print_r()、var_dumpなどです。

PHPの内部関数の完全なリストを得るために、PHPリファレンス部分を確認してください。

PHPで定義された関数

内部関数以外、PHPは自分自身で関数を定義することを許可しています。これは特定のタスクを実行する再利用可能なコードパックを作成し、メインプログラムから分離して保存・保守する方法です。関数を使用するいくつかの利点は以下の通りです:

  • 関数はプログラム中のコードの重複を減少させます - 関数を使用して、よく使うコードブロックを単一のコンポーネントにまとめることができます。今や、この関数をスクリプトのどこでも呼び出して同じタスクを実行できます。コードブロックを繰り返しコピー&ペーストする必要はありません。

  • 関数はコードの保守を容易にします - 関数を作成すると、一度作成した関数は複数回使用できるため、関数内で行う変更はすべての場所で自動的に実現され、複数のファイルを修正する必要がありません。

  • 関数を使用してエラーを簡単に排除できます - プログラムを関数に分割すると、エラーが発生した場合、どの関数がエラーを引き起こし、どこで修正できるかを特定することができます。したがって、エラーの修正が容易くなります。

  • 機能を他のアプリケーションで再利用できます - 関数はスクリプトの残りの部分とは分離されているため、これらの関数を含むphpファイルを含むだけで、他のアプリケーションで同じ機能を簡単に再利用できます。

次のセクションでは、PHPで自分自身の関数を簡単に定義する方法を説明します。

関数の作成と呼び出し

カスタム関数を作成する基本的な文法は以下の通りです:

function functionName(){ 
    //実行するコード
}

ユーザー定義関数の宣言は、functionという単語から始まり、作成する関数の名前、その後の括弧(())、最後に大括弧({ })の中に関数のコードを置きます。

これはユーザー定義関数の簡単な例で、今日の日付を表示しています:

<?php
//関数の定義
function whatIsToday(){
    echo "Today is " . date('l', mktime());
}
//関数を呼び出す
whatIsToday();
?>
テストしてみる‹/›

注意:関数名はアルファベットまたはアンダースコアで始まり、数字で始まることはできません。さらに、アルファベット、数字、またはアンダースコアで続けることができます。関数名は大文字小文字を区別しません。

引数付きの関数

関数を定義して実行時に引数を受け取る場合、引数を指定できます。引数の動作は関数内の占位符変数に似ており、実行時に関数に提供される値(引数と呼ばれます)で置き換わります。

function myFunc($oneParameter,$anotherParameter){ 
    //実行するコード
}

必要に応じて、任意の数の引数を定義できます。ただし、指定された各引数に対して、関数を呼び出す際に対応する引数を関数に渡す必要があります。

以下の例では、getSum()関数は二つの整数値を引数として取り、それらを足し合わせ、結果をブラウザで表示します。

<?php
//関数の定義
function getSum($num1, $num2{
  $sum = $num1 + $num2;
  echo "二つの数字$num1と$num2の和は : $sum";
}
 
//関数を呼び出す
getSum(10, 20);
?>
テストしてみる‹/›

上記のコードの出力は以下のようになります:

2つの数字10和20の和は : 30

ヒント:パラメータは関数に渡す値であり、引数は関数内で受け取る変数です。しかし、一般的な使用法では、これらの用語は相互に交換可能です、つまりパラメータは自変数です。

オプションパラメータとデフォルト値を持つ関数

オプションパラメータを持つ関数を作成することもできます - パラメータ名を入力し、その後等号(=)を付け、次にデフォルト値を以下のように指定します。

<?php
//関数の定義
function customFont($font, $size=1.5{
    echo "<p style=\"font-family: $font; font-size: {$size}em;">Hello, world!/p>";
}
 
//関数を呼び出す
customFont("Arial", 2);
customFont("Times", 3);
customFont("Courier");
?>
テストしてみる‹/›

ご覧の通り、customFont()の3番目の呼び出しには2番目の引数が含まれていません。これにより、PHPエンジンは$size引数のデフォルト値を使用します。1.5。

関数から値を返す

関数はreturn文を使って値を呼び出し側のスクリプトに返すことができます。この値は配列やオブジェクトなどのあらゆる型でできます。

<?php
//関数の定義
function getSum($num1, $num2{
    $total = $num1 + $num2;
    return $total;
}
 
//返される値を印刷する
echo getSum(5, 10); // 出力: 15
?>
テストしてみる‹/›

関数は複数の値を返すことはできませんが、以下の例のように配列を返すことで似たような結果を得ることができます。

<?php
//関数の定義
function divideNumbers($dividend, $divisor){
    $quotient = $dividend / $divisor;
    $array = array($dividend, $divisor, $quotient);
    return $array;
}
 
//変数を配列として割り当てる
list($dividend, $divisor, $quotient) = divideNumbers(10, 2);
echo $dividend;  // 出力: 10
echo $divisor;   // 出力: 2
echo $quotient;  // 出力: 5
?>
テストしてみる‹/›

関数に参照でパラメータを渡す

PHPでは、関数にパラメータを渡す方法が2種類あります:値渡しと参照渡しです。デフォルトでは、関数のパラメータは値渡しで、関数内でパラメータの値が変更された場合でも、関数外部には影響を与えません。しかし、関数がパラメータを変更できるようにするには、参照渡しで渡す必要があります。

参照渡しの方法は、関数定義のパラメータ名の前にアンダースコア(&)を付けることです。以下の例を参照してください:

<?php
/* 数字と乗算する関数を定義する
新しい値を返す */
function selfMultiply(&$number){
    $number *= $number;
    return $number;
}
 
$mynum = 5;
echo $mynum; // 出力: 5
 
selfMultiply($mynum);
echo $mynum; // 出力: 25
?>
テストしてみる‹/›

変数の範囲の理解

PHPスクリプトのどこにでも変数を宣言できます。しかし、宣言された場所は、PHPプログラム内で変数がどこで使用できるかまたはアクセスできるかを決定します。この可視性は、変数の範囲

デフォルトでは、関数内で宣言された変数はローカル変数であり、それらは関数の外部からアクセスしたり操作したりできません。以下の例を参照してください:

<?php
//関数の定義
function test(){
    $greet = "Hello World!";
    echo $greet;
}
 
test(); // 出力: Hello World!
 
echo $greet; //未定義の変数エラーの発生
?>
テストしてみる‹/›

同様に、関数内の外部変数にアクセスしようとすると、以下の例のように未定義の変数エラーが発生します:

<?php
$greet = "Hello World!";
 
//関数の定義
function test(){
    echo $greet;
}
 
test();  //未定義の変数エラーの生成
 
echo $greet; // 出力: Hello World!
?>
テストしてみる‹/›

上の例からわかるように、関数内で宣言された変数は外部からアクセスできず、同様に外部で宣言された変数は関数内からアクセスできません。この分離は、関数内の変数がメインプログラム内の変数に影響を与える可能性を減少させます。

ヒント:異なる関数で同じ名前の変数を使用できますが、局部変数はそれを宣言した関数のみが認識します。

globalキーワード

ある場合、メインプログラム内の変数を関数にインポートする必要がある場合、またはその逆の場合があります。その場合、関数内の変数の前にglobalキーワードを使用できます。このキーワードは変数をグローバル変数に変換し、関数内および外部から見えるまたはアクセス可能にします。以下の例を参照してください:

<?php
$greet = "Hello World!";
 
//関数の定義
function test(){
    global $greet;
    echo $greet;
}
 
test(); // 出力: Hello World!
echo $greet; // 出力: Hello World!
 
//新しい値を変数に代入する
$greet = "Goodbye";
 
test(); // 出力: Goodbye
echo $greet; // 出力: Goodbye
?>
テストしてみる‹/›

以下のPHPクラスとオブジェクト章で、可见性とアクセス制御に関する更多信息を学ぶことができます。

再帰関数の作成

再帰関数は、条件を満たすまで何度も自分自身を呼び出す関数です。再帰関数は通常、複雑な数学計算や深く嵌められた構造を処理するために使用されます。例えば、深く嵌められた配列のすべての要素を印刷するように。

以下のサンプルは再帰関数の動作方法を示しています。

<?php
//再帰関数の定義
function printValues($arr) {
    global $count;
    global $items;
    
    //$arrが配列であるか確認します
    if(!is_array($arr)){
        die("ERROR: Input is not an array");
    }
    
    /*
        配列をループし、valueが配列の場合は再帰的に呼び出します
        関数は見つかった値を出力項目配列に追加します
        並び替えられた各値ごとにカウンタを増やします1
    */
    foreach($arr as $a){
        if(is_array($a)){
            printValues($a);
        } else{
            $items[] = $a;
            $count++;
        }
    }
    
    //配列内の総カウントと値を返します
    return array('total' => $count, 'values' => $items);
}
 
//ネストされた配列の定義
$species = array(
    "birds" => array(
        "Eagle"
        "Parrot",
        "Swan"
    ),
    "mammals" => array(
        "Human"
        "cat" => array(
            "Lion",
            "Tiger",
            "Jaguar"
        ),
        "Elephant",
        "Monkey"
    ),
    "reptiles" => array(
        "snake" => array(
            "Cobra" => array(
                "King Cobra"
                "Egyptian cobra"
            ),
            "Viper"
            "Anaconda"
        ),
        "Crocodile",
        "Dinosaur" => array(
            "T"-rex",
            "Alamosaurus"
        )
    )
);
 
//ネストされた配列内の値を計算して印刷する
$result = printValues($species);
echo $result['total'] . ' value(s) found: ';
echo implode(', ', $result['values']);
?>
テストしてみる‹/›

注意:再帰関数を作成する際には注意を払ってください、コードが正しく書かれていないと無限ループが発生する可能性があります。