phpの基本文法


- 試す環境を作る
- 書き方
- ループ文
- callable

などについて。


#試す環境を作る

とりあえず作りたいときは `*.php` ファイルを作る。

#書き方

```
<?php

echo "hello;
```

`echo` は「出力する」

##改行したいとき

`PHP_EOL` を使う。

##実行

ターミナルで以下のようにしてファイル内のphpが実行される。

```
php hoge.php
```

##デバッグ

`var_dump $hoge;`

##変数

`$hoge` のように `$` を使う。

###名前の付け方

- キャメルケース `$thisIsAPen`
- スネークケース `$this_is_a_pen`

どちらでも良いが、統一すること。

##型

phpでは文字列が使える。

###基本的な型

phpは変数の中にどんな型でも入れることができる。
型名は大文字・小文字を統一すること。

```
$hoge = 123;
$hoge = "123";
$hoge = true;
$hoge = false;
$hoge = NULL;
```

ので、どの型なのかをちゃんとチェックしておくこと。

##配列

###リスト配列

keyが一致してないと（下記の場合だと[4]とか）Exceptionが吐き出される。

```
$array = array("lemon", "apple", "banana");
echo $array[1] . PHP_EOL;
```

###連想配列

他の言語で言うところのマップ。

```
$array = array(
	"lemon" => "yellow",
	"apple" => "red",
	"banana" => "yellow",
);
```

###メジャーな配列の書き方

`array()` は少し古い。
今は `[]` を使うのが主流。

```
$array = [
	"lemon" => "yellow",
	"apple" => "red",
	"banana" => "yellow",
];
```

###配列の結合

前にある方が優先される。

#### `array_merge`

この時は後の配列が優先される。

###配列を削除

```
$user = [
	"0" => "Tom",
	"1" => "Katy",
	"2" => "Jim",
	"3" => "Mary",
];
```

について

```
unset($user[1]);
```

こうすることで連想配列の `key` が `1` のものが削除される。

####注意点

`[1]` のものが削除されたからといって、 `key` は繰り上がらないことに注意。

```
$user = [
	"0" => "Tom",
	"2" => "Jim",
	"3" => "Mary",
];
```

##結合

phpではあまり結合演算子を使わない。
変数を使用する。

```
<?php

$name = "Tom";

$string = "Hello World, $name!";

echo $string . PHP_EOL;
```

##クォーテーション

`""` だと変数だと認識、 `''` だと文字列だと認識されてしまう。

##複雑な変数の場合

- 変数のすぐ後ろに文字列をつけたい
- 連想配列を使いたい

というときに関しては `{}` で囲ってあげることで変数を認識してもらえるようになる。

```
<?php

$name = "Tom";

$string = "Hello World, {$name}さん";

echo $string . PHP_EOL;
```

```
$string = "Hello World, {$name[1]}さん";

echo $string . PHP_EOL;
```

##コード規約・コメント


開始 `{}` は落とす、のが標準的な規約。
コメントは `//` か `##` が使えるが、 `//` が一般的。
その他規約については `PSR` で検索。

```
public function hoge()
{
	//
	##
}
```

#ループ文

## `if`

```php:hoge.php
<?php
$hoge = 1;

if($hoge){
	echo "trueです。------------------" . PHP_EOL;
}else{
	echo "falseです。■■■■■■■■■■■■■■■■■" . PHP_EOL;
```

###値が○○のとき

####123のとき

true

####0のとき

false

####["hoge"]のとき

true

####[]のとき

false

## `イコール` の使い方

###厳格な検証 `===`

```php:hoge.php
<?php
$hoge = "124";

$piyo = 124;

if($hoge === $piyo){
	echo "trueです。------------------" . PHP_EOL;
}else{
	echo "falseです。■■■■■■■■■■■■■■■■■" . PHP_EOL;
```

####結果

false

###ゆるやかな検証 `==` 

「だいたい一緒」という感じの検証となる。
できるだけ上記の `===` を使うほうがよい。

```php:hoge.php
<?php
$hoge = "";

$piyo = 0;

if($hoge == $piyo){
	echo "trueです。------------------" . PHP_EOL;
}else{
	echo "falseです。■■■■■■■■■■■■■■■■■" . PHP_EOL;
```

####結果

true

### `=` を使う場合

「代入する」の意味。

# `foreach`

```php:hoge.php
<?php
$list = ["apple", "lemon", "banana"];

foreach ( $list as $key=> $value ) {
	echo "({$key}){$value}" . PHP_EOL ;
	if($key === 1 ){
		break;
	}
}
```

`foreach` を使ってるからといって **必ずしも配列ではない** ということに注意。
オブジェクトだって回せる。

##  `for`

```php:hoge.php
<?php
$list = ["apple", "lemon", "banana"];

foreach ( $list as $key=> $value ) {
	for($i = 0; $i < 3; $i++){
		echo "({$key}){$value}" . PHP_EOL ;
		if($key === 1 ){
			break;
		}
	}
}
```

# `callable`

関数を実行する関数。

```php:hoge.php

$sayHello = function(){
	echo "hello {$name}" . PHP_EOL;
};

call_user_func($sayHello, "Tom");
call_user_func($sayHello, "Bob");
```