はじめてのPHPプロフェッショナル開発 ch4 WIP

PHP勉強メモ

[https://www.shuwasystem.co.jp/book/9784798047492.html:embed:cite]

Chapter04 モダンPHPの文法と基礎文法

  • 要所要所のみ

    • コンテナ操作まわり
    • 他の言語と異なるところ
  • 環境

    • docker-compose up -dで立ち上げ
    • docker-compose downで解体

Section01 基本的な構文

PHPを実行する

  • phpコンテナでphpコマンドを実行
docker-compose exec php php hello.php
Hello World.
  • 対話
docker-compose exec php php -a
Interactive shell

php > echo 'Hello World.';
Hello World.
php >
  • Ctrl-Cで離脱(SIGINT)

PHPとHTML

  • localhost/phphtml.php
  • HTMLとPHP混ぜられるよ、という話

変数の宣言

  • $をつける
  • 動的型付け

Section02 型と演算

  • 動的型付け(再掲)

文字列の操作

  • .で結合する

    • +じゃない

比較の演算

  • a <=> b(宇宙船演算子, PHP7.0~)

    • a < b なら-1
    • a === b なら0
    • a > b なら+1
    • 乱暴だけど(a - b)の符号だけ取った感じ

      • 引き算できる必要はないことに注意(順序尺度)
    • usortなどで使う

Section04 繰り返し処理

  • 無限ループには気を付けましょう

Section05 関数

  • サブルーチン

Section06 PHP7の新機能

型宣言

  • より安全なプログラミング

    • エディタやIDEの恩恵
    • 静的解析

関数の引数型宣言

  • 引数型宣言はPHP5から一部ある(type hinting)

    • クラス名
    • self
    • array
    • callable
  • PHP7.0

    • スカラ型宣言対応

      • bool
      • float
      • int
      • string
  • PHP7.1

    • iterable

戻り値の型宣言

  • PHP7.0完全新規

    • 後置修飾
  • PHP7.1

    • nullable

      • function hoge(): ?string とか書ける

厳密な型チェック(strictモード)

  • 真っ先にdeclare(strict_types=1)
<?php
declare(strict_types=1);
  • UTF-8ではBOMがついていると下記エラーが出るので注意
 PHP Fatal error: strict_types declaration must be the very first statement in the script
  • デフォルト無効
  • 有効にすると、関数の引数・戻り値の型不一致でTypeErrorが発生してくれる

    • 仮引数と実引数の不一致 … 呼び出し側でエラー
    • 戻り値型宣言と実際の戻り値の不一致 … 実行時エラー

パラメータの型の拡大変換・抽象メソッドのオーバーライド

  • 参考:

    • 契約プログラミング

      • 事前条件は、継承元と同等かより弱いもの(or-ed)に置き換えられる。
      • 事後条件は、継承元と同等かより強いもの(and-ed)に置き換えられる。
    • リスコフの置換原則
  • 引数:事前条件

    • override時はより弱い縛りにできる
    • 引数を広げるのはOK
  • 戻り値:事後条件

    • override時はより強い縛りにできる
    • 戻り値を狭めるのはOK