ナビゲータのEVEです。
今日も、独習PHP第4版について目を通しています。前回この本を読んだときは、必要な所だけ目を通したので、641頁ある本のほとんど読んでいなかったようです。4,000円近く支払って購入したのに、もったいないモノです。
価格:3740円 |
独習PHP第4版ですが、毎日PDFでのページ数で、50頁読むことにしました。それ以上だと他の作業への負担が増しますし、その範囲内だと集中して読むことができそうだからです。PDFの頁数で、671頁あるので、14日ぐらいで読めそうです。そのぐらいだと、起業の検討も終わり、会社が設立されている可能性があるので、ちょうどよいかもしれません。
そんな独習PHP第4版ですが、やはり、目新しい情報がいくつかありましたので、報告させて頂きます。
[Just-In-Time]
Just-In-Time(以降JIT)って知っています?トヨタカンバン方式で利用されているものではありません。これ、PHP8からあらたに加わった機能です。
PHPはインタプリタ言語だと多くの人が知っていますが、PHP8からは、インタプリタ言語とは言えなくなるような機能が追加されました。それが、JITです。
インタプリタ言語は、毎回1行ずつ翻訳しますが、JITは内部的に一括翻訳します。一括翻訳されたコードはメモリ上に保存して再利用されるので、実行効率が大幅に向上します。その向上した性能は、以前の3倍という計測もあるぐらいです。もし、PHP8以前で運用しているグループがあるのでしたら、PHP8へバージョンアップすべきでしょう!
[BOM]
以前のブログで、PHPのコーディング規約を紹介しましたが、その中で、「文字エンコーディング:ファイルはUTF-8 without BOMを使用すること。」という記述があります。それは、PSRの規約を踏襲したモノなのですが、どのようなものなのでしょうか?ChatGPTに聞いてみました。
Byte Order Mark (BOM) とは、テキストファイルの先頭に置かれる特別なバイトシーケンスで、ファイルのエンコーディングやバイト順序を示すために使用されます。BOMは主に UTF-8, UTF-16, および UTF-32 のエンコーディングで利用されます。
■BOMの主な目的
❶エンコーディングの識別:
BOMは、テキストファイルがどのエンコーディングで保存されているかを示すために使われます。たとえば、UTF-8では EF BB BF の3バイトがBOMとして使われます。
❷バイト順序の指定:
UTF-16やUTF-32では、BOMがバイト順序を指定します。例えば、UTF-16では、リトルエンディアン(LE)の場合は FF FE、ビッグエンディアン(BE)の場合は FE FF となります。
■代表的なBOMのシーケンス
・UTF-8: EF BB BF
・UTF-16 LE: FF FE
・UTF-16 BE: FE FF
・UTF-32 LE: FF FE 00 00
・UTF-32 BE: 00 00 FE FF
■使用上の注意
BOMがあることで、ファイルのエンコーディングを自動的に識別できるため、特に異なるエンコーディングのファイルを扱う際に便利ですが、いくつかの注意点があります。
一部のプログラムやシステムは、BOMを正しく処理できない場合があり、表示や処理に問題を引き起こすことがあります。
BOMが含まれるファイルを処理する場合、余分なバイトが出力されたり、ファイルの先頭に不必要な文字が現れることがあります。
■まとめ
BOMは、エンコーディングの識別やバイト順序の指定に役立つ特殊なバイトシーケンスです。テキストファイルの互換性や正しい解釈を確保するために、BOMの存在とその影響を理解しておくことが重要です。
一部のプログラムやシステムでは正しく処理されないという記述がありますが、PHPもその中に含まれます。PHPプログラムをBOMありで保存すると、以下のような誤動作が発生します。
1)プログラムエラー
2)文字化け
3)セッションやクッキーの障害
4)ファイルの互換性の問題
5)パフォーマンス
以上も、ChatGPTから聞いた内容なのですが、BOMをつけてPHPプログラムを保存すると大きな問題が発生しそうです。なお、私が愛用している、秀丸ですが、デフォルトBOMは付けない設定です。そのため、今までこのようなことで困ったことはありません。
[あとがき]
この間、静的メソッドの話をし、その関連情報として、静的プロパティについて話しましたが、それ以外に静的変数というのもあるようです。その部分に関して言うと、かなり混乱しています。現在のペースで読み続けていくと、今日から5日後に当該頁に達し、そのときに詳細な報告ができると思います。
機能が違うものに名称を付けるとき、明らかに違う名前で付けてもらえるとありがたいと思ったのは私だけでしょうか?
では、また!!!