whole_func_string: function() {
      if (
        this.token === this.tok.T_NS_SEPARATOR ||
        this.token === this.tok.T_STRING ||
        this.token === this.tok.T_NAMESPACE
      ) {
        let result = this.read_namespace_name(true);
        if (this.token === this.tok.T_DOUBLE_COLON) {
          result = this.read_static_getter(result);
        }
        return result;
      } else if (this.is("VARIABLE")) {
        return this.read_variable(true, false, false);
      } else {
        this.expect([this.tok.T_STRING, "VARIABLE"]);
      }
    }
func_code_string: function() {
      if (
        this.token === this.tok.T_NS_SEPARATOR ||
        this.token === this.tok.T_STRING ||
        this.token === this.tok.T_NAMESPACE
      ) {
        let result = this.read_namespace_name(true);
        if (this.token === this.tok.T_DOUBLE_COLON) {
          result = this.read_static_getter(result);
        }
        return result;
      } else if (this.is("VARIABLE")) {
        return this.read_variable(true, false, false);
      } else {
        this.expect([this.tok.T_STRING, "VARIABLE"]);
      }
    }
func_documentation_string: Reads a class name
  ```ebnf
  read_new_class_name ::= namespace_name | variable
  ```