LoginSignup
4
5

More than 1 year has passed since last update.

Java使いからPHPerに転身した際にはまったこと

Last updated at Posted at 2022-06-19

概略

業界に入ってから長らくJavaをメインで使っていたプログラマである筆者が、業務でPHPを使うようになった際にはまったことを思い出して列挙していく。
詰まった時しか公式リファレンスとか見ないから何となくでやるとびっくりしてしまう。

マルチスレッド

Javaだとマルチスレッド当たり前なので、シングルトンだったりstaticな変数を更新していたりすると「そんなバカな、死にたいのか!?」と思ったりしたが、Webアプリケーションとして動くPHPでは通常リクエストごとに別プロセスが起動していてそんな問題になることはないようだった。

arrayがプリミティブ風に動く

内部的にどういう扱いになっているのか具体的にわかっていないけれど、arrayを代入したら別の配列となる。
Java的な常識だと同じオブジェクトの参照となるイメージだったから衝撃だった。
javaだと

Main.java
public class Main {
  public static void main(String[] args) {
    int[] array1 = {10, 20, 30};
    int[] array2 = array1;
    array2[1] = 40;
    System.out.println(array1[1]); // 40
  }
}

PHPだと

<?php
$array1 = [10, 20, 30];
$array2 = $array1;
$array2[1] = 40;
echo $array1[1]; // 20

組み込み関数がユーザ issetは通常の関数と異なる動作をする

issetなどに渡すものは内部が実行された結果を渡されるのではない。
issetは関数ではなく言語構造なのだそうだ。指摘ありがとうございます。
確かに公式にちゃんと書かれていた。
https://www.php.net/manual/ja/function.isset.php#refsect1-function.isset-notes

Javaかけるから何とでもなるでしょーって調子こくとダメだな。。

$null = null;
echo isset($null[1]); // ここでアクセスできないとなるかと思いきやfalseが返る
some_method($null[1]); // ここではエラー発生する

ケースインセンシティブなところがある

大文字小文字を気にしてないところがある。
気にするところもある。
なんだこれ

<?php
function hoge(){
    echo 'hogehoge';
}

class MyClass {
    function fuga(){
        echo 'fugafuga';
    }
}

HOGE(); // hogehoge
ECHO PHP_EOL;
$class = new MYCLASS();
$class->FUGA(); // fugafuga

変数の$が重ねられる

僕自身がJavaから入ったとか関係なく衝撃だった
リフレクションとかのイメージ

<?php
function some_method(){
    echo 'piyo';
}
$hoge = 'some_method';
$fuga = 'hoge';
$$fuga(); // piyo

参照渡しできる

これは単純にJavaにないからほえーっとなった

<?php
function some_method(&$hoge){
    $hoge = 'fuga';
}
$hoge = 'hoge';
some_method($hoge);
echo $hoge; // fuga

ブロックスコープがない

以下のコードだとコンパイル通らないという感覚になってしまう。

<?php
$bool = true;
if ($bool) {
    $message = 'hoge';
} else {
    $message = 'fuga';
}
echo $message; // hoge

一旦これくらいで。

4
5
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5