代码之家  ›  专栏  ›  技术社区  ›  Johannes Gorset

扩展mysqli

  •  0
  • Johannes Gorset  · 技术社区  · 16 年前

    我在扩展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){
    [“受影响的行”]=>int(0)
    [“客户端信息”]=>字符串(48) “mysqlnd 5.0.5-dev-081106- $版次:289630$”
    [“客户端版本”]=>int(50005)
    [“连接错误号”]=>int(0)
    [“连接错误”]=>空
    [“errno”]=>整数(0)[“error”]=>
    字符串(0)“[”字段计数“]=>
    int(0)[“主机信息”]=>字符串(42) “mysql主机信息:通过unix的本地主机 套接字“[“info”]=>空
    [“插入ID”]=>整数(0)
    [“服务器信息”]=>字符串(6)“5.1.44” [“服务器版本”]=>int(50144)
    [“sqlstate”]=字符串(5)“00000”
    [“协议版本”]=>int(10)
    [“线程ID”]=整数(4019)
    [“警告计数”]=>整数(0)}

    请注意 database 我在mysqlii构造函数中添加了属性。我遗漏了什么吗?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Johannes Gorset    16 年前

    显然,扩展mysqli类使添加其他属性变得不可能。不良PHP。坏的。

        2
  •  0
  •   middus    16 年前

    嗯,要么我漏掉了什么,要么你给你的构造器起了名字 MySQLii 而不是 __construct . (这不是Java;)

    适当地重命名它可以解决这个问题,因为看起来好像没有调用构造函数一样。

        3
  •  0
  •   rickchristie    15 年前

    我刚做了一个包装 MySQLi 和 MySQLi_STMT 通过扩展这两个类(根据php 5.3和5.2)。我可以确认,当你用 var_dump ,类方法像访问任何其他普通对象一样访问变量,没有问题。

    class Foo extends MySQLi
    {
        public $var = 'blah';
    
        public function blah()
        {
            echo $this->var;
        }
    }
    
    $foo = new Foo();
    echo $foo->var;
    $foo->blah();
    

    从类外部访问变量也可以按预期工作。只要你平时不使用 瓦尔转储 要找出哪个变量存在或其他非正统功能,只需像平常一样编写代码,就不会有问题。

    推荐文章