Java経験者がPHPでハマる10選の7 「標準ライブラリの名前や仕様が統一されていない」

こんにちは。ゆうせいです。

Javaをしっかり学んだ人がPHPに移行すると、「似てるはずなのに全然感覚が違う!」と驚くことが多いんです。
同じオブジェクト指向言語ですが、設計思想や実行環境、型の扱い方などがかなり異なります。
Java経験者がPHPを学ぶときにハマりやすいポイントを10個にまとめ、具体的な解説と回避方法をお伝えしています。

今回は、7つ目「標準ライブラリの名前や仕様が統一されていない」を掘り下げます。


標準ライブラリの名前や仕様が統一されていない

Java経験者がPHPに来るとまず驚くのが、関数名の規則性のなさ引数順のバラつきです。
Javaの標準APIはパッケージで整理され、命名規則もほぼ一貫していますが、PHPは歴史的経緯でバラバラになっています。


JavaとPHPのAPI設計思想の違い

項目JavaPHP
API配置java.util, java.lang など体系的グローバル関数が大量に存在
命名規則キャメルケース(例:String.valueOfスネークケース(例:str_replace)、一部例外
引数順一貫性あり関数ごとに異なる(逆順の場合も)
型の統一性メソッドチェーン可(String, Listなど)関数型API中心、戻り値型もバラバラ

命名規則が統一されていない例

strlen($str);        // 長さ取得
str_replace("a", "b", $str); // 置換
in_array($needle, $haystack); // 配列検索
array_search($needle, $haystack); // 配列検索(戻り値がキー)

  • 同じ「検索」なのにin_arrayは結果がtrue/false、array_searchはキーを返す
  • 関数名の動詞・目的語の順序も統一されていない

引数順の不一致

Java(文字列置換)

str.replace("a", "b"); // 元文字列.replace(検索文字列, 置換文字列)

PHP

str_replace("a", "b", $str); // 検索文字列, 置換文字列, 対象文字列

さらに、関数によっては対象→検索→置換の順だったりするため注意が必要です。


歴史的背景

  • PHPはC言語の標準関数に似せた関数を最初に作り、その後にWeb用関数を追加
  • 後発の関数は既存ルールに合わせるより、既存ライブラリの仕様を優先した結果、統一性が失われた
  • Javaのようなオブジェクト指向一貫設計ではなく、「使える便利ツールが大量に並んでいる」形になった

実務での回避策

  1. 標準関数よりもライブラリやフレームワークのユーティリティ関数を使う(LaravelのStr, Arrなど)
  2. チームで関数使用の推奨パターンをまとめたガイドラインを作る
  3. 新規実装ではメソッドチェーン可能なクラスベースのAPIを作る

イメージで理解する

  • Javaの標準ライブラリ:整然と並んだ本棚(ジャンル別、著者別)
  • PHPの標準ライブラリ:フリーマーケットの屋台(宝もあるが探すのが大変)

「Javaは図書館、PHPは市場」というイメージを持てば一発で理解できます。

次は8つ目「メソッドのオーバーロードがない」に進めると、関数設計パターンの違いが浮き彫りになります。

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。