0

PHP.netで静的キーワードに関する文を理解できないという問題があります。このリンクで、PHP.net静的キーワードについて説明すると、彼らの言うことはすべて理解できましたが、「他のPHP静的変数と同じように」。誰かがコード例を手伝ってくれたら、私はそれを理解できませんでした。mabyeの説明は素晴らしいでしょう。

4

2 に答える 2

3

「他の静的変数と同様に」と言うとき、マニュアルは関数内の静的変数を指します。典型的な例は、内部カウンターを保持する関数です。

function foo() {
    static $counter = 0; // static variable
    return ++$counter;
}

このような静的変数と静的クラス プロパティはどちらも、初期化できる式に制限があります。

function foo() {
    static $counter = getInitialValue(); // ERROR: not possible!
    return ++$counter;
}

このようなことをする必要がある場合、通常の回避策は

function foo() {
    static $counter; // not initialized explicitly, same as = null
    if ($counter === null) { // three equals!
        $counter = getInitialValue();
    }
    return ++$counter;
}
于 2012-05-25T07:42:12.040 に答える
1

基本的に、これを行うことができます:

class Foo
{
    public static $my_static = 'foo';

    public function staticValue() {
        return self::$my_static;
    }
}

where$my_staticは value の文字列として初期化されますfoo。しかし、あなたはできません:

class Foo
{
    public static $my_static = substr('food',0,3);

    public function staticValue() {
        return self::$my_static;
    }
}

$my_staticへの関数呼び出しの結果が含まれていることを期待しますsubstr。関数の戻り値を静的変数に直接代入することは不正な操作です。同様に、次のことはできません。

class Foo
{
    public static $my_static = 'foo';
    public static $my_static_2 = $my_static;

    public function staticValue() {
        return self::$my_static;
    }
}

別の変数を指すことによって静的変数を初期化することはできないためです。

于 2012-05-25T07:42:24.223 に答える