けこのアプリ開発奮闘記

アプリ開発で得た知見を共有していきます。なるべく文章が堅くならないように意識しています。

【PHP】翔泳社 独習PHP第4版 読書レポ その1

挨拶

皆さんこんにちは。けこです。
Laravelで環境構築したぞー!アプリ作るぞー!と意気込みましたが、折角だから最新の言語仕様に則った良いものを作りたいと思いPHPの参考書を買ってみました。
購入した本は翔泳社/山田祥寛氏の『独習PHP 第4版』です。PHPの基本をもう一度学ぶためにPHP8の本を探していた際にAmazonで半額になってたのでポチっちゃいました。

www.amazon.co.jp

早速知識整理も兼ねて、3割ほど読んでみて学びを得た点を紹介したいと思います。
PHPマンに自信満々に説明したら何当たり前抜かしとんじゃと言われそうな内容ですが、お暇ならお付き合いくださいませ。 ※私は本業でJavaを扱っています。実務経験は1年ほどです。

PHPの言語仕様で気になったポイント

クォーテーションの使い分け

私がまず特に気になったのはクォーテーションの違いです。

$str = 'Hello';
echo 'シングルクォート: {$str}';
echo "ダブルクォート: {$str}";

これらのコードの結果はこうなります。

シングルクォート: {$str}
ダブルクォート: Hello

PHPではシングルクォートとダブルクォートで囲んだ場合で変数が展開されるかとエスケープ処理がされるかが異なるみたいです。
これまで触ってきたJavaではシングルクォートはcharを表すものでしたし、JavaScriptでは扱いが同じでした。
そんな私から見るとこの違いはとても魅力的に映りました。変数展開をしないということはユーザがいたずらで${foo}のようなありがちな変数名を仕込んでも大丈夫ということです。関数を使ってエスケープをしなくて済むのは魅力的です。
Javaの言語仕様の影響でダブルクォートをする癖がついていたのでちゃんと矯正しないといけないですね。

配列の最大インデックス+1への代入

PHPでは配列のインデックスを省略して代入を行った場合、配列の最大インデックス+1に対して代入が行われます。とても便利ですね。

文字列混在の演算ルール

例えば、print '1' + '1';。これはPHP7.4では2らしいです。どういうことだってばよ。
PHP7.4
先頭が数値で始まる文字列は数値として見なされて警告も出ない
先頭が文字列で始まる文字列は0として見なされて警告も出ない

なんですかこれ?確かに便利な場面はあるかもしれないけどデメリットのほうが多いでしょ?PHPが型の概念がしっかりしていない言語だということを骨身で理解しました。Javaの癖で文字列を連結しようとして + でつなげたら大惨事です。怖い。

PHP8では前者は警告、後者はエラーが出るようです。ありがとうPHP

文字列操作関数が豊富

PHPの文字列操作関数多いですね。今私が読み進めている部分もまだ配列の文字列をいじくり回しています。mb_convert_case, mb_strlen, mb_substr, str_replace, trim, explode, mb_strpos, mb_strstr...いや、strstrってなんだよもうちょっといい名前無かったんか。
センスに少しびっくりですがとにかく文字列操作の組み込み関数が豊富です。Javaだと外部ライブラリを入れたり自力で実装したりしていたものまでありました。日本人に生まれた以上なんだかんだマルチバイト文字を扱う機会は多いので助かりますね。

一区切り

ここらでネタが尽きてしまったのでまた勉強に戻ろうと思います。今日は日が変わるまで残業したのでじっくり休んでまた明日から精をだして行きましょう!
学生のときはPHPの言語仕様をよく知らずに使っていましたが、便利な言語仕様は鋭い罠にもなりうるのだと感じました。Java脳からPHP脳に切り替える必要がありますね!この調子でささっと本を読み終えてアプリ開発に着手するぞー!Laravelの本ももう買ってあるので来週の水曜日くらいから本格始動できるかな?楽しみです。

以上!お付き合いいただきありがとうございました~。