【问题标题】:OOP can't use define in variableOOP 不能在变量中使用定义
【发布时间】:2011-05-27 16:55:51
【问题描述】:

为什么在类中创建变量时不能使用defines?我能做些什么来克服这个问题? (定义是表前缀(db))

像这样:

class foo {
    public $bar = FOO."bar";
}

这给了我以下错误:

解析错误:语法错误,意外 '.',期待 ',' 或 ';'

【问题讨论】:

  • 它叫做constantdefine()是制作常量的函数。

标签: php oop class variables


【解决方案1】:

您只能使用常量表达式声明属性。在这里,连接运算符是非法的(因此会出现解析错误),而不是 FOO 常量。

public $bar = FOO."bar";

解决这个问题的一种方法是在构造函数中对其进行初始化。您仍然可以使用该常量,并将其与您的字符串连接起来。

class foo {
    public $bar;

    public function __construct() {
        $this->bar = FOO."bar";
    }
}

【讨论】:

    【解决方案2】:

    并不是你不能使用defines。初始化变量时不能使用运算符。

    【讨论】:

      【解决方案3】:

      可以使用构造函数来初始化值:

      <?php
      define("FOO", "test");
      
      class foo {
          public $bar;
      
          function __construct()
          {
              $this->bar = FOO . "bar";
          }
      }
      
      var_dump(new foo());
      

      【讨论】:

        【解决方案4】:

        如上所述,不能使用运算符定义类变量,如果值需要是动态的,那么赋值必须发生在函数中。

        使用常量时,使用类常量而不是在全局范围内定义常量会很有用。它们使用关键字const 定义,并使用self:: 运算符进行访问。

        class foo 
        {
            const BAR = 'test';
        
            public $baz;
        
            public function __construct()
            {
                $this->baz = self::BAR . 'bat';
            }
        
        }
        

        类常量也可以在实例外部静态访问:foo::BAR,因此您可以在其他上下文中使用类中的常量,但不会像define 定义的常量那样自动在全局范围内。

        $some_var = foo::BAR;
        echo $some_var;
        // output: test
        

        【讨论】:

          猜你喜欢
          • 2019-09-18
          • 2015-11-17
          • 1970-01-01
          • 2015-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-05
          相关资源
          最近更新 更多