Php die函数是否只接受字符串?
此代码适用于:Php die函数是否只接受字符串?,php,mysqli,Php,Mysqli,此代码适用于: if (isset($db->error)) { echo $db->error; } 此代码不工作: if (isset($db->error)) { die($db->error); } 这是我的DB类: class Db { private $db, $error; public function __construct() { return $this->db
if (isset($db->error)) {
echo $db->error;
}
此代码不工作:
if (isset($db->error)) {
die($db->error);
}
这是我的DB类:
class Db {
private $db,
$error;
public function __construct() {
return $this->db = new mysqli(DB_SERVER, DB_USER, DB_PASS, D_NAME);
if ($this->db->connect_error) {
$this->error = $this->db->connect_error;
}
}
}
“D_NAME”是错误的,因此出现了一个错误,但我没有关闭页面,错误后内容仍然出现。为什么?谢谢 构造函数中的
if
块永远不会执行,因为您正在返回$this->db
:
public function __construct() {
return $this->db = new mysqli(DB_SERVER, DB_USER, DB_PASS, D_NAME);
// the lines after return will never be executed!
}
这是$db->error
未设置的第一个原因
第二个原因是$error
成员是private
,这意味着不允许您直接访问此属性。因此,您应该通过以下方式之一(至少)使其可访问:
- 公开,李>
- 实施科学和神奇的方法李>
- 实现一个getter方法
$error
class Db {
private $db;
public $error;
public function __construct() {
$this->db = new mysqli('localhost', 'sss3', 'a4J1uQzQCasD', 's3_small');
if ($this->db->connect_error) {
$this->error = $this->db->connect_error;
}
return $this->db;
}
}
$db = new Db;
if (isset($db->error)) {
die($db->error);
}
echo 'xxx', PHP_EOL;
使用\u isset
和\u get
魔术方法
class Db {
private $db;
private $error;
public function __construct() {
$this->db = new mysqli('localhost', 'sss3', 'a4J1uQzQCasD', 's3_small');
if ($this->db->connect_error) {
$this->error = $this->db->connect_error;
}
return $this->db;
}
public function __get($key) {
if ($key === 'error') {
return $this->error;
}
}
public function __isset($key) {
if ($key === 'error') {
return isset($this->error);
}
}
}
$db = new Db;
if (isset($db->error)) {
die($db->error);
}
echo 'xxx', PHP_EOL;
实现getter方法
getter方法只是返回私有成员值的方法。在我们的例子中,它是$error
。因此,您可以将其保留为私有,但可以添加一个方法来访问其值。例如:
public function getError() {
return $this->error;
}
非常感谢。这让我明白了很多。非常感谢:)你为什么会提到魔术,而你却没有得到/设置者?@Robert,好吧,我不妨提到图案设计。但是我刚刚添加了关于getters=)的信息,啊,这里不需要setters。我怀疑他是否希望用户将其错误设置为DBAL。谢谢。使用getter仍然比使用magic方法或public方法要好property@Robert,优先权的问题