2016-12-30 6 views
1
class Test 
    { 

     function __construct(){ 
      # code... 
     } 

     public static function read(){ 
      echo 'hello'; 
     } 
    } 

$a = new Test(); 

$a::read(); // it shows "hello" ?? 

die(); 

クラスのインスタンスで静的メソッドを呼び出すことはできますか?どのように私はそれを防ぐことができますか?インスタンスオブジェクトから静的メソッドを呼び出さないようにする

+1

静的メソッドは、グローバルな関数で、可視性は制限されています(オプション)。 – axiac

答えて

1

$a::read()は、Test::read();の別の書き方であり、インスタンスではなくクラスの静的メソッドを呼び出します。同じことをしているので、あなたはこの違った書き方を使っている人を心配する必要はありません。

ところで、多くの言語で可能です。それが推奨されていません。たとえば、Javaでは次のようにすることができます。

public class Main { 
    public static void main(String[] args) { 
     Main m = new Main(); 
     m.test(); // Static member accessed via instance reference 
     Main.test(); 
    } 

    public static void test() { } 
} 

と同じことがあります。

+0

しかし、私の元のコードでは、オブジェクトを返すいくつかの連鎖メソッドがあり、返された値がすべて変更されるので、その動作を望んでいません。 – medBo

+0

それは言語の不可欠な機能なので、私はあなたがそれを防ぐことはできないと確信しています。 –

+0

ありがとう、私はコードの設計を変更します。 – medBo

関連する問題