PHPで文字列と数値を「足す」もしくは「連結」するとどうなる？の話

# 本題に入る前に
本題に入る前に前提知識として話しておきたいことがあります。

## 本記事作成時のPHPのバージョン

```
php -v

// => PHP 7.3.9 
```
## PHPの文字列
phpで変数に文字列を代入して表示する際

```php
<?php
$hoge = "Hello PHP";
echo $hoge;             // Hello PHP
```
このように書いていきますよね。

### 文字列の連結
文字列の連結は

```php
<?php
$hoge1 = "Hello";
$hoge2 = "PHP";
$hoge3 = $hoge1 . $hoge2;
echo $hoge3;             // HelloPHP
```
このようにやっていきます。

## PHPの数値
同じように数値も

```php
<?php
$number = 1;
echo $number;             // 1
```
このように書いていきますよね。

### 数値の連結
数値の連結は以下のようにやります。

```php
<?php
$number1 = 1;
$number2 = 4;
$number3 = $number1 . $number2;
echo $number3;             // 14
```
数値なので+を使うとどうなるか

```php
<?php
$number1 = 1;
$number2 = 4;
$number3 = $number1 + $number2;
echo $number3;             // 5
```
シンプルに足し算しています。

# 本題
ではここからが本題です。

## PHPで文字列と数値を足すとどうなると思いますか?
![](https://cdn.pixabay.com/photo/2017/02/24/10/18/error-2094395__340.jpg)
そんなのエラーになるに決まっているだろ!!

そう私は思っていました。

## エラーが起きない！！
![](https://cdn.pixabay.com/photo/2016/03/31/23/19/business-1297532__340.png)
まさかのエラーは起きずでした😳😳
### 試したパターン
---
##### 足す
- 文字列と数値を足す
- 文字列の前に数字を入れてみる
- 文字列の途中もしくは後ろに数値を入れてみる

##### 連結
- 文字列と数値を連結
- 文字列の前に数字を入れてみる
- 文字列の途中もしくは後ろに数値を入れてみる

---
### 文字列と数値の足し算
### 1. 文字列と数値を足す
まずは足し算からやってみましょう

```php
<?php
$hoge1 = "Hello";
$number1 = 1;
$hoge2 = $hoge1 + $number1;
echo $hoge2;             
```
さて結果は？？

```
1
```
となります😁

#### 2. 文字列の前に数字を入れてみる
次に文字列の前に数値を入れてみました。

```php
<?php
$hoge1 = "3Hello";
$number1 = 1;
$hoge2 = $hoge1 + $number1;
echo $hoge2;            
```
結果は？

```
4
```
どうやら文字の方は0として扱われて``3 + 1``の計算になっているようです。

#### 3. 文字列の途中もしくは後ろに数値を入れてみる

```php
<?php
$hoge1 = "He3llo";
$number1 = 1;
$hoge2 = $hoge1 + $number1;
echo $hoge2;
```
```php
<?php
$hoge1 = "Hello3";
$number1 = 1;
$hoge2 = $hoge1 + $number1;
echo $hoge2;     
```
いずれも結果は

```
1
```
となります。

---
### 文字列と数値の連結
### 1. 文字列と数値を連結
まずは足し算からやってみましょう

```php
<?php
$hoge1 = "Hello";
$number1 = 1;
$hoge2 = $hoge1 . $number1;
echo $hoge2;             
```
さて結果は？？

```
Hello1
```
となります😁

#### 2. 文字列の前に数字を入れてみる
次に文字列の前に数値を入れてみました。

```php
<?php
$hoge1 = "3Hello";
$number1 = 1;
$hoge2 = $hoge1 . $number1;
echo $hoge2;            
```
結果は？

```
3Hello1
```
となります。😁

#### 3. 文字列の途中もしくは後ろに数値を入れてみる

```php
<?php
$hoge1 = "He3llo";
$number1 = 1;
$hoge2 = $hoge1 . $number1;
echo $hoge2;
```
```php
<?php
$hoge1 = "Hello3";
$number1 = 1;
$hoge2 = $hoge1 + $number1;
echo $hoge2;     
```
いずれも結果は

```
He3llo1
```
となります。😁

## なぜ？？
### 別の言語でもみてみる
### JavaScript
```js
      let a = 1;
      let b = 2;
      let c = a + b;
      console.log(c);

      let d = 1;
      let e = "アイウエオ";
      let f = d + e;
      console.log(f);

      let g = 1;
      let h = "22アイウエオ";
      let i = g.h;
      console.log(i);
```
コンソール結果は以下のようになりました。
![スクリーンショット 2020-11-12 3.33.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712534/9f2dbf01-3222-586d-335c-e8a3730036f2.png)

javaScriptでは``+``で文字列の連結を行い、``.``で足し算などを行うので定義されていないという文言が出ております。

## 結論
これはPHPの仕様によるものらしい。
いろいろ調べたところ、PHPでは厳密な型を指定していないので状況に応じて、型変換が処理時に行われるようです。

実戦で役にたたなさそうですが、プログラミングを楽しむ。PHPを楽しむ。より理解するという意味でこの記事を書かせていただきました。

長くなってしまいましたが、みていただきありがとうございます。
## 参考サイト
- [PHP定数と変数](https://www.scollabo.com/banban/php/php_04.html)