2012-02-15 4 views
1
<?php 
    class a { 

    function fn() { 
      echo "My name here"; 
     } 

    } 

a::fn();  
?> 

スコープ分解能演算子を使用して動作を確認しましたが、ブラウザでチェックインするとエラーは発生しませんでした。PHPスコープ分解能演算子

しかし、同じコード、私はそれが

厳格な基準のようなエラーくれたnusphere PhpEdデバッガツールの実行:非静的メソッドA :: fnが()Dで静的に呼び出すことはできません:\ PROGRAM_FILES \ WAMP \ WWWを\ test \ index.php on line 12 私の名前はここに

しかし、それは正しく結果を印刷しました。アクロリウム問題が何であるか分かりますか?私はPHPのクラスに慣れていません。私はgoogleで試しましたが、理由はありませんでした。あなたが見ている

アドバンスのおかげ

+1

^^動作するはず静的menthodとしてそれを呼び出す必要がありますか?なぜ試してみてください: $ a = new a(); $ - > fn(); – azzy81

+1

エラー報告の設定が異なると、あなたが経験する違いを生み出すことができます。 – hakre

答えて

3

エラーは、サーバー上に表示されない可能性がある、E_STRICTです。 error_reporting(E_ALL | E_STRICT)と設定すると、おそらくそのエラーが表示されます。

エラーが表示される理由は、関数fnが静的​​であると宣言されていないため、静的に呼び出すことはできません(a::fn()など)。

public static function fn() { 
    // ... 
} 

EDITThis manual pageは上記のあなたに似た例を示したメソッドの宣言を変更し、あなたの関数が静的にするために

$a = new a(); 
$a->fn(); 

を:あなたはこのように非静的メソッドを呼び出します。

1

あなたは静的なmenthodとしてそれを呼び出す必要がありますか?なぜしようとしない:

$a = new a(); 
$a->fn(); 

これは