PHP × Web Tech Cafe
『Web×PHP TechCafe』は、WebやPHPに関わるITエンジニアがスキルアップのために開発や勉強、LTをするコミュニティです。オフィスをスキルアップの場としてご提供します。
本コミュニティは以下の2部構成になっています。
- Lightning Talks 発表
- ワーキングテーマに基づき参加者で議論
connpassのページはこちら
今回は PHP × Web Tech Cafe 1月の内容をまとめてお伝えします!!
1. Lightning Talks
Zvalについて
-
下記のQiita記事作成中に、PHP.net に記載されていた内容が古いことが分かったので、zvalについて改めて調べてみた
- 【PHP7.4新機能】弱参照(WeakReference)をキャッシュに使うってどういうことよ、を考えてみた
- https://qiita.com/miracle-FJSW/items/807d60c09d194609e6a4
-
PHP変数は「zval」というコンテナに保管される
- PHPは参照されるたびに参照カウントがカウントアップされる
- 0になったら解放される
-
- $a = "new string"; の参照カウントを調べたらカウント数が表示されない(internedと表示)
- PHP.net には refcount=1 になるとある
- v5.6 では 1になる
- v7.4 では internedと表示
- phpが7系になったタイミングでパフォーマンス改善のためにzvalの構造が大きく変わったため
-
PHPコア開発者のNilitaさんのスライドを参照
- 新しいzvalでは構造の見直しによってサイズが小さく、かつ効率よくメモリアクセスされるようになった
- 数値型はrefcountなどで管理せず、代入されるたびに新しくメモリ領域が確保され、メモリアクセス回数が減った
- 文字列は、3段階のアクセスを行っていたが2段階に減った、など
- PHP7以降は、参照を使うとむしろ無駄なメモリ消費が発生する
- メモリ領域にリファレンス情報を保持させなければならなくなったため
2. ワーキングテーマ
本日のテーマは以下です
PHP関連のアドベントカレンダーで気になった・面白い記事を持ち寄って、記事の紹介+その記事をネタに色々議論する
議論内容
1件目
phpenv/php-build の小ネタ集
内容
-
phpにもxxxenvがあるとは知らなかったが、この記事を見て初めて知ったので紹介
- PHPのバージョンを切り替えるのを楽にするのが目的
- nodenv, pyenvのPHP版
- 使ってみたが、切り替えが簡単になるが各バージョンのPHPをインストールする際に苦労した
- PHPのユーザーグループのslackでも最新バージョンのビルドが通らなくて苦労しているようだ
- 個人開発する程度ならDockerでも代用可能
- ただし、Dockerなどの仮想化技術を使わずにOSに直接インストールしたPHPを利用したい場合はphpenvが良さそう
-
本番環境で7.4を利用しているとして、開発環境でphpenvで7.4 と 7.1 を併存するのは大丈夫なのか?
- それは問題ないはず。内部的にはPHPのバイナリの参照先を変えているだけなので
-
それだと何が環境構築が難しいのか
- PHPのバージョンに対応したライブラリを入れるのが大変
- 結局バージョンに対応しているライブラリをすべて入れていかなければならず、OSのリポジトリが対応していない場合などもある
-
逆にDockerだとどうやってやればいいのか
- DockerHubから落としたいPHPのバージョンのイメージを落としてRunするだけ
- DockerはDockerで知識が必要だし、本番運用するならそれなりの知識が必要
2件目
Laravel で Christmas Illumination
内容
- Laravel にある Illuminate という名前空間をモチーフにしてイルミネーションを作ったという記事
- センスが面白い
- Laravel の作者が Illuminate で PHP界を明るくしたいという意図があったらしい
- Laravel はナルニア国物語の国名が由来。テンプレートエンジンはBladeで、剣と魔法の世界。
- artisan(職人)とか、ネーミングが素敵
3件目
【PHP7.4】PHP7.4がリリースされたので新機能全部やる
内容
-
前回のWeb × PHP Tech Cafe でも PHP7.4 の新機能について話していた
- PHP7.4の新機能を'もっと'追う【Web x PHP TechCafe 2杯目】
- https://qiita.com/MasaKu/items/f295584f7005accdc456
その時には気づかなかったその機能の使い方について説明があり興味深かった
mb_str_split でZWJシーケンスも分割できるため👨👩👦👦の文字も分割して、「👨」「👩」「👦」「👦」のようにできる
余談
Laravelのここが便利
- 認証処理
- フレームワーク上で認証機能を作ってくれる
- バリデーション
- 画面のバリデーションチェックから項目値の挿入まですべてやってくれる
- ルーティングのグルーピング
- ルートをグルーピングしてmiddleware を一括で登録することができる
- セッション管理
- Flashセッションなど、手書きで実装しようとすると大変そうな機能が全てやってくれる
- ルートモデルバインディング
- コントローラ内の処理を実行するときにモデルを渡すことができる
- マイグレーション
- スキーマ管理しやすい