【PHP8】docker環境作成と名前付き引数を試してみる

docker

php8を実行できる動作環境を作成して、php8の新しい機能の名前付き引数を試してみました。

docker環境作成

mysql8を入れて、phpMyAdminを動かしたいなーと思ったのですが…
エラーになってうまく動きませんでした😣

とりあえず2つの項目を消して、PHP8のみ動かしてみることに。時間があるときにまた挑戦したい…

version: '3' 
services:
  nginx:
    image: nginx:latest
    container_name: php8_docker_nginx
    ports:
      - 8080:8080
    depends_on:
      - php
    volumes:
      - ./nginx/server.conf:/etc/nginx/conf.d/default.conf
      - ../:/var/www/html

  php:
    build: ./php
    container_name: php8_docker_php
    volumes:
      - ../:/var/www/html
      - ./php/log/:/var/log/php/

あとはDockerfileを少しいじって、バージョン8を指定します。

FROM php:8.0.0-fpm
COPY php.ini /usr/local/etc/php/
# ----- 省略 -----
githubにプッシュしているので、詳細はこちらのリポジトリで確認できます。
cloneしてdocker-compose upすると動きます。
GitHub - YasuakiHirano/poc-php8-docker
Contribute to YasuakiHirano/poc-php8-docker development by creating an account on GitHub.

動作確認

cloneしてきて、cdコマンドでpoc-php8-dockerに移動します。

$ git clone https://github.com/YasuakiHirano/poc-php8-docker.git

下記コマンドでdockerを立ち上げます。

$ docker-compose -f .php8_docker/docker-compose.yml up -d

ブラウザからhttp://localhost:8080にアクセスすると…
phpinfo関数を動かすようにしているので、phpの情報が表示されました。

8になってますね!OK.

名前付き引数を試す

php8から名前付き引数が使えるようになっています。
関数やメソッドを呼ぶときに引数の名前を書いて、パラメータを渡すようにします。

こうすることで、ソースコードが見やすくなるのと、デフォルト引数を省略することができるようになりました。
具体例を見てみましょう。

下記のコードは名前を渡して、文字列を表示するというものです。

function hello(string $name) {
    echo "hello, {$name}"."<br>";
}

hello(name: "user1");

渡すときにname:$nameの引数を渡しています。実行すると、このようになります。(ブラウザで表示するとbrタグで改行される)

hello, user1

下記コードは、それぞれ文字列で渡したパラメータからテキストを作成して表示するというものです。
呼び出すときにfruitsText(color: "赤")とやっています。colorだけ渡すようにして、あとはデフォルト引数にまかせています。

php7までだと同じようにしたい場合はfruitsText('りんご','赤')というように書く必要がありました。
今までは、指定したい位置までは引数省略が不可でしたが、簡単に省略できるようになってますね。

function fruitsText(string $fruits = 'りんご', string $color = "紫", string $taste = "甘い") {
    echo "{$fruits}の色は{$color}色で、{$taste}"."<br>";
}

fruitsText(color: "赤");

実行すると、このように出力されます。

りんごの色は赤色で、甘い

最後にクラスのメソッドでも出力できるか試してみました。
名前付き引数は、名前で指定できるので、引数の順番が逆になっていても大丈夫です。

class User {
    public function whoAmI(int $age = 30, string $name = 'yamada', string $tel = '080-XXXX-XXXX') {
        echo "私は{$name}です。年齢は{$age}で電話番号は{$tel}..."."<br>";
    }   
}

$user = new User();
$user->whoAmI();
$user->whoAmI(name: "太郎", age:18);

$user->whoAmI();は実行すると下記の結果が出力されます。

私はyamadaです。年齢は30で電話番号は080-XXXX-XXXX...

$user->whoAmI(name: "太郎", age:18);引数の位置が逆ですが、正常に処理されます。
実行すると下記の結果が出力されます。

私は太郎です。年齢は18で電話番号は080-XXXX-XXXX...

終わりに

dockerでphp8環境を作成して、名前付き引数を使ってみました。
簡単に実行環境が作れるので、dockerはやっぱり便利ですね。

名前付き引数はコードもわかりやすくなるし、いいですね。
他のPHPバージョンでも使いたい…😟

コメント

タイトルとURLをコピーしました