これはなに
よむやつ。よむのはこれ
PHP本格入門[上] ~プログラミングとオブジェクト指向の基礎からデータベース連携まで https://amzn.asia/d/gBF4ZGK
ch 02. PHPの基本構文
2-2. データ型
- 配列、連想配列
- あそういうことか。いままで適当に書いてたけどだいぶ見通し良くなったぞ
- 定数
- define()でやる。
- システム定数てのがあって、これはデバッグとかログとかに使えそう
2-3. 演算子
- 宇宙船演算子
- <⇒>
- なんか勝手に変換されるな、、
- 右の方が小さいと1, 右の方が大きいと-1
- usort関数という配列の並び替えするやつと相性良いらしい
- 三項演算子
- a ? b : c
- null合体演算子
- a ? b
- そう言う名前なんだ
- ビット演算子
- ビット反転させたらする演算子
- 存在だけ知っとく
2-4. 条件分岐
- 空欄チェック
- !$var
- $var == ‘’
- empty()
- isset(), is_null()
- ===
- これら全て表現できる空欄チェックが異なるので使い分ける
- 強制終了
- exit, die
- die()はなんか表示して終わらすらしい。
- これどの文脈なんだろ、webだとtry catchになると思うけど
2-5. ループ処理
- ループと参照渡し
- foreach($list as &$el) {…てやると、$elの値を変更すると$listも変わる
- ループ抜けた後にunset($el)しないと参照が残る
- array_walk()使うのも良い
- 面白いな、けどこれ多分使われないな
- :を使った表現
- if:
- else:
- endif
- pythonと同じだ
2-6. 関数
- 関数の引数
- 引数も参照渡しできる
- function add(&$var)
- 型宣言
- declare(strict_type=1);すると、引数に適当な値渡した時にちゃんとチェックしてくれる。
- これはプログラムファイル単位にしか適用できない
- 可変長引数リスト
- arrayで型宣言して引数にすると、任意の型のリストになる
- …stringとすると、strのリストになる
- 可変長引数は引数の最後でしか使えない
- コールする側で…とすることも可能
- その場合、関数定義側でstr1, str2, str3とかって複数の引数を定義してないといけない。
2-7. 外部ファイル読み込み
- 外部ファイル読み込み
- require_onceとincludeがよいらしい
- dirname(/_/_FILE/_/_)でファイルの位置を取ると良い
2-8. 実行時オプション
- PHP実行時のオプション設定
- php.iniで定義する
- これはどこにあるんだろうなあ、どのサーバーアプリケーションでも同じなのかな
- phpinfo()で確認できる
- .htaccessで指定する
- おいたディレクトリ配下に適用される
- httpd.confで指定する
- Apacheの設定ファイル。.htaccessと同じ書き方ができる。
- ini_set関数で指定する
- php.iniを上書きできる
- 処理中は設定が継続する
- それぞれ適用範囲が異なる
- オプションによってモードが指定されていて、そのモードによってどの設定方法が可能かが変わる
- error_reportingオプション
- どのレベルのエラーメッセージを表示するかを決める
- どこに表示するの???
- 画面っぽい
疑問
- エラーレベルの指定できるけど、ログに出力するやり方どうなってるんだろ
ch 3. オブジェクト指向
3-1. オブジェクト指向とは
- 簡単な説明
3-2. PHPでのオブジェクト指向
- オブジェクト定数
- constで定義する
- private const VAR = xxx;
- クラス名:: 定数名でアクセスできる
- クラス内からはself:: 定数名
- 静的プロパティ
- staticで定義する
- private static $var;
- 静的メソッド/プロパティはインスタンスメソッド/プロパティにアクセスできない
- インスタンスが静的なやつにアクセスできないのは、いや別に意外ではないか? いや意外だな
- ここについては解説なし。
3-3. 抽象クラスと継承
3-4. インタフェースと実装
3-5. トレイト
3-6. 名前空間
- namespaceで定義してuseで使う。
- 結局requireとかは必要っぽい。useがうれしいのは、クラスをnewするときにnamespace全部書かなくて済むこと。
3-7. 例外処理
- throw new ExceptionClass(var)
- 例外クラスのインスタンスを投げる。
- キャッチされない例外が発生すると、そこで処理は中断される
- try, catch, finally
- 例外が起きそうなやつをtryして、
- catch (任意のEuceptionクラスと、そのインスタンス名){インスタンスを使った処理}
- finallyでどのみちやる処理書く
- たぶん、キャッチする例外のクラスは指定できる?
- 例外の伝播
- 例外はキャッチされなければ呼び出し元に伝播し、キャッチされるまで飛んでいく
- キャッチしたのを改めてなげることも可能
- getTrace()でスタックトレース表示できる
- 例外の継承
- オリジナルの例外を出すことも可能。
- Exceptionを継承する
- 感想
- これどういうときに例外を出して、どう処理させるのが良いんだろう。
- たとえばレコードが取得できない、とかならnullチェックして処理すれば良い
3-8. マジックメソッド
- __で始まるマジックメソッド
- __toStringはインスタンスが表示されたときによばれる
3-9. インスタンスの扱い
- インスタンスは変数にいれると参照渡しになる
- 複数の変数にいれると、全部で共有することになる
- だから毎回生成して渡せって言われるのか、、
- cloneキーワードでもよい
- インスタンスが他のインスタンスをプロパティとして持つ場合
- プロパティのやつは、cloneしてもクローンされない
- しゃろーこぴー
- __clone()を定義して、子インスタンスもcloneするようにすればよい
- ディープコピー
- インスタンスの比較
- entity的に、別の参照先を持つ場合は値が同じでも別物として処理される
- インスタンスの型チェックはinstanceofキーワードでやれる
- $task instanceof Taskみたいに条件文に使える
ch 4. 内部関数、SPLクラス
- いわゆる標準ライブラリ
4-2. 文字列処理の関数
- mb_internal_encoding
- 内部文字エンコーディングを設定、取得する
- php.iniのmbstring.internal_encodingを取得している。
- この値はmb_*関数で使われる値。
- mb_strpos, mb_strrpos
- 指定文字列がでてくる場所を返す
- 最初に出てくる場所, 最後に出てくる場所
- mb_substr, mb_strstr
- 文字列の一部を取る
- 指定した場所 or 文字列から切り取る
- 感想
- これ全部読むのたるいな
- 便利そうなのだけしぼるか
- 便利そうなの
- urlencode
- parse_url
4-11. ハッシュ化と暗号化
4-15. デバッグに役立つ情報を得る
- バックトレース情報
- メモリ情報
ch 5. PHPによるWebアプリケーションの実装
5-1. 入力フォームを介したデータ送受信
- スーパーグローバル変数での入力受け取り
- HTMLのformタグから送られたデータの受け取り
- $_GET, $_POSTで可能
- 配列にnameがkeyで入ってる
- $_REQUESTでどっちもいける
- アンカータグ内のGETパラメータはURLエンコード必須
5-2. request/response header情報の読み書き
- 返却したいデータに合わせて、headerのコンテンツタイプを切り替える
- まあ、知っとるな…
- あとはrawPHPでどう書くのか? って感じ
5-3. クッキーの利用
- set-cookieヘッダーでname=valueで送信する
5-4. セッション
- これどうクッキーと違うのか分からんかったかも。保存期間ちがうのは分かる。けど基本はクッキーとおなじよな???
7-1. コーディング規約
- PSRちゅうのがあるで
感想
- とりあえずぜんぶさらっと目を通した
- 例外処理とかは良かったな
- セッションは分からん
- なんかまあでも、そういうのあるんだーみたいなの押さえられたし、知らん書き方もしれた気はする。
- OK