可能性の重複:私はクラス変数に文字列を連結する場合は、上記のコードが動作していない
Cannot use concatenation when declaring default class properties in PHP?連結
class Db extends PDO {
protected $dsn = "mysql:host=".HOST.";dbname=".DB;
}
。 これを修正する方法。
可能性の重複:私はクラス変数に文字列を連結する場合は、上記のコードが動作していない
Cannot use concatenation when declaring default class properties in PHP?連結
class Db extends PDO {
protected $dsn = "mysql:host=".HOST.";dbname=".DB;
}
。 これを修正する方法。
PHPはコンパイル時にこのような操作を行いません。たとえすべての演算子が定数であっても、演算値をコンマに割り当てることはできません。
"クラスメンバ変数は"属性 "と呼ばれ、"属性 "や"フィールド "などの他の用語を使用して参照することもできますが、この参照の目的では「プロパティ」を使用します。 この宣言には初期化が含まれている可能性がありますが、この初期化は定数値でなければなりません。つまり、次のときに評価できる必要があります。時間をコンパイルし、評価するためにランタイム情報に依存してはいけません。 ---あなたは何ができるかphp.net documentation
<?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;
}
?>
ではなく、コンストラクタに初期化を移動..です
:もちろん
class Db extends PDO {
protected $dsn;
public function __construct() {
$this->dsn = "mysql:host=".HOST.";dbname=".DB;
parent::__construct($this->dsn);
}
}
を必要になります親コンストラクタを実際に必要な適切な引数で呼び出す必要があります。
ありがとう – TPSstar
:
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();
それは動作しませんどのように? –
クラスのプロパティを宣言して初期値を指定すると、操作(連結など)を行うことはできません。代わりにコンストラクタで行います。 – kapa