ぺちぱーのよくばりセット

### ■ はじめに
PHPまわりのブックマークやストックがいい加減増えすぎたので、個人的に整理したものです。なお付加価値のない当記事が『この記事は以下の記事からリンクされています』に挙がるのを避けるために、Qiitaの記事についてはリンクは切っています。あとPHPと直接は関係していないけれど下も好きなので挙げておきます。

+ [Stack Overflow発 プログラミングの隠語(ジャーゴン)30選 | A-Listers](https://tech.a-listers.jp/2012/07/25/new-programming-jargon/)

## ▼ 初心者向けのまとめは既にある
+ **初心者を戒めるPHP**
    + https\://qiita.com/tadsan/items/fb496e450fc27c8c4494
+ **PHP初心者は最低限これはやっとけ - 開発に入る前編**
    + https\://qiita.com/rana_kualu/items/95f0c8be51e8665015d5
+ [PHP: The Right Way](http://ja.phptherightway.com/)

## ▼ コーディングのアンチパターンのまとめも既にある
+ **モダンPHPアンチパターン**
    + https\://qiita.com/tadsan/items/157969b338fd8b782b21
+ **PHP: Clean Code (clean-code-php) 蜜柑薬**
    + https\://qiita.com/tadsan/items/c47eb327684530721e8a
+ **今日から始められるリファクタリング10選 (1)**
    + https\://qiita.com/nunulk/items/2323b0c30a2cbe5fdb0c
+ **今日から始められるリファクタリング10選 (2)**
    + https\://qiita.com/nunulk/items/3a0c4e71afdb14b09748
+ **今日から始められるリファクタリング10選 (3)**
    + https\://qiita.com/nunulk/items/8bee711d40e71c767eca

## ▼ 有名なライブラリやリソースのまとめも既にある
+ https://github.com/ziadoz/awesome-php

## ▼ デザインパターンのまとめも既にある
+ [PHPによるデザインパターン入門 - 目次 - Do You PHP はてな](http://d.hatena.ne.jp/shimooka/20141211/1418298136)
+ [GitHub - domnikl/DesignPatternsPHP: sample code for several design patterns in PHP](https://github.com/domnikl/DesignPatternsPHP)

## ▼ アルゴリズムのまとめも既にある
+ **アルゴリズムまとめ by PHP**
    + https\://qiita.com/kiimiiis/items/cf4e1c1aff940ca72b77

## ▼ マニュアルを読んで、Packagistを漁って、車輪の再発明を避ける
+ [Packagist](https://packagist.org/)
+ [PHP: PHP マニュアル - Manual](http://php.net/manual/ja/index.php)

## ▼ PHPにもコーディング規約がある
+ **PHP PSR一覧 2017年版**
    + https\://qiita.com/rana_kualu/items/f41d8f657df7709bda0f
+ **PHPコーディング規約まとめ**
    + https\://qiita.com/hshimo/items/04be1f432240c58300f4

## ▼ composerでパッケージとautoloadを管理する
+ **composer 導入をまじめに考える**
    + https\://qiita.com/notona/items/c5a087d8dd446d315e6e
+ **PHP開発でComposerを使わないなんてありえない！基礎編**
    + https\://qiita.com/niisan-tokyo/items/8cccec88d45f38171c94
+ **PHPの名前空間とcomposerのautoload (PSR-4) サンプル**
    + https\://qiita.com/yotasasaki/items/cc1a4936c0c92099db5a

## ▼ php.iniについて
+ **PHP 7.1 設定ファイルの記述例 (Apache 2.4)**
    + https\://qiita.com/100/items/635bcb3b4291dc428eda
+ **【PHP】php.ini ディレクティブまとめ**
    + https\://qiita.com/rhap/items/5b625685777ab2267e7d

## ▼ 制御構造としてのイテレータ
+ **[PHP]ループのメモリ使用量と処理速度を比較しました**
    + https\://qiita.com/h13/items/a75fba76f435212a2eb3
+ [PHP: for - Manual](http://php.net/manual/ja/control-structures.for.php)
+ [PHP: do-while - Manual](http://php.net/manual/ja/control-structures.do.while.php)
+ [PHP: while - Manual](http://php.net/manual/ja/control-structures.while.php)
+ [PHP: foreach - Manual](http://php.net/manual/ja/control-structures.foreach.php)

## ▼ セキュリティ
+ **PHPの脆弱性への攻撃名称と対策メモ**
    + https\://qiita.com/addictionwhite/items/4e9c9cc4570c0bcaa656
+ **スクリプトインジェクション入門**
    + https\://qiita.com/tomochan154/items/a93c56536c78d1faff0f
+ **ファイルアップロードの例外処理はこれぐらいしないと気が済まない**
    + https\://qiita.com/mpyw/items/939964377766a54d4682
+ **とっても簡単なCSRF対策**
    + https\://qiita.com/mpyw/items/8f8989f8575159ce95fc
+ [PHP: filter_var- Manual](http://php.net/manual/ja/function.filter-var.php)

## ▼ 定数 - define()とconst
+ **PHPで定数定義するときはdefine()よりもconstを使うべき**
    + https\://qiita.com/Hiraku/items/bb0cb665d830f7cd37ff
+ **PHPの定数について**
    + https\://qiita.com/hugo-sb/items/544b7420a1f8338a23bb
+ [PHP: define - Manual](http://php.net/manual/ja/function.define.php)
+ [PHP: オブジェクト定数- Manual](http://php.net/manual/ja/language.oop5.constants.php)

## ▼ 緩やかな比較(==)と厳格な比較(===)
+ [PHP: PHP 型の比較表 - Manual] (http://php.net/manual/ja/types.comparisons.php)
    + 緩やかな比較を用いる必要はないと思う

## ▼ in_array, array_searchは引数を省略すると緩やかな比較がなされる
+ **PHPのin_arrayは罠が多いので注意喚起が必要**
    + https\://qiita.com/tadsan/items/2a4c3e6b0b74a408c038
+ [PHP: in_array - Manual](http://php.net/manual/ja/function.in-array.php)
+ [PHP: array_search - Manual](http://php.net/manual/ja/function.array-search.php)
    + 第三引数を省略すると緩やかな比較になるため、かならずtrueを指定する

## ▼ switch文は緩やかな比較がなされる
+ **switch文の使いどころの悩み**
    + https\://qiita.com/Hiraku/items/af2b304650272410ec29
+ [PHP: switch - Manual](http://php.net/manual/ja/control-structures.switch.php)

## ▼ null, isset, empty の挙動
+ **isset, empty, is_null の動作まとめ**
    + https\://qiita.com/mpyw/items/51bf42fe1ad8a7e535aa
+ [PHP: empty - Manual](http://php.net/manual/ja/function.empty.php)
+ [PHP: isset - Manual](http://php.net/manual/ja/function.isset.php)

## ▼ array_key_exist(), isset() の挙動
+ **isset, in_array, array_key_exsistsの使い分け**
    + https\://qiita.com/is0me/items/e0154b4c2bc6195607f5
+ **PHP 配列の要素の存在チェックにおける array_key_exist() と isset() の違い**
    + https\://qiita.com/hugo-sb/items/6c10810684d4c9b91fc0
+ [PHP: array_key_exists - Manual](http://php.net/manual/ja/function.array-key-exists.php)

## ▼ 三項演算子の取り扱いについて（エルビス演算子、NULL合体演算子）
+ **三項演算子は可読性を落とすか**
    + https\://qiita.com/tanakahisateru/items/4fd82e03c90dc130329a
+ **PHP7調査(11)??演算子の新設**
    + https\://qiita.com/hnw/items/dff62cd02c780b613d03
+ [PHP: 比較演算子 - Manual](http://php.net/manual/ja/language.operators.comparison.php)

## ▼ 配列の追加・結合の挙動
+ **配列結合演算子, array_merge, array_replace を徹底比較**
    + https\://qiita.com/mpyw/items/578e1a14879e679d2141
+ **[PHP] 配列・連想配列の初期化、結合、追加**
    + https\://qiita.com/shuntaro_tamura/items/784cfd61f355516dfff0
+ **【PHP】連想配列、配列への追加**
    + https\://qiita.com/kazu56/items/6947a0e4830eb556d575
+ [PHP: array_merge - Manual](http://php.net/manual/ja/function.array-merge.php)
+ [PHP: array_merge_recursive - Manual](http://php.net/manual/ja/function.array-merge-recursive.php)
+ [PHP: array_replace - Manual](http://php.net/manual/ja/function.array-replace.php)
+ [PHP: array_replace_recursive - Manual](http://php.net/manual/ja/function.array-replace-recursive.php)
+ [PHP: array_unshift - Manual](http://php.net/manual/ja/function.array-unshift.php)
+ [PHP: array_push - Manual](http://php.net/manual/ja/function.array-push.php)

## ▼ array_map, array_walk の挙動
+ [Difference between array_map, array_walk and array_filter](https://stackoverflow.com/questions/3432257/difference-between-array-map-array-walk-and-array-filter)
+ [PHP: array_map - Manual](http://php.net/manual/ja/function.array-map.php)
+ [PHP: array_walk - Manual](http://php.net/manual/ja/function.array-walk.php)
    + array_mapは戻り値arrayの破壊的メソッド、array_walkは戻り値boolの非破壊メソッド

## ▼ 例外とエラーの取り扱いについて
+ **お前は PHP 7 における Fatal Error / Catchable Fatal Error / Error / ErrorException / Exception の違いを言えるか？**
    + https\://qiita.com/mpyw/items/c69da9589e72ceac470c
+ **PHP 7.0.0α2 の例外の例外の継承関係を可視化してみた**
    + https\://qiita.com/ngyuki/items/8b78e6b19ab8778a1af6
+ **PHP でどのように Exception/RuntimeException/LogicException を使い分けるか**
    + https\://qiita.com/tanakahisateru/items/e3e24f3825c4ba0c60e6
+ **SPLの例外の意味をphp-srcから探る**
    + https\://qiita.com/Hiraku/items/fbb31c2e9f6b9f868d13
+ [PHP: 例外(exceptions) - Manual](http://php.net/manual/ja/language.exceptions.php)
+ [PHP: PHP 7 でのエラー - Manual](http://php.net/manual/ja/language.errors.php7.php)

## ▼ データベース（PDO）
+ **PHPでデータベースに接続するときのまとめ**
    + https\://qiita.com/mpyw/items/b00b72c5c95aac573b71
+ **【PHP超入門】クラス～例外処理～PDOの基礎**
    + https\://qiita.com/7968/items/6f089fec8dde676abb5b
+ **プレースホルダで「= ?」と「IS NULL」に同時に対応する方法**
    + https\://qiita.com/mpyw/items/cb7ca19284afc4e2969d
+ **bindParam()とbindValue()の違い**
    + https\://qiita.com/\_dozen_/items/f6239cf1bdab6f8b0026
+ [PHP: PDO - Manual](http://php.net/manual/ja/class.pdo.php)

## ▼ 文字コード
+ **マルチバイト文字を扱う際に気をつけること**
    + https\://qiita.com/mpyw/items/a8dba1b80fe68523b8eb

## ▼ var_dump, またはその代替
+ **秘伝の var_dump 関数を公開します。**
    + https\://qiita.com/ymm1x/items/8fb2c412b161f485b61b
+ **var_dumpからの卒業、PHP開発を加速するデバッグ手法を考える**
    + https\://qiita.com/zaru/items/84d7ffd264b8093dca20
+ [PHP: var_dump - Manual](http://php.net/manual/ja/function.var-dump.php)

## ▼ phpにおける列挙型(enum)
+ **PHPで列挙型(enum)を作る**
    + https\://qiita.com/Hiraku/items/71e385b56dcaa37629fe
+ **「PHPで列挙型(enum)を作る」を参考にValueObjectを作ったので一つ一つのメソッドの役割や意味をまとめてみた**
    + https\://qiita.com/Yorinton/items/f6138f2bca7664162ca3
+ [PHP: SplEnum - Manual](http://php.net/manual/ja/class.splenum.php)
+ https://packagist.org/packages/myclabs/php-enum

## ▼ phpにおける純粋な配列：SplFixedArray
+ **SplFixedArrayで"純粋な配列"を作る**
    + https\://qiita.com/Hiraku/items/471747cacda58070f3a6
+ [PHP: SplFixedArray - Manual](http://php.net/manual/ja/class.splfixedarray.php)

## ▼ phpにおける差集合／積集合
+ **PHP:ホワイトリストやブラックリストで配列からキーを削除する**
    + https\://qiita.com/suin/items/455f152be85c0704a48c
+ [PHP: array_intersect_key - Manual](http://php.net/manual/ja/function.array-intersect-key.php)
+ [PHP: array_diff_key - Manual](http://php.net/manual/ja/function.array-diff-key.php)

## ▼ ファイルの取り扱いについて
+ **PHPでファイルを開いて読み込む**
    + https\://qiita.com/tadsan/items/bbc23ee596d55159f044
+ **サブフォルダ内のファイルをまとめて取得する**
    + https\://qiita.com/re-24/items/94eeea3e8051e212d9ed
+ [PHP: SplFileObject - Manual](http://php.net/manual/ja/class.splfileobject.php)
+ [PHP: RecursiveDirectoryIterator - Manual](http://php.net/manual/ja/class.recursivedirectoryiterator.php)

## ▼ セッション・クッキーまわり
+ **【PHP超入門】Cookieとセッションについて**
    + https\://qiita.com/7968/items/ce03feb17c8eaa6e4672
+ **Cookieとセッションをちゃんと理解する**
    + https\://qiita.com/hththt/items/07136ad74127999df271
+ [PHP: Sessions - Manual](http://php.net/manual/ja/book.session.php)
+ [PHP: クッキー(Cookies) - Manual](http://php.net/manual/ja/features.cookies.php)

## ▼ スーパーグローバルまわり
+ **【PHP超入門】HTTP（GET・POST）について**
    + https\://qiita.com/7968/items/4bf4d6f28284146c288f
+ **\$_GET, $_POSTなどを受け取る際の処理**
    + https\://qiita.com/mpyw/items/2f9955db1c02eeef43ea
+ [PHP: スーパーグローバル - Manual](http://php.net/manual/ja/language.variables.superglobals.php)

## ▼ WebAPI
+ **WebAPIについての説明**
    + https\://qiita.com/busyoumono99/items/9b5ffd35dd521bafce47

## ▼ メソッドチェーン
+ **PHPにおけるメソッドチェーンの構築**
    + https\://qiita.com/morisuke/items/a7064dc5a195e005a1f5

## ▼（おまけ）SELinux絶対にdisabledにするマンにならないために
+ **「SELinuxのせいで動かない」撲滅ガイド**
    + https\://qiita.com/yunano/items/857ab36faa0d695573dd
+ **SELinux を使おう．使ってくれ．**
    + https\://qiita.com/chi9rin/items/af532d0dd9237cc65741