问题是这样的我现在需要定义一个类假如叫做get_contents,这个类要继承mysqli,mysqli_result,mysqli_stmt三个类,我不想一层一层的继承,想一次性的将这三个类的成员属性和方法都继承过来,怎么办啊,请高手指点!

解决方案 »

  1.   

    php不支持多继承,可以使用 接口实现
      

  2.   

    为什么下载文件时老会出现PHP文件呢?
      

  3.   

    请详细说明一下get_contens怎样通过接口interface继承mysqli,mysqli_result,mysqli_stmt这三个类得成员属性和方法,好吗?
      

  4.   

    请详细说明一下get_contens怎样通过接口继承mysqli,mysqli_result,mysqli_stmt这三个类的成员方法和属性好吗?
      

  5.   

    首先,多继承,如 #1 楼、#2 楼所说,在 PHP 里是不可能的。其次,用接口,未必是针对楼主这个问题的适当解决方法。理由很简单:“继承(或者说扩展)”才是用来解决“代码重用”的,也就是说,当系统发生变化时,callee 原本的实现代码无需改造,而是通过增加新的扩展来重用原来的代码;而“接口”是用来解决“设计重用”的,也就是说,当系统发生变化时,caller 和 callee 双方都不必因为对方的改变而改造。最后回到楼主这个具体的问题,不知道你这个“mysqli/mysqli_result/mysqli_stmt 三合一”的问题只是随手拿来说的,还是真要这样设计,这个设计说实话并不符合 OO 设计思想,也就是说,你这个目标并不合理。PHP 并不是一种完整意义上的 OO 语言,但它的 OO 特性很实用,在绝大多数场合也是够用的。如果楼主能提出一个合理的设计需求,一般来说应该能找到适当的用法。
    ————————————————————————————————
    基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
      

  6.   

    回七楼,敝人现在做一个东东正是需要mysqli面向对象的方式连接数据库,首先get_contents类需要继承mysqli类的属性和方法进而连接数据库,但是今天敝人看了一下,如果要连接数据库并执行需要的操作需要几个类合起来才能搞就是需要mysqli/mysqli_result/mysqli_stmt 这三个类,才能完成全部所需的功能,而这个三个类都是系统自带的类,敝人不知道源代码,所以只有重用其代码了,但是不知怎样将此三类连接起来!
      

  7.   

    MySQLi / MySQLi_STMT / MySQLi_Result 这三个确实是 PHP 自带的三个 Class,它们已经是 OO 的编程界面形式了,三者各司其职,已经很好了,似乎没有必要强行把它们捏到一个 Class 里面去。如果你想把它们提供的功能包装成一个“高级类”,用起来更简单方便,那正确的做法不是试图去同时继承这三个类,而是定义自己的编程界面,然后在实现的时候适当使用这三个类。这大体上是一种叫做 DAO 的设计思想(Data Access Objects)。你定义的这个类,应该提供更“高级”的数据访问方式,而不是简单地把那三个类的功能直接再呈现出来,对吧?
      

  8.   

    九楼说的DAO新玩意,首次听说,打开眼界啊,说实话我也不会DAO这样真实超出了我的能力所及的范围,不过还是感谢!好在mysqli有面向对象和面向过程两种方法,所以我就定义一个类使用mysqli的面向对象的函数了!
      

  9.   

    恩,是的,我在设计模式一书上看到了,是可以这样做,也只能这样做
    class get_contents {
          public $mysqli;
          public $mysqli_result;
          public $mysqli_stmt;
       fuction _construct(mysqli $mysqli,mysqli_result $mysqli_result,mysqli_stmt $mysqli_stmt){
             $this->mysqli=$mysqli;
             $this->mysqli_result=$mysqli_result;
             $this->mysqli_stmt=$mysqli_stmt;
            }      function name(){
             //这里就可以引用以上类的方法和属性,下面举例           $this->mysqli->query("set names 'utf-8'");
                            }}使用get_contents这个类是首先要实例化先前的三个类!