我是OOP的新手。我甚至不是新手 - 我是菜鸟。所以。我想将我的伪CMS从“普通”编程转移到OOP编程系统。所以:
private static $dsn = DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME;
这会导致什么问题?使用约束?我不知道。我的编辑器(aptana studio)在1个常量后显示错误。感谢
编辑:
感谢您的快速反应。我会在contructor中做。
EDIT2:
但是,如果我想使用单身人士怎么办?如何将参数传递给contructor?
答案 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;
}