我遇到了扩展MySQLi类的问题。它不会让我添加任何属性。
class MySQLii extends MySQLi {
public $database;
public function MySQLii($host, $username, $password, $database){
// Initialize MySQLi
parent::MySQLi($host, $username, $password, $database);
// Save database name
$this->database = $database;
}
}
$mysqlii = new MySQLii('localhost', 'root', 'password', 'database');
var_dump($mysqlii);
对象(MySQLii)#1(17){
[ “affected_rows”] => INT(0)
[ “CLIENT_INFO”] =>串(48) “mysqlnd 5.0.5-dev - 081106 - $ Revision:289630 $“ [ “client_version”] => INT(50005)
[ “connect_errno”] => INT(0)
[ “connect_error”] => NULL
[ “错误号”] => int(0)[“error”] =>
string(0)“”[“field_count”] =>
int(0)[“host_info”] =>串(42) “MySQL主机信息:通过UNIX的Localhost socket“[”info“] => NULL
[ “INSERT_ID”] => INT(0)
[ “SERVER_INFO”] => string(6)“5.1.44” [ “SERVER_VERSION”] => INT(50144)
[ “SQLSTATE”] => string(5)“00000”
[ “PROTOCOL_VERSION”] => INT(10)
[ “的thread_id”] => INT(4019)
[ “WARNING_COUNT”] => int(0)}
请注意,我在MySQLii构造函数中添加了database
属性。我错过了什么吗?
答案 0 :(得分:1)
显然扩展MySQLi类使得无法添加其他属性。糟糕的PHP。坏。
答案 1 :(得分:0)
嗯,要么我错过了某些内容,要么命名了构造函数MySQLii
而不是__construct
。 (这不是Java;))
适当地重命名可以解决问题,因为它看起来好像没有调用你的构造函数。
答案 2 :(得分:0)
我刚刚通过扩展两个类(根据PHP 5.3和5.2)为MySQLi
和MySQLi_STMT
创建了一个包装器。我可以确认,当您使用var_dump
转储变量时不会出现变量,类方法可以像任何其他普通对象一样访问变量而没有问题。
class Foo extends MySQLi
{
public $var = 'blah';
public function blah()
{
echo $this->var;
}
}
$foo = new Foo();
echo $foo->var;
$foo->blah();
从类外部访问变量也可以按预期工作。只要您通常不使用var_dump
来确定存在哪个变量或其他非正统功能,只需按照惯例进行编码,您就没有问题。