Php 类属性中的串联
可能重复:Php 类属性中的串联,php,class,properties,Php,Class,Properties,可能重复: 如果在类变量中连接字符串,则上述代码无效。 如何解决这个问题。PHP在编译时不做这样的操作;即使所有运算符本身都是常量,也不能将计算值指定给常量 “类成员变量称为“属性”。您也可以看到它们使用其他术语(如“属性”或“字段”)来引用,但出于此引用的目的,我们将使用“属性”“。它们是通过使用关键字public、protected或private中的一个来定义的,后跟一个普通变量声明此声明可能包括一个初始化,但此初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且不能依赖
如果在类变量中连接字符串,则上述代码无效。
如何解决这个问题。PHP在编译时不做这样的操作;即使所有运算符本身都是常量,也不能将计算值指定给常量 “类成员变量称为“属性”。您也可以看到它们使用其他术语(如“属性”或“字段”)来引用,但出于此引用的目的,我们将使用“属性”“。它们是通过使用关键字public、protected或private中的一个来定义的,后跟一个普通变量声明此声明可能包括一个初始化,但此初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且不能依赖运行时信息进行计算。” ---
您可以做的是将初始化移到构造函数中。PHP在编译时不执行此类操作;您无法将计算值分配给constants,即使所有运算符本身都是常量 类成员变量称为“属性”。您也可能会看到它们使用其他术语,如“属性”或“字段”,但在本参考中,我们将使用“属性”。它们是通过使用关键字public、protected或private中的一个来定义的,后跟一个普通变量声明此声明可能包括一个初始化,但此初始化必须是一个常量值——也就是说,它必须能够在编译时进行计算,并且不能依赖运行时信息进行计算。” ---
您可以做的是将初始化移到构造函数中。将初始化移到构造函数中:
class Db extends PDO {
protected $dsn;
public function __construct() {
$this->dsn = "mysql:host=".HOST.";dbname=".DB;
parent::__construct($this->dsn);
}
}
当然,您需要实际使用父构造函数所需的正确参数调用它。在构造函数中移动初始化:
class Db extends PDO {
protected $dsn;
public function __construct() {
$this->dsn = "mysql:host=".HOST.";dbname=".DB;
parent::__construct($this->dsn);
}
}
当然,您将需要使用所需的正确参数实际调用父构造函数。重写派生DB类构造函数以使用DSN初始化PDO:
class DB extends PDO {
public function __construct() {
// Optional, but cool way to initialize client encoding
$options = array(self::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "utf8"');
parent::__construct('mysql:host='.HOST.';dbname='.DB, $options);
}
}
// Usage
$db = new DB();
重写派生DB类构造函数以使用DSN初始化PDO:
class DB extends PDO {
public function __construct() {
// Optional, but cool way to initialize client encoding
$options = array(self::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "utf8"');
parent::__construct('mysql:host='.HOST.';dbname='.DB, $options);
}
}
// Usage
$db = new DB();
声明类的属性并指定初始值时,不能执行任何操作(如连接)。请改为在构造函数中执行。声明类的属性并指定初始值时,不能执行任何操作(如连接)。请改为在构造函数中执行。