Help us understand the problem. What is going on with this article?

PHPの基本文法 -関数の引数について-

More than 1 year has passed since last update.

PHPの基本文法 -関数の引数について-

PHPの関数について、整理してみました。

関数とは

変数は値を入れておく箱でしたが、関数は幾つかの処理をまとめて入れておくものです。
関数には、最初から用意されている「組み込み関数」と、自分で定義する「ユーザ定義関数」があります。

「組み込み関数」とは、プログラミング言語などの仕様にあらかじめ用意され、標準で使用できる関数のことを言います。
例えば、isset()isNull()empty(), var_dump()などがそれに当たります。

逆に「ユーザー定義関数」とは、ユーザーが作成した関数のことを言います。
例えば、

<?php

function func()
{
    echo "Test";
}

func();

?>

引数について

引数は、関数を呼び出すときに渡す値です。
関数の中では、その値を使用して処理を行い、必要に応じて結果を返します。
PHPの関数は引数のリストにより、関数へ情報を渡すことができる。
このリストは、「,](カンマ)で区切られた式のリストです。
引数の評価は、左から右の順番で行われます。

「値渡し」と「参照渡し」について

引数には、「値渡し」と「参照渡し」があります。
「値渡し」は、変数のコピーを渡す方法で、関数側で変数の内容を変更しても、元の変数には影響しない。
「参照渡し」は、変数への参照を渡す方法で、関数側で変数の内容を変更すると、呼び出し側の変数も同様に変更される。

//引数「string」を「参照渡し」する関数
function add_str(&$string)
{
    $string = 'Hello ' . $string;
}

$str = 'World';
add_str($str);
echo $str;  //Hello Worldが出力される

デフォルト引数値

デフォルト引数値は、引数の既定値です。デフォルト引数値を指定するには、関数の定義において、代入演算子の「=」を使用して、引数にデフォルト値を指定する。PHPでは、配列やNULLをデフォルト値にすることもできる。

function hello($str = "world")
{
    return "Hello $str! <br/>";
}

echo hello();       //Hello world
echo hello(null);   //Hello !
echo hello("Tom");  //Hello Tom!

デフォルト引数値を使用する時の注意点
デフォルト引数値は、定数式である必要がある。変数やクラスのメンバーは指定することができない。
またデフォルト引数値を有する引数は、デフォルト引数値がない引数の右側に全てある必要がある。

//間違った例
function greet1($str = "Hello", $name)
{
    return "$str $name ! <br/>";
}
//第2引数を省略して関数をコールすることはできない
echo greet1("Tom");


//正しい用例
function green2($name, $str="Hello")
{
    return "$str $name! <br/>";
}

//第2引数を省略して関数をコールすることができる
echo greet2("Tom");

可変長引数リスト

可変長引数リストは、引数の数が変わる関数を定義するためにサポートされている機能です。
可変長引数リストと使用するには、「func_num_args」関数と「func_get_args」関数を使用する。
サンプル↓

<?php
function avg()
{
  $sum = 0;
  for($i = 0; $i < func_num_args(); $i++){
    $sum += func_get_arg($i);
  }

  $avg = $sum / func_num_args();
  var_dump($avg);
  return $avg;
}
echo avg(2,1,2,1,3,4,5,3,6);
?>
rspmharada7645
エンジニア6年目に突入。 仕事はフルスタックエンジニア でインフラ(AWS)構築経験3年以上。 言語:HTML/CSS/JavaScript/PHP/MySQL/postgresSQL/TypeScript/ C/C++ (基本なんでもいける) FW:React/Vue/AngularJS/Cordova/ReactNative/CakePHP/Laravel/ZendFWなど。。。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away