🔰

Javaしか知らない10年目プログラマが転職を機にPHPを学び始めた話 #1

2023/07/21に公開

対象読者

  • これからPHPを学ぼうとしている方
  • ある程度プログラミング経験がある方
  • 転職による環境の変化に不安を抱いている方

今回の結論

  • PHPはHypertext Preprocessorである
    • 語弊はあるがHTML生成を目的としていると言える
  • PHPの文字列リテラルの"'の特徴について
    • 複数行になる、またはテンプレートが必要な場合は"が適している
    • 単行で短い文字列の場合は'が適している

本記事作成の経緯

アルバイトから数えて10年ほどJavaとSpringbootで受託開発を行っていましたが、
初めての転職を機にPHPとLaravelを使った自社サービス開発の環境へ飛び込んで得た、
知見と感想を共有させてください。

PHPとは?

私: 「PHPとは?」

ChatGPT:

‐‐‐
PHPは、主にウェブ開発に使用されるスクリプト言語です。
PHPは「PHP: Hypertext Preprocessor」という再帰的な略称であり、
動的なウェブページやウェブアプリケーションを作成するために広く利用されています。
‐‐‐

PHPの特徴として
Hypertext Preprocessor である。ことが重要であり、
つまり、文字列の扱いに長けているといえます。

Javaが安全な計算処理に適していることを考えると、
言語として利用目的が大きく異なることを理解する必要がありました。

PHP入門

型の考え方について

今までの私の常識として

私:「Javaの型付けについて、他の言語と比較しての優位な点を教えて」

ChatGPT:
‐‐‐以下、抜粋‐‐‐

Javaの型付けについて、他の言語と比較しての優位な点をいくつか挙げます

‐‐‐
変数の型が宣言時に明示的に指定されます。これにより、コンパイル時に型エラーを検出することができます。
‐‐‐
変数の型が厳密にチェックされ、異なる型の間での暗黙の型変換は行われません。
‐‐‐
Javaはジェネリクスをサポートしています。
ジェネリクスを使用することで、型安全なコレクションや汎用的なアルゴリズムを実現するために役立ちます。
‐‐‐
これらの特徴により、Javaは安全性、信頼性、保守性に優れたプログラムの開発を支援します。
‐‐‐

型付けはプログラムの安全性を担保するためのものという理解でした

しかし、PHPでは型を持つが文字列操作のために柔軟に記述できる仕様になっているようで、
型は指定せずとも実行時に変換できるかどうかで判断できます。

  • Javaは静的型付け言語であり、コンパイル時にチェックされる
  • PHPは動的型付け言語であり、実行時にチェックされる

文字列リテラル

Javaユーザーからすると、PHPの文字列リテラルには一種のカルチャーショックを受けました。

以下にいくつかご紹介します。

基本表現

// 文字列の宣言はどちらでも良い。と言われているが、、、
$str1 = "text1";
$str2 = 'text2';

動的型付け言語の文字列の宣言としてはよくあるパターンではあるが、
調べていくと、どちらでも良いと一概には言えないようで、

違いとしては大きく2つ

  • 利用できるエスケープシーケンスが異なる
  • 変数展開ができるかどうか

エスケープシーケンス

"'で利用できるエスケープシーケンスが異なるそうです

"の場合

\n    改行
\r    キャリッジリターン
\t    水平タブ
\v    垂直タブ

\\    バックスラッシュ
\$    ドル記号($)
\"    ダブルクオーテーション

他にも複数あり...

'の場合

\'    シングルクオーテーション
\\    バックスラッシュ

また、文字列中に"または'を含める場合

echo "This is a 'pen'";
// -> This is a 'pen'

echo 'This is a "pen"';
// -> This is a "pen"

と、表現できるようです

変数展開

以下のように表現できます

$str1 = 'World';

echo "Hello {$str1}!";
// -> Hello World!

echo 'Hello {$str1}!';
// -> Hello {$str1}!

以上から

  • "は長い文字列またはテンプレートに適している
  • 'は短い文字列に適している

おまけ

文字列連結

正直、直感的じゃなかった

// こうじゃない
echo 'Hello ' + 'World!';

主に以下で実行できる

  • 演算子を用いる
  • 変数展開を用いる
// 演算子を用いて
$str = 'Apple';
$str .= 'Orange';

echo $str . 'Peach';
// -> AppleOrangePeach
// 変数展開を用いて
$apple = 'Apple';
$orange = 'Orange';
$peach = 'Peach';

echo "{$apple}{$orange}{$peach}";
// -> AppleOrangePeach

文字列リテラルの使い分け

私の使い分けとしては以下のようにしました

  • 複数行になる、またはテンプレートが必要な場合は"が適している
  • 単行で短い文字列の場合は'が適している

最後に

一旦、ここまで
柔軟に表現できると言えるが、チーム開発の場合に揺れが大きくなりそう。という所までの理解です

まだまだ、業務で使えるレベルの知識では無いですが、
ChatGTPに既存のコードの分解して解説してもらい、
PHPの細かい仕様は公式ドキュメントで確認しつつと、
今までの経験を活かしつつ学び進めることができています

最後に
上記の理解の誤り、実装の誤り等あればご指摘いただけると幸いです

次は「関数」がテーマになると思いますのでお楽しみに

以上

Discussion