php class $ this-> regex无效

时间:2016-11-03 04:24:50

标签: php

我在我的课程中遇到一个问题,即在函数内部使用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");

2 个答案:

答案 0 :(得分:1)

你将正则表达式var声明为static(并且它错过了$,但我认为这是一个不同的错误)。静态变量不能作为对象属性($this->regex)访问,但它可以作为$ regex使用,因为您正在第二个函数的范围内定义它。

因此,如果要将其用作属性,可以通过删除static修饰符来解决问题。否则,您可以使用self::$regexObject::$regex从对象内部的任何位置静态访问它(后者也在对象之外,但只有在公共场所之外)。

答案 1 :(得分:1)

截至the docs

  

将类属性或方法声明为静态使它们可以访问,而无需实例化类。声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以)。

要在您尝试立即执行此操作时从您班级中的非private static上下文访问static属性,您应该使用

访问它
self::$regex

或者您可以将$regex媒体资源重新声明为仅private(非static),然后您就可以$this->regex

访问它