Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP OOP属性常量用法_Php_Oop_Constants - Fatal编程技术网

PHP OOP属性常量用法

PHP OOP属性常量用法,php,oop,constants,Php,Oop,Constants,我对OOP真的很陌生。我甚至都不是新手——我不是新手。所以我想把我的伪CMS从“普通”编程转移到OOP编程系统中。因此: private static $dsn = DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME; 问题出在哪里?约束的使用?我不知道。我的编辑器(aptana studio)在1常量后显示错误。谢谢 编辑: 谢谢你的快速反应。我会在承包商那里做的 编辑2: 但是如果我想使用singleton呢?如何将参数传递给构造函数?问题是,当您将属性

我对OOP真的很陌生。我甚至都不是新手——我不是新手。所以我想把我的伪CMS从“普通”编程转移到OOP编程系统中。因此:

private static $dsn = DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME;
问题出在哪里?约束的使用?我不知道。我的编辑器(aptana studio)在1常量后显示错误。谢谢

编辑:

谢谢你的快速反应。我会在承包商那里做的

编辑2:


但是如果我想使用singleton呢?如何将参数传递给构造函数?

问题是,当您将属性放入初始值设定项字段时,它们必须是内联常量

你所做的不会起作用,但举例来说,这会:

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;
    }
}

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

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

请参阅:

该声明可能包含一个初始化,但该初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且必须不依赖于运行时信息才能进行计算

定义类属性时不能连接字符串

文件中的示例(完整性):


+1请注意,在构造函数中设置静态成员可能没有意义,因为这样您就不能假设静态方法等在类被实例化之前会正常运行。但是php没有静态初始值设定项或任何东西,所以很难实现
<?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;
}

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