2012-05-08 11 views
1
<?php 

class MyClass 
{ 
    static function test() 
    { 
     echo "Victor"; 
    } 

    static function result() 
    { 
     echo "My name is ".self::test(); 
    } 
} 

MyClass::result(); 

?> 

私はなぜself::test()がコマンドの残りの部分の前に実行されるのか、それとも他の方法で実行されるのか混乱しています。コメントには事前に感謝します。この関数呼び出しの操作の順序は何ですか?

+0

試しましたか?このコードを実行すると、どのような結果が得られますか? – liquorvicar

+0

@liquorvicar:実際にはタイプミスがありました。私はなぜちょうど混乱しています。 – stanigator

+0

define * command *、あなたは 'echo'か' MyClass :: result(); '文を意味しますか? – Yoshi

答えて

1

エコーアウトする必要がある文字列を取得するには、「準備済み」にする必要があるためです。出力の前に、その戻り値が何であるかを知る必要があります。最初に実行され、結果は文字列に含まれます。実際には、self::test();は値を返しませんが、テキストをエコーし​​ます。

+0

あなたはその推論のリンクを持っていますか?それとも、すでにphp.netのechoマニュアルに文書化されていますか? – stanigator

+0

> void echo(string $ arg1 [、string $ ...]) >すべてのパラメータを出力します。あなたがしようとしているのは 'void echo(Myclass :: test()) 'と同じです。なぜなら、最初に実行される理由です。 – Leri

+0

@stanigator:文字列連結 'xを実行しています。 y 'である。これを行うには、PHPは式 'x'と' y'を評価する必要があります。 'x'は単なる文字列リテラルなので、すぐに値を持ちます。しかし、 'y'は関数呼び出しであるため、実行されなければならず、戻り値*(あれば)が' x'に追加されます。次に、連結の結果は 'echo'ed(' echo x .y')です。 'test()'自体に 'echo'が含まれているので、最初にこの値が表示されます。 –

関連する問題