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/
# ----- 省略 -----
cloneしてdocker-compose upすると動きます。
動作確認
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バージョンでも使いたい…😟
コメント