PHP

## はじめに
PHPの備忘録です。
過去に自己学習でまとめたメモを最近友人に共有したので
どうせならQiitaにもあげようと思い至りました

私個人は普段PHPを書いていません x



## 基本編

phpは文末に`;`が必要

## 変数

```php
$sample = 1;
```

## 定数

```php
const SAMPLE = 1;
```

## 配列

```php
$array = [1,2,3,4,5];

$names = array('雨', '雪', '晴')

$array[] = 6 // 配列の最後に追加

array_push($array, 7) // 配列の最後に追加(複数追加可能)

array_pop($array) // 最後を削除

array_shift($array) // 最初を削除
```

## オブジェクト

```php
$scores = array(
  "数学" => 70,
  "英語" => 90,
  "国語" => 80
);

$scores["国語"] += 5;

echo $scores["国語"];
```

## 条件分岐

```php
$sample = "田中";

if ($sample === "田中") {

  echo "田中です";

} elseif ($sample === "山田") {

  echo "山田です";

} else {

  echo "誰だかわかりません"

}
```

## 繰り返し処理

```php

// for文
for ($i = 1; $i <= 100; $i++) {}

//while文
$i = 0;
while ($i < 10) {
  echo $i
  i++;
}

  

// foreach
$ns = [1,2,3,4,5]

foreach ($ns as $n) {
  echo $n
}

  

foreach ($ns as index => value) {
// 連想配列ならindexにkeyが入る
// indexは省略可能
}


```

## 繰り返し制御

`for`や`if`と組み合わせて使う

```php
// 処理を中断する
break
// スキップする
continue
```

## 三項演算子

```php
// 条件式 ? trueの時: falseの時

const val1 = 1 > 0 ? "trueです" : "falseです";

console.log(val1); // trueです
```

## テンプレートリテラル

*式展開*

```php
let $name = "いちご";
let $cost = 100;
echo "{$name}は{$cost}円です"
```

## 例外処理

```php
try() {

} catch() {

}
```

---
---
---

## 基本編2



## switch

ifが複雑になる時に使う

```php
$num = tee;

switch($tee) {
  case "baru":
    echo "baruです";
    break;
  default:
    echo "野良です";
    break;
}
```

## 関数

```php
// jsの関数宣言と一緒
function add(n1=1, n2=2) {
  echo n1 + n2
}

add()
```

## 組み込み関数

```php
strlen('Apple'); // 文字列の長さを返す
count($array); // 配列の長さを返す
rand(1, 4); // 指定の範囲の中でランダムな数字を返す

max($array) // 最高値
array_sum($array) // 合計値

floor(num) // 小数点以下切り捨て

($bob instanceof Person)
```

## end ○○ 構文

*`foreach`をHTMLに埋め込む際に特殊な書き方ができる*
*可読性を上げることができる*

```php
<?php $words = array('apple', 'banana', 'orange'); ?>

<?php foreach ($words as $word): ?>
  <p><?php echo $word ?></p>
<?php endforeach ?>
```

```php
// ifも同様
<?php if($age >= 20): ?>
  // 処理
<?php endif ?>
```

```php
// for
<?php for ($i = 0; $i < 100; $i++): ?>
  // 処理
<? php endif ?>
```

## クエリパラメータ

クエリ情報

```php
//?hogeで繋げて指定できる
<a href="show.php?name=<?php  ?>">

// 遷移先では下記のように受け取る
echo $_GET['name']

// 下記のようなオブジェクトで渡ってくる
array (
  'name' => 'HOGE'
)
```

## ファイルの分割

```php
// 下記で読み取り可能
<? require_once('data.php') ?>
```

```php
// 下記で分けると良さそう
- classの定義
- インスタンス化
- mainのファイル
```

---
---
---

## Class



```php
class Person {
  // プロパティは初期値の設定もできる
  // 子クラスからも参照する場合protectedにする
  private $name;
  public $age;
// protected $tall

  public function __construct($name, $age) {
    $this->name = $name;
    $this->age = $age;
  }
  
  public function hello() {
    echo '私は'.$this->name.'です'.$this->age.'です'。
  }
}

// インスタンス化
$bob = new Person("bob", 18)

// ->でプロパティにアクセス (属性/メンバ変数)
$bob->age = 22

echo $bob->hello()
```

## 継承

親クラスのプロパティとメソッドを引き継ぐ

```php
class Man extends Person {
  // 独自のプロパティも定義可能
  public $tall;

  public function __construct($name, $age, $tall) {
  // 親クラスのメソッドを呼び出す
    parent::__construct($name, $age)
    $this->tall = $tall
  }
}

// 親クラスのメソッドを利用
echo $bob->hello()
```

## staticプロパティ・メソッド

クラスメソッドのこと

```php
class Person {
  // staticをつける
  private static $count = 0 // 初期値省略可
  
  public function __construct() {
    // selfはクラス自身を指す
    // 初期化のたびにcountがupする
    sefl::$count++;
  }
  
  // staticをつける getter
  public static function getCount() {
    return self::$count
  }
}

// publicなら下記でstaticプロパティにアクセス可能
Person::$count.'品'
echo Person::getCount()
```


## カプセル化

ユーザーに必要な部分を隠して触らせない
クラスのプロパティとメソッドへのアクセスを制限すること

```php:getter
// プロパティをprivateにすると値を参照できない
// getterメソッドを定義して参照できるようにする
public function getName() {
  return $this->name;
}
```

```php:setter
public function setName($name) {
  $this->name = $name
}
```

## 終わりに
BASIC認証やformの書き方もまとめているのですが、長くなってしまうので基本の部分のみ投稿しました。