たくあんメモ

だいたいプログラム開発のメモです

phpbrewでPHP 8.1をインストール

はじめに

自分の場合はローカルPCでphpbrewを利用してPHPをインストールしています。

昨年PHP 8.1がリリースされたので、phpbrewでPHP 8.1をインストールします。

※phpbrew github.com  

手順

たぶん以下の手順でいけるかと。

  • phpbrew self-update
  • phpbrew known --update
  • phpbrew install 8.1.3 +default +dbs +curl +zlib
  • phpbrew switch 8.1.3

すでにphpbrewをインストール済みの場合は、 最初にphpbrew self-updateしてからphpbrew known --updateしないと8.1系が出てこないかもです。

また、PCにデフォルトでインストールされているopensslのバージョンが古い場合は、 opensslの最新バージョンをインストールしたうえで、 phpbrew installのオプションに +openssl=/usr/local/Cellar/openssl@x.x/x.xx などして、 opensslのパスを指定する必要になると思います。

以下のようなかんじで、無事にローカル環境をphp 8.1.3に切り替えました。

$ phpbrew switch php-8.1.3
$ php -v
PHP 8.1.3 (cli) (built: Mar  9 2022 23:04:47) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.3, Copyright (c) Zend Technologies


PHP 8.1に切り替えて発生するようになったエラーなど

個人的によく使っているCodeigniterはPHP 8.1に対応しているので問題なかったが、
他のライブラリでは以下のようなエラーが出るようになりました。

1. During inheritance of Countable: Uncaught ErrorException:

Fatal error:  During inheritance of Countable: Uncaught ErrorException: Return type of class::method() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /path/to/****.php:xxxx

これについては下記の記事が分かりやすかったので参考にしました。

scrapbox.io

2. strtolower(): Passing null to parameter #1 ($string) of type string is deprecated

某ライブラリが発せられている警告なのですが、、 せめて null チェックはしていて欲しかった。
組み込み関数のnullableでない引数にnullを渡すと、PHP 8.1から警告が出るようになります。 www.php.net

メンテされていないライブラリを使用しているからなのですが、
これを機に古いライブラリの入れ替えもしようかなと。