PHPの関数

WBOY
リリース: 2016-06-23 13:27:31
オリジナル
1243 人が閲覧しました

概要

関数名には、PHP の他の識別子と同じ命名規則があります。有効な関数名は文字またはアンダースコアで始まり、その後に文字、数字、またはアンダースコアが続きます

関数名は大文字と小文字が区別されませんが、関数を呼び出すときは、関数が定義されたときと同じ形式を使用することをお勧めします

そうではありませんPHP でサポートされています 関数のオーバーロードにより、宣言された関数の定義解除や再定義も不可能になります

関数
<?phpfunction foo($arg_1, $arg_2, /* ..., */ $arg_n){    echo "Example function.\n";    return $retval;}?>
ログイン後にコピー
の定義

関数が条件付きで定義されている場合、関数を呼び出す前に定義する必要があります

<?php$makefoo = true;/* 不能在此处调用foo()函数,   因为它还不存在,但可以调用bar()函数。*/bar();if ($makefoo) {  function foo()  {    echo "I don't exist until program execution reaches me.\n";  }}/* 现在可以安全调用函数 foo()了,   因为 $makefoo 值为真 */if ($makefoo) foo();function bar(){  echo "I exist immediately upon program start.\n";}?>
ログイン後にコピー

関数内の関数

<?phpfunction foo(){  function bar()  {    echo "I don't exist until foo() is called.\n";  }}/* 现在还不能调用bar()函数,因为它还不存在 */foo();/* 现在可以调用bar()函数了,因为foo()函数   的执行使得bar()函数变为已定义的函数 */bar();?>
ログイン後にコピー
関数のパラメーター

Pass値渡し vs. 参照渡し

デフォルトでは、関数パラメーターは値によって渡されます (そのため、パラメーターの値が関数内で変更されても、関数外の値は変更されません)。関数がその引数値を変更できるようにするには、引数を参照渡しする必要があります。

関数のパラメータを常に参照渡ししたい場合は、関数定義のパラメータの前に記号 &

<?phpfunction 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.'?>
ログイン後にコピー
を追加できます。

デフォルトパラメータ

デフォルトパラメータを使用する場合、デフォルトパラメータは必ずデフォルトパラメータの右側に配置することもできます

デフォルト値は、変数、クラスメンバー、関数呼び出しなどではなく、定数式である必要があります。

<?phpfunction makecoffee($type = "cappuccino"){    return "Making a cup of $type.\n";}echo makecoffee();echo makecoffee(null);echo makecoffee("espresso");?>
ログイン後にコピー

配列配列と特殊なパラメータの使用も許可しますデフォルトパラメータとして NULL を入力します

<?phpfunction makecoffee($types = array("cappuccino"), $coffeeMaker = NULL){    $device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;    return "Making a cup of ".join(", ", $types)." with $device.\n";}echo makecoffee();echo makecoffee(array("cappuccino", "lavazza"), "teapot");?>
ログイン後にコピー

可変数のパラメータ

PHP 5.6 以降では、... 構文を使用して可変数のパラメータリストを実装できます

<?phpfunction sum(...$numbers) {    $acc = 0;    foreach ($numbers as $n) {        $acc += $n;    }    return $acc;}echo sum(1, 2, 3, 4);?>
ログイン後にコピー

PHP 5.5 以前では、func_num_args()、func_get_arg( ) と func_get_args() を使用できます

func_num_args() はパラメーターの数を返します

<?phpfunction foo(){    $numargs = func_num_args();    echo "Number of arguments: $numargs\n";}foo(1, 2, 3);   ?>
ログイン後にコピー

func_get_args() は関数パラメーターのリストを含む配列を返します

<?phpfunction sum() {    $acc = 0;    foreach (func_get_args() as $n) {        $acc += $n;    }    return $acc;}echo sum(1, 2, 3, 4);?>
ログイン後にコピー

func_get_arg() はパラメーター リスト内の項目を返します。パラメーターは次から始まります0

<?phpfunction foo(){     $numargs = func_num_args();     echo "Number of arguments: $numargs<br />\n";     if ($numargs >= 2) {         echo "Second argument is: " . func_get_arg(1) . "<br />\n";     }}foo (1, 2, 3);?>
ログイン後にコピー
戻り値

return を省略した場合、戻り値は NULL になります

関数は複数の値を返すことはできませんが、配列を返すことで同様の効果を得ることができます

変数関数

これは、変数名の後に括弧がある場合を意味します, PHP は、同じ名前の変数関数と同じ値を探して実行しようとします

<?phpfunction foo() {    echo "In foo()<br />\n";}function bar($arg = '') {    echo "In bar(); argument was '$arg'.<br />\n";}// 使用 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()?>
ログイン後にコピー
匿名関数

匿名関数 (匿名関数) はクロージャとも呼ばれ、指定された名前なしで関数を一時的に作成できます。コールバック関数の引数として最も一般的に使用される値。

<?phpecho preg_replace_callback('~-([a-z])~', function ($match) {    return strtoupper($match[1]);}, 'hello-world');// 输出 helloWorld?>
ログイン後にコピー

匿名関数を変数に代入し、最後にセミコロンを追加します:

<?php$greet = function($name){    printf("Hello %s\r\n", $name);};$greet('World');$greet('PHP');?>
ログイン後にコピー

クロージャは親スコープから変数を継承できます。 このような変数は、 use 言語構造体

<?php$message = 'hello';// 没有 "use"$example = function () {    var_dump($message);};echo $example(); // NULL// 继承 $message$example = function () use ($message) {    var_dump($message);};echo $example(); // hello// Inherited variable's value is from when the function// is defined, not when called$message = 'world';echo $example(); // hello// Reset message$message = 'hello';// Inherit by-reference$example = function () use (&$message) {    var_dump($message);};echo $example(); // hello// The changed value in the parent scope// is reflected inside the function call$message = 'world';echo $example(); // world// Closures can also accept regular arguments$example = function ($arg) use ($message) {    var_dump($arg . ' ' . $message);};$example("hello"); // hello world?>
ログイン後にコピー

を使用して渡される必要があります。 著作権表示: この記事はブロガーによるオリジナルの記事であり、ブロガーの許可なく複製することはできません。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート