PHP OOP属性常量使用

时间:2010-05-19 15:15:53

标签: php oop constants

我是OOP的新手。我甚至不是新手 - 我是菜鸟。所以。我想将我的伪CMS从“普通”编程转移到OOP编程系统。所以:

private static $dsn = DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME;

这会导致什么问题?使用约束?我不知道。我的编辑器(aptana studio)在1个常量后显示错误。感谢

编辑:

感谢您的快速反应。我会在contructor中做。

EDIT2:

但是,如果我想使用单身人士怎么办?如何将参数传递给contructor?

3 个答案:

答案 0 :(得分:3)

所有变量声明必须完全静态。这意味着不使用常量,变量或其他可变项。

要制作不完全是纯文本的内容,您应该使用构造函数。

答案 1 :(得分:2)

问题是,当您将属性放入初始化字段时,属性必须是内联常量。

你正在做什么是行不通的,但是,例如,这会:

private static $dsn = 'mysql:host=localhost;dbname=mydb';

我知道,这很愚蠢,但你甚至不能使用PHP常量。你必须以纯文本形式提供它。

解决方法是在类的构造函数中初始化$dsn,如下所示:

class MyClass
{
    public function __construct()
    {
        self:: $dsn = DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME;
    }
}

答案 2 :(得分:1)

请参阅documentation

  

此声明可能包括初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且必须不依赖于运行时信息才能进行评估。

定义类属性时无法连接字符串。

文档示例(for completness):

<?php
class SimpleClass
{
   // invalid property declarations:
   public $var1 = 'hello ' . 'world';
   public $var2 = <<<EOD
hello world
EOD;
   public $var3 = 1+2;
   public $var4 = self::myStaticMethod();
   public $var5 = $myVar;

   // valid property declarations:
   public $var6 = myConstant;
   public $var7 = array(true, false);

   // This is allowed only in PHP 5.3.0 and later.
   public $var8 = <<<'EOD'
hello world
EOD;
}

?>

无论如何,当你切换到OOP时,你不应该使用常量。将这些值传递给类的构造函数:

public function __construct($db_type, $db_host, $db_name) {
    self::$dsn = $db_type.':host='.$db_host.';dbname='.$db_name;
}