2016-11-03 5 views
0

static private変数が関数内で使用されているクラスで問題が発生しましたが動作しません。しかし、それは正規表現が直接その内部にあるときに機能します。

class Object{ 
    static private $regex = "/\w+|\-\d+/"; 

    //does not work (NULL) 
    public function tokenize($text){ 
    preg_match_all($this->regex, $text, $matches); 
    var_dump($matches); 
    } 

    //works 
    public function tokenize($text){ 
    $regex = "/\w+|\-\d+/"; 
    preg_match_all($regex, $text, $matches); 
    var_dump($matches); 
    } 
} 

$o = New Object; 
$o->tokenize("test text -123"); 
+0

回答を受け入れてください。私は特にこの質問について話しているわけではありませんが、あなたの良い質問があります。 –

答えて

1

静的クラスのインスタンス化の必要なしにアクセスすることができますクラスのプロパティやメソッドを宣言。 staticとして宣言されたプロパティは、インスタンス化されたクラスオブジェクトではアクセスできません(静的メソッドでも可能です)。あなたは今、この権利をやろうとしているとして、あなたは

self::$regex 

でそれにアクセスする必要がありますまたはあなたがするあなたの$regexプロパティを再宣言でき、あなたのクラス内で非static文脈からprivate staticプロパティにアクセスするには

privatestatic以外)のみアクセスできます。$this->regex

1

あなたはstaticとして正規表現VARを宣言した(そしてそれは$を欠けているが、私はそれは違う間違いだと思います)。静的変数はオブジェクト属性($this->regex)としてアクセスすることはできませんが、2番目の関数の範囲で直接定義するので、$ regexとして機能します。

属性として使用する場合は、static修飾子を削除して問題を解決できます。それ以外の場合は、self::$regexまたはObject::$regexを使用してオブジェクト内のどこからでも静的にアクセスすることができます(後者はオブジェクトの外側にありますが、公開されている場合のみ)。 the docsのよう

+0

確かに 'static private regex'は間違いでした。' static private $ regex'に固定しましたが、 'preg_match_all ($ regex ... '' $ this-> regex'の代わりに 'static'を使うと' 'static''は動作しません – Drew

+0

私は答えを編集しました。 Object :: $ regexを使うことができます –

関連する問題