簡體   English   中英

php class $ this-> regex無法正常工作

[英]php class $this->regex not working

我在類內部遇到問題,其中在函數內部使用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");

您將regex var聲明為static (並且缺少$,但是我認為這是一個不同的錯誤)。 靜態變量不能作為對象屬性( $this->regex )訪問,但它可以作為$ regex使用,因為您是在第二個函數的范圍內對其進行定義的。

因此,如果您想將其用作屬性,則可以通過刪除static修飾符來解決此問題。 否則,您可以使用self::$regexObject::$regex從對象內部的任何位置(后者也位於對象外部,但僅當它是公共的)靜態地訪問它。

截至文檔

將類屬性或方法聲明為靜態使其可以訪問,而無需實例化類。 實例化的類對象無法訪問聲明為static的屬性(盡管static方法可以)。

要在嘗試立即從類中的非static上下文訪問private static屬性時,應使用

self::$regex

或者,您可以將$regex屬性重新聲明$regex private (非static ),然后可以將其作為$this->regex進行訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM