PHPの引数、関数(初学者向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
MAMPをインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

https://www.youtube.com/watch?v=I9xgwLfNnD4&list=PLErg7aSNT21xAVbJAEWS1oxgGLL__ySK2


# バージョン
以下のバージョンで挙動を確認しました。

![スクリーンショット 2022-03-31 1.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/a3a83f23-1ba1-6e36-7d77-7d8531989048.png)

# 関数
```関数```とは英語で```function(機能)```と言います。
***関数はなぜ使うのかというと同じコードを何回も書くのは面倒臭い***ので
***1回定義して効率良くしていく***ために使います。

## 関数の書き方
```php
function 関数名(引数1,引数2,引数3, ...){
  //実行内容
return 戻り値;
}
```

まずは引数や戻り値なしで書いていきます。
実際に使う場面を想定すると、新しく人と知り合った時に自己紹介をします。
その際1回自己紹介したのに、また別の人と会った時にもう1回すると面倒ですよね。
何人も何人もとなると面倒です。
そこで自己紹介文を用意しておけば何回も自己紹介しなくて済みます。
ここで***2回以上使う、もしくは使うかもしれないコードが関数***です。

```php
function introduce(){
    echo "太郎です。<br> 埼玉県出身です。";
}

introduce();

//太郎です。
//埼玉県出身です。
```
```function```で***関数の宣言***です。functionの後のintroduceが***関数名***です。
```()```を入れて{}の中に実行する処理を書きます。
2回出力させる場合には
```php
function introduce(){
    echo "太郎です。<br> 埼玉県出身です。<br>";
}

introduce();
introduce();

//太郎です。
//埼玉県出身です。
//太郎です。
//埼玉県出身です。
```
## 引数
先ほど出た```引数```を説明していきます。
出会い系のマッチング、付き合いたい女性プログラムを例にしていきたいと思います。
女性のスペックと男性の理想をベースに書いていきます。
```php
//女性のスペック
$looks = "美人"; //見た目
$style = "おしゃれ"; //服装
$personality = "性格がいい"; //性格
$height = 170; //身長
$income = 800; //年収

//男性の求める基準
$men_looks = "美人"; //理想の見た目
$men_style = "おしゃれ";  //理想の服装
$men_personality = "性格がいい"; //
$men_height = 160; //希望身長
$men_income = 600; //年収



echo "見た目: ";
if ($looks === $men_looks) {
    echo $looks . "なので付き合いたい<br>";
} else {
    echo $looks . "なので付き合いたくない<br>";
}

echo "服装: ";
if ($style === $men_style) {
    echo $style . "な人なら付き合いたい<br>";
} else {
    echo $style . "なら付き合いたくない<br>";
}

echo "性格: ";
if ($personality === $men_personality) {
    echo $personality . "な人と付き合いたい<br>";
} else {
    echo $personality . "なら付き合いたくない<br>";
}


echo "身長: ";
if ($height < $men_height) {
    echo $height . "センチなら付き合いたい<br>";
} else {
    echo $height . "センチなら付き合いたくない<br>";
}

echo "年収: ";
if ($income < $men_income) {
    echo $income . "万円なら付き合いたい<br>";
} else {
    echo $income . "万円なら付き合いたくない<br>";
}

// 見た目: 美人なので付き合いたい
// 服装: おしゃれな人なら付き合いたい
// 性格: 性格がいいな人と付き合いたい
// 身長: 170センチなら付き合いたくない
// 年収: 800万円なら付き合いたくない
```
簡単に言うと、***美人で見た目がいい人と付き合いたいけど、
自分より年収があったり背が高い人は男の自尊心が傷つくから嫌だよ***ってプログラムです。

これを関数で使って作ってみます。

```php
//女性のスペック
$looks = "美人"; //見た目
$style = "おしゃれ"; //服装
$personality = "性格がいい"; //性格
$height = 170; //身長
$income = 800; //年収

//男性の求める基準
$men_looks = "美人"; //理想の見た目
$men_style = "おしゃれ";  //理想の服装
$men_personality = "性格がいい"; //
$men_height = 160; //希望身長
$men_income = 600; //年収

function woman_spec_check($desired_name, $spec, $man_like){
    echo $desired_name. ":";
    if ($spec === $man_like){
        echo $spec. "なら付き合いたい<br>";
    }else{
        echo $spec. "なら付き合いたくない<br>";
    }
}

//呼び出し側
woman_spec_check("見た目", $looks, $men_looks);
woman_spec_check("服装", $style, $men_style);
woman_spec_check("性格", $personality, $men_personality);
woman_spec_check("身長", (string)$height, (string)$men_height); // 文字列に変換
woman_spec_check("年収", (string)$income, (string)$men_income); // 文字列に変換


//見た目:美人なら付き合いたい
//服装:おしゃれなら付き合いたい
//性格:性格がいいなら付き合いたい
//身長:170なら付き合いたくない
//年収:1000なら付き合いたくない
```
呼び出し側の見た目などの部分が引数の
```$desired_name```です。それで ```echo $desired_name. ":"; ```で出力されます。
次の```$look```などは引数の```$spec```に該当します。```$men_look```などが```$man_like```に該当します。

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

```php
function 関数名($引数){
    //処理の実行
    return $返り値;
}

//関数の呼び出し

```

### 返り値を使う
今回は返り値を３人のテストの平均点を出します。

```php
//返り値
function test_score_Average ($scoreA , $scoreB , $scoreC){
    $average = ($scoreA + $scoreB + $scoreC)/3;
    return $average;  //averageが返り値 関数の値を出すことができる
    //returnより下は処理されない
}
//関数を呼び出す
$testAverage = test_score_Average(80,100,70);
echo "3人の平均点は". $testAverage. "点です。";

```





 # PHPが全くわからない人向けの記事
https://qiita.com/Hashimoto-Noriaki/items/3d89e79c1f031afc7b96

https://qiita.com/Hashimoto-Noriaki/items/9ba6af2960a6d8d6342f

https://qiita.com/Hashimoto-Noriaki/items/0d9b2f03ec165e3452b8

https://qiita.com/Hashimoto-Noriaki/items/dfb76d440a64eccba95d

https://qiita.com/Hashimoto-Noriaki/items/4110dd85452f224ce848

https://qiita.com/mackeyTA/items/069900b5c2366fb30e3a

# 参考資料
https://www.youtube.com/watch?v=F2nOTbKQoco&list=PLErg7aSNT21xAVbJAEWS1oxgGLL__ySK2&index=7