PHPの絵本

[PHPの絵本　第２版　Webアプリ作りが楽しくなる新しい9つの扉](https://www.amazon.co.jp/dp/4798151645/ref=pd_lpo_sbs_14_t_1?_encoding=UTF8&psc=1&refRID=TG7E0QSMPA0Z78R4XJW6)
出版社：翔泳社
発売日：2017/4/13

#プログラミングの基礎
##インクリメント演算子・デクリメント演算子
**++**(インクリメント演算子)
**--**(デクリメント演算子)
前置、後置によって出力結果が異なることがあるので注意する。

##関数
関数とは渡された値を処理し、結果を出力するもの。
処理する対象→引数（パラメータ）　　結果の値→戻り値（返り値）
という。
###コールバック関数
関数名を引数に渡して、その関数自体を呼び出す。
関数の引数に関数を使いたい時に使う。
###無名関数（クロージャ）
関数の名前を省略したもの。

```
function Hello(){
    print "こんにちは";
}
function callfunc(callable $f){
    $f();
    print"○○さん";
}
callfunc("Hello");
```
結果
`こんにちは〇〇さん`

###便利な関数
- `isset($a)`:変数に値がセットされているかを判定する。
- `empty($a)`:変数が存在しないとき、変数の値が0のとき、falseのときにtrueを返す。
- `unset($a)`:変数がセットされてない状態にする。

#配列
箱が並んでいるもの
`array=[1,2,3]`
`array(0=>1,1=>2,2=>3)`
上記２つは同じいみ。

```
$a="cat"
echo $a[0]
```
【結果】c

#ファイルの読み込み
|関数|回数|失敗した時のメッセージと処理|
|:---|:---:|--:|
|`require`|制限なし|エラーメッセージが表示される。処理は中止。|
|`require_once`|１回のみ（２回目はスキップ）|エラーメッセージが表示される。処理は中止。|
|`include`|制限なし|警告メッセージ表示。処理は続行。|
|`include_once`|一回のみ（２回目はスキップ）|警告メッセージ表示。処理は続行。|

#変数
###変数のスコープ
変数の有効範囲。
**ローカル変数**：変数を定義した関数の中のみ。
**グローバル変数**：変数の前に`global`をつける。PHPスクリプト全体。
###static（静的関数）
ローカル変数は関数を呼び出すごとに値が初期化されているが、静的変数にすると前に呼び出した時の値が残る。
###無名関数（クロージャ）
関数の名前を省略したもの。変数に入れておいて、あとで呼び出すことができる。

#正規表現
###POSIX拡張正規表現
PHP5.3.0で非推奨となり、PHP7で削除された。
###Perl互換正規表現
preg系関数で使える。  
**preg_match()関数**：対象の文字列がパターンマッチしたら1、マッチしなかったら0を返す。マッチした箇所を取り出して配列として格納することもできる。
`preg_match("/[A-Z]{3}/","Hello PHP."`,$array)`
返り値は0,$array[0]="PHP"が格納される。
**preg_replace()関数**：置換する。
**preg_split()関数**：正規表現に該当する箇所で文字列を分割する。

#文字に関する関数
**strtolower()**：大文字を小文字にする。
**strtoupper**：小文字を大文字にする。
**trim()**：空白を削除する。
**explode(区切り文字,文字列)**：文字列を区切り文字で切り分け、配列に格納する。返り値は配列の値。
**implode(連結文字,配列)**：連結文字で配列の要素同士を連結していく。
#HTMLに使う関数
**strip_tags(対象の文字列,消したいタグ)**：タグを消す。
**nl2br()**：改行コードの前にHTMLの改行コードを挿入する。

#インターネットとの連携
###セッション
サーバのメモリ領域。
###クッキー
クライアント
###セッション管理

#ファイルハンドリング
基本処理の流れ
1. ファイルを開く`$fp=fopen(ファイル名,"モード")`ファイルオープンに成功すると$fpにファイルの情報が格納される。
2. 書き込む`fputs($fp,"書き込む文字列",バイト数)`
3. ファイルを閉じる`fclose($fp)`
4. ファイルを削除する`unlink("ファイル名")`

#DB
RDBMS：リレーショナルDB管理システムというソフトウェア
SQL：RDBMSに命令するときの言語
SQLite(=RDBMS)がPHP5.3.0以降に標準で組み込まれている。
###基本の操作
1. DBを作成`$新しいDBの名前=new SQLite3("DBファイル名")`
2. SQL文で操作を書く`$query=SQL文`
3. 実行する`$result=$作成したDB名->exec($query)`
4. 接続を切る`$DB名->close()`

#おまけ
###電子メールを送信する
**php.iniの設定をする**
php.iniの設定を書き換える。

```
SMTP = mail.XXX.co.jp
sendmail_from = 送信元アドレス
```
**mb_send_mail()関数**
日本語でメールを送信する時に便利。
送信に成功するとtrue、失敗するとfalseが返る。
`mb_send_mail("送信先のメールアドレス","件名","本文")`

# 名前空間
クラス、インターフェース、関数、定数のグループ。
名前空間を定義するとライブラリなどで名前が超hくしても区別できるようになる。
 **名前空間の定義**
phpコードの先頭に書く。
`namespace 名前空間A` もしくは `namespace dir¥名前空間A`
**参照**
`名前空間A¥関数()`

毎回名前空間を指定するのは大変なので、`use`でインポートしておくこともできる
`use dir¥名前空間A`と書いておくと、あとは`関数名`のみの呼び出しで大丈夫。

# ジェネレータ
関数から次々に値を取り出すことができる仕組み。

# クラス
共通の要素（プロパティ・メンバ）をもち、種類がたくさんあるものなんても。
例）ドレス
ドレスには「名前」と「生地」という共通の要素をもつ。
↓コードで表す

```
class Dress{
    public $name;//ドレスは「名前」をもつ
    public $material;//ドレスは「生地」の種類が存在する。
}
```

ルビーのために新しく詳細を入れる箱を作る
newでできた変数（この場合は$Ruby）はオブジェクトといい、型はオブジェクト型になる。

`$Ruby=new Dress;`

　ルビーの「名前」はruby、「生地」はsilk

```
$Ruby->$name = "ruby";
$Ruby->$material = "silk";
```
オブジェクトの中の変数（メンバ・プロパティの値）を参照するときは->を使う。

```
class Dress{
    public $name;//ドレスは「名前」をもつ
    public $material;//ドレスは「生地」の種類が存在する。
}
$Ruby=new Dress;
$Ruby->$name = "ruby";
$Ruby->$material = "silk";
$Diamond=new Dress;
$Diamond->$name = "diamond";
$Diamond->$material = "cotton";
$Gold=new Dress;
$Gold->$name = "gold";
$Gold->$material = "hoge";
print
$Ruby->$name."の素材は".$Ruby->$material;
$Diamond->$name."の素材は".$Diamond->$material;
$Gold->$name."の素材は".$Gold->$material;

```

上記のように1行ずつ書くのを、下記のようにもできる。

```
class Dress{
    public $name;//ドレスは「名前」をもつ
    public $material;//ドレスは「生地」の種類が存在する。
    public function printdate(){    //表示する関数
        print $this->$name."の素材は".$this->$material;
    }
}
$Ruby = new Dress;
$Ruby->$name = "ruby";
$Ruby->$material = "silk";
$Diamond=new Dress;
$Diamond->$name = "diamond";
$Diamond->$material = "cotton";
$Gold=new Dress;
$Gold->$name = "gold";
$Gold->$material = "hoge";
$Ruby->printdate();//クラスの中の関数を呼び出す
$Diamond->printdate();
$Gols->printdate();
```

このとき、クラスの中で作られた関数を**メソッド**といい、
同じクラスの中のメンバを使うときは**$this**を使う。

### コンストラクタ・デストラクタ
コンストラクタ：オブジェクトがnewされるのと同時に呼び出されるメソッド。`__construct()`
デストラクタ：オブジェクトが消滅するときに呼び出されるメソッド。`__destruct`
後始末をするときに使われる。

```
class Piyo{
    public $a;
    public $b;
    public funtion __construct($n,$m){
        $this->a = $n;
        $tshi->b = $m;
    }
}

$deko = new Piyo($nに入れたい値,$mに入れたい値);
```

###クラスの継承
クラスにA何か手を加えたい。けど別でクラスAを使っていてそこが変わってしまうのは困るときに使う。
元のクラスAをアレンジしてクラスBを作りたいときにクラスAを**継承**する必要がある。
継承すると、Bのメンバもそのまま使える。でも再定義したいときは親クラスのメソッドやメンバの名前をそのまま使って上書き(**オーバーライド**)できる。ただし、先頭に`final`と書かれているときは上書きできない。

```
class B extends A{
    アレンジしたいことをかく。
}
```

### Exception
例外の機能をパッケージ化したクラス

 ### pear/pecl
拡張モジュール、アプリケーションが記述されたライブラリ