1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java vs PHP】`.` と `-> / ::` 完全対比表

Posted at

Java から PHP に来た人向け
Javaではすべて .(ドット) で済みますが、PHPには ->(アロー)::(スコープ解決) の2種類があります。
元々javaを使用していてphpを最近使用しているので記載しました。
本記事ではこの違いを具体例とともに徹底整理しました!


🟢 1. 概念対比表

概念 Java PHP (インスタンス) PHP (静的)
フィールド参照 obj.field $obj->field Class::$field
メソッド呼び出し obj.method() $obj->method() Class::method()
定数 CONSTANT (static final) Class::CONSTANT
名前空間 / パッケージ区切り com.foo.Bar Foo\Bar ()

覚え方:
PHP では インスタンス = ->クラス = :: と覚えるだけ。


🟢 2. コード例で見る「.」「->」「::」の違い

2‑1. インスタンスメンバー

// Java
User u = new User();
System.out.println(u.name);
u.login();
// PHP
$u = new User();
echo $u->name;   // ← ->
$u->login();

2‑2. 静的メンバー / クラス定数

// Java
System.out.println(Math.PI);
int v = Integer.parseInt("123");
// PHP
echo Math::PI;             // 定数
$value = Integer::parse("123"); // 静的メソッド

2‑3. self::, parent::, static::(PHP独自)

class Base {
    public static function who() { echo "Base"; }
}
class Child extends Base {
    public static function who() { echo "Child"; }
    public static function call() {
        parent::who(); // Base
        self::who();   // Child
        static::who(); // 遅延静的束縛→ Child
    }
}
演算子 意味 呼ばれるメソッド 特徴
parent:: 親クラスのメソッドを呼ぶ 親に定義されたもの 常に「親」固定
self:: 今定義しているクラスのメソッドを呼ぶ 自分自身 定義時のクラスに固定
static:: 実行時の呼び出し元クラスにあるメソッド 呼び出した側のクラスにあるもの 動的に変わる(遅延静的束縛)

🟢 3. なぜ Java は「.」だけで済むのか?

  • Java: 静的メンバーとインスタンスメンバーを文法的に同じ記法で表現し、型情報で解決します。

    ClassName.staticMethod(); // 静的
    obj.instanceMethod();     // インスタンス
    
  • PHP: 実行時バインディングが基本で、静的メンバーとインスタンスメンバーを演算子で区別する必要があります。
    → その結果、->(アロー)::(スコープ解決) が分離されています。


🟢 4. PHP での使い分けルール

使う場面 演算子 備考
インスタンスのプロパティ / メソッド -> $car->speed / $car->run() オブジェクトが null だとエラー(?->でnullsafe)
静的プロパティ / メソッド / 定数 :: Car::$count / Car::maxSpeed() / Car::WHEEL self::, parent::, static:: もここ
名前空間区切り \ App\Http\Controller ファイル先頭の namespace / use と併用

ワンポイントメモ:
PHP 8.0+ では ?->(nullsafe)が追加されました。例えば:

$name = $user?->profile?->name;

🟢 5. よくある落とし穴

ケース Java PHP 解説
インスタンスから静的メソッド呼び出し obj.staticMethod(); → 警告 $obj::staticMethod(); 可能 PHP では許されますが非推奨。IDE も警告を出します。
プロパティの動的アクセス リフレクション必須 $obj->{$prop} 文字列変数からメンバー名を決定できるのは PHP のみ。
連鎖呼び (obj.a.b.c) 普通に可能 $obj->a->b->c 途中で null がある場合、Java は NPE、PHP は FATAL(PHP 8.0+ なら ?->)。

🟢 6. まとめ

  • インスタンス → -> / クラス → :: が PHP の基本形。
  • Java の .両方兼用 ですが、PHP では 実行時解決 の都合で演算子が分けられています。
  • 1 行の違いに見えて、依存注入・柔軟性・テスト設計 に直結するため、演算子の意味を正しく理解して使い分けましょう!

🟢 付録:チートシート

PHP
----
$obj->prop           // インスタンスプロパティ
$obj->method()       // インスタンスメソッド
Class::$prop         // 静的プロパティ
Class::method()      // 静的メソッド
Class::CONST         // クラス定数
self::/parent::      // 同/親クラス参照
static::             // 遅延静的束縛

Java
----
obj.prop             // インスタンスプロパティ
obj.method()         // インスタンスメソッド
Class.prop           // 静的プロパティ
Class.method()       // 静的メソッド
Class.CONST          // static final 定数
1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?