2017-02-23 3 views
1

オブジェクトの関数が1回だけ必要な場合は、(Dispatcher::Instance())->someFunction();のようなものをよく使うので、新しい変数を「無駄にする」必要はありません。一部のインストールでこれが動作しないのはなぜですか? (Dispatcher :: Instance()) - > someFunction();

これはで中止いくつかのPHP(PHP5?)インストールで動作していないよう判明:

Parse error: syntax error, unexpected '->' (T_OBJECT_OPERATOR), expecting ',' or ';' 

私が知っている、私は変数を使用することによって、これを回避することができますが、私はそこにある理由を理解したいですエラー。リリースノートに何も見つかりませんでした。また、私は何を検索するか分からない。誰かが助けることができますか?

+0

あなただけの '()を削除し'とちょうど 'ディスパッチャ::インスタンスを()で行うことはできません - > someFunction();'?あなたが '(新しいインスタンス()) - > someMethod()'を実行していれば '()'ラッパーが必要であることが分かりました。 – Rasclatt

+0

新しいものを学びました。 – Rasclatt

+0

ここを見てくださいhttps://3v4l.org/6kePK – Deadooshka

答えて

0

これは「インスタンス化時のクラス・メンバー・アクセス」と呼ばれ、PHP v5.4.0のリリースに含まれています。 (see release notes

あなたの例で表示されているようにそれは(変数に代入することなく)クラスのインスタンス化を可能にする:

(Dispatcher::Instance())->someFunction(); 

理想的には、どこでもあなたがスタックExchangeネットワーク全体で見て、 static 'がこれらのメソッドを呼び出す方が効率的です。

Ref #1,Ref #2,Ref #3....など。ジャストの検索 - あなたの質問に答えるために>「のインスタンス上のクラスのメンバーへのアクセス」

を、このエラーがスローされ、この機能は、前php >= 5.4に存在していないとしなければならない、変数/インスタンス化のために、したがって、「要件」定義として;を閉鎖すること。


私はあなたが現在どのような決定は、これを行うために作る前に、あなたはあなたと一緒にこのアドバイス断片を取るお勧めします。

が一般的に言ったときに における方法、あなたは、静的メソッドを使用する必要があります質問は に引数として渡されていない状態とは関係がなく、具体的なインスタンスではなく、 の抽象概念と関連があります。それは であり、その機能は のものではなく、物のアイデアに関連しています。このような場合

Source: Reddit - When is it appropriate to use static methods over class member access on instantiation and vice versa?

+0

これは正しい方向に行くようです。それでも私のサーバでPHP 5.5.9で失敗していますが、私は今何を捜し求めているのか考えています。ありがとうございました。 – christian

+0

@クリスチャンそれは変だ!あなたのバージョンを確認しましたか? – Darren

関連する問題