PHPの変数と関数について。初学者がなんとなく理解するに至ったイメージ

## 前書き
変数と関数について解説していきます。
バックエンドでPHPが一番最初に触れることが多いかと思います。
前知識がない状態で記事などをみても、「変数　関数　クラス...」と言われても意味がわからないはずです。
現場にでて理解するに至ったイメージや考え方を残します。理解しやすそうな順序で書いたつもりです。
色々な記事を見て、そんな説明でわかるか！となったので、よくある記事とは違う角度で説明できたらと。

## まずは変数。
PHPにおける変数とは。。。
```php:index.php
<?php
$hensuu
?>
```
これです。
「＄」マークがついているものは変数です。
変数はなんでも入れられる便利なシステムです。複数いれたりもできます(配列といいます)。
数字だったり文字だったり。しかも入れた数字で四則演算もできます。
。
こんな感じで入れます。$〇〇には好きな名前をつけてあげてください。
```php:index.php
<?php
$xxx = "こんにちは";
$yyy = 1;
$zzz = "123";
?>
```
(ルールとして、""で囲まれたものは文字（正式名称：文字列）。""で囲まれていないものは数字。上記の＄yyyは数字として四則演算につかえます。＄zzzは文字扱いされて四則演算できません。)

「＝」の左に$変数を書いて、右側に何を入れるか記述します。
変数になにかしら入れることを、「変数を定義する」と言います。自分で好きな数字入れたり。データベースから持ってきて入れたり。


じゃあ、変数に入れてどうすんだ。入れっぱなしかよ。となりますがhtmlと合わせて使うことができます。
たとえば
```php:index.php
<?php
$xxx = "田中さん"
echo "<p> $xxx </p>";
?>
<!--上記は<p>田中さん</p>と同じです。-->

```
＄xxxに「田中さん」と言う文字が代入され、echoと言う命令文で$xxxを持ったまま　index.phpファイルに出力されます。

### 具体例
Xでログイン(IDとパスワードで本人確認)したら、DBから自分の情報をひっぱてきます。
そのひっぱてきたデータを変数に入れて画面上に表示している。こんなイメージです。
userというデータベースがあって、自分の名前やらTwitterIDやら自己紹介やらパスワードが一緒くたに保存されてるような感じです。


## 関数
関数とは...
```php:index.php
kansuu()
```
kansuu()
これです。最後に()がついていたら関数です。

関数は、「定義」と「実行」がセットです。それぞれ解説します。
### 関数の定義
```php:index.php
function kansuu() {
    echo "<p> 関数です </p>";
}
```
この３行かけて、関数を定義しております。

function でこれから関数を定義するぜ。と宣言し
kansuu()　その直後に関数の名前を宣言します。自分で好きな名前がつけられます。
{} の中に処理を書きます。


### 実行
```php:index.php
<?php
function kansuu(){
 echo "<p>関数です</p>";
}
kansuu();//この１行が関数の「実行」です
         // <p>関数です</p>が,index.phpに書き込まれます。

//echoの解説
//echo "この中の文章がindex.phpのファイルに書き込まれます";
?>
```

### 引数と戻り値
関数について調べた方は、引数と戻り値（返り値）って言葉を聞いたことがあるかと思います。
引数は関数の処理の中で使う値です。kansuu()を使う時に()の中に好きな値を入れて実行する時に使ってくれます。
戻り値は関数でなんやかんやして、最終的に用意させる(返してもらう)値です。

私は戻り値にかなり苦しみました。どこからどこに戻るって意味？戻るって日本語変じゃない？と全く理解できなかったです。

### 簡単な例
この二つの数字で足し算して！答えを戻して！（返して！）みたいな感じです。
渡した二つの数字が、引数
用意して欲しい計算結果が、戻り値
返してだの戻してだの日本語のニュアンスがなんか違和感あるんですけど、英語の文献をむりやり日本語にしたからなんですかね。これはそう言うものなんだ...と自分に言い聞かせました。

### 引数と戻り値の具体例を書いてみる
```php:index.php
<?php
function tasizan($a, $b) {
    return $a + $b;
}
//この関数の引数は　$aと$b
//戻り値は　$a + $b　足し算して計算結果を返してくれます。

//実際にこの関数を使ってみる
$result = tasizan(3, 4); //引数に３と４を渡しつつ、実行。
//関数の戻り値が$resultに挿入される。
echo $result;//echo 7;となる
```


引数戻り値の現場での使い方でいうと、inputに入れた名前や住所などを引数として関数に渡す。
その関数がデータベースに登録してくれる。登録の成功失敗が「戻り値」で返され、登録成功か失敗かが画面に標示される。

## ちょっと詳しく引数
```php:index.php
function tasizan($a, $b) {
    return $a + $b;
}
// ３は$aに　４は$bに
```
()の中の引数が二つあります。
これは関数実行時に()の中に入れた位置と同じ場所に挿入されます
下記の実行では、3がaに　４がbに入ります。()内で同じ位置にいる変数ですね。
```php:index.php
$result = tasizan(3, 4); 
```


これらは左から順に　第一引数　第二引数　と呼ばれます。何個も使えます。第n引数みたいな。
アカウントを作るのに名前、住所、メアド、パスワードなどなど...登録情報が多い場合、関数の引数の数もそれなりに多くなります。



## ちょっと詳しく戻り値
関数は戻り値を返す場合と返さないものがあります。
最後にreturnがあったら戻り値ありです。


数字を渡したら５倍にしてくれる関数を定義します。
```php:index.php
function kansuu( $aaa ) {
    $keisannkekka = $aaa * 5;
    echo $keisannkekka;
}
kansuu(5); //25　がechoされます
```
これは戻り値なしです。ただ計算結果を出力するだけです。
値を用意してくれる。ではなくて、「渡した数字を計算してecho」がこの関数の仕事です。

```php:index.php
function kansuu( $aaa ) {
    $keisannkekka = $aaa * 5;
    return $keisannkekka;
}
$result = kansuu(5); 
echo $result;
```
これは関数に戻り値を用意させています。結果は同じですが、この関数の仕事は「渡した数字を計算して戻して終わり」です。



現場で見たのは、
- データベースに登録して処理完了！って感じの関数は戻り値なし
- DBからデータを取得。その後、画面表示用に整えてくれる関数は、整えたデータをreturn（戻り値あり）


### あくまでイメージの話ですが...
カレー作って、持ってきて。　で持ってきてくれたカレーが戻り値。
なんやかんやした結果を、持ってきてくれる（返してくれる。戻してくれる。渡してくれる。）

カレー作って。　で終わるのが戻り値なし。
作って鍋にあるだけです。なんやかんやした結果がそこにあるだけ。

カレーつくって、ってお願いした時に渡す具材や道具が引数で、出来上がって持ってきてくれたカレーライスが戻り値です。つくり起きなら戻り値なし。先輩にされたこの説明が自分にとっては救いでした...


### ちょっとした補足
さっきのtasizan関数だと引数に文字を渡すとエラーが起きるはずです。文字と文字じゃ足し算できないよ...と文句言われます。
関数定義の時に引数は数字しか受け付けませよー。と言う記述もできます。
```php:index.php
function tasizan(int $a, int $b) {
    return $a + $b;
}
//引数の左側に型を記述したらOKです。
//int　と言うのは数字　逆に文字はstring
//この数字だの文字だの変数のルール的なものを「データ型」といいます。
```

## あとがき
以上が変数と関数のお話です。
なるべく専門用語は使わず書いたつもりです。
調べ物してると、欲しい情報はそこじゃない！となることが多かったので理解に苦しみました。
現場に出てみて、理解が進んだ考え方やイメージを記録に残したつもりです。まだ初学者の域にいるような者が書いた稚拙な文章なので間違いがあった場合は申し訳ございません。ご容赦ください。


自転車ってなに？って調べたら
「英語では　バイシクル　と言われ、サドルにまたがりハンドルを操作し、ペダリングすると前に進む乗り物である。」
自転車知らない人がこの説明読んで、なるほど！とはならないですよね。自転車を調べてる人はサドルもペダルもしらねーよ！となるはずです。
初学者にとってSEの記事はこのように見えるはずです。知らない単語の説明に知らない単語がいっぱい...
自転車はこれです。って実物見せてもらって、乗ってるとこ見るのが一番はやく理解が進むことでしょう。

一つの概念の理解に結果から提示し文字数はなるべく少なくしたつもりです。これらを意識して、他のこともまとめていけたらと思います。
次はクラスについて書く予定です。