2016-01-18 11 views
5

正常に動作します!それは1を返します。本当に、私は酔っていないと誓っています。PHP間違ったコードは、私は次のコードをした

もちろん、私のマシンや実稼働サーバーで実行した場合、動作しません。 staticのような非静的メソッドを呼び出すことはできません。クラスは常に最初にインスタンス化する必要があります。

私はそれが心配でした。今日私はプロジェクトをテストするための別の作業マシンをセットアップしたとき、私はこのコードが動作する環境をもう一度得たと思った。

状況が悪化する - 静的メソッドと非静的メソッドの間に明確な違いがないチームの開発者がいます。結果として、マシン上で正常に動作するコードがありますが、他の環境では失敗します。

なぜ機能していますか?私はそのようなコードが失敗するようにしたい。それは動作しません。

それが動作するマシンの構成は以下の通りです:

放浪する@放浪-のubuntu-信頼できる-32:PHP 5.6.17-3 + DEB -vは/ var/www /のApothekeのの$ phpのを。 PHPグループZend Engine v2.6.0、Copyright(c)1998-2015 Zend Technologies with Zend OPcache v7.0.6-dev、Copyright(c)1999、Copyright(c)1997-2015 Zend Technologiesの-2015、

本当に、私はとても愚かだと感じます。 私は何かが恋しいですか?

+3

これをチェックしてください: - http://stackoverflow.com/questions/3754786/calling-non-static-method-with –

+0

あなたが '$ this'を使わない限り、このコードをPHP –

+0

私はそれが失敗する......(ドキュメントをチェックする、それが失敗するようにいくつかの設定が必要です) – Tebe

答えて

4

上記のコードはPHP 5 From the docsに有効である:PHP 5では

、非静的メソッドを呼び出す静的E_STRICTレベルの警告を生成します。

あなたは次のような警告を報告し、厳密なエラーをオンにすると出力されます。

PHP厳しい基準:PHPに静的非静的メソッドA :: methodB()と呼ばれるべきではありませんシェルコード1行目

このメソッドはまだ実行され、値を返します。

PHP 7では推奨されていません。使用することはお勧めしません。

PHP 7では、静的でないメソッドを静的に呼び出すことは推奨されず、E_DEPRECATEDという警告が生成されます。非静的メソッドを静的に呼び出すためのサポートは、将来削除される可能性があります。

厳しい基準:非静的メソッドA :: methodB() 静的

と呼ばれるべきではありませんが、PHPは、あなたが実行したいと仮定しますが、警告は、以下の得ている

2

とにかくそれはそれを実行します。それを防ぐために

、あなたがあなたの方法を変更することができます:

class A { 
    public function methodB(){ 
     if(isset($this)){ 
      // do something 
      return 1; 
     } 
    } 
} 

E_STRICTエラーは、(あなたは無効にすることができた)とにかくスローされますが、PHPは、あなたが、とにかくそれを実行するためのもの負いません。

関連する問題