public function execute(PwThreadDataSource $ds) {
$this->_ds = $ds;都说php声明变量的时候不要指明类型,那这个参数为什么指明了为 PwThreadDataSource类型?而且这是个抽象类,抽象类不是不能声明对象的吗?没搞懂,难道多态?
abstract class PwThreadDataSource { protected $urlArgs = array(); /**
 * 获取帖子统计数
 *
 * @return int
 */
abstract public function getTotal();

/**
 * 获取帖子
 *
 * @param int $limit 获取条目
 * @param int $offset 帖子起始偏移量
 * @return array
 */
abstract public function getData($limit, $offset);

解决方案 »

  1.   

    抽象类中是可以有包含具体实现的方法,也可以有只能被覆盖的方法。这也是抽象类和接口明显的区别
    参数类型限制,这个不论是接口,抽象类,函数,方法,在5.3+以上版本都可以使用,不过目前只能声明 array object 这两种.PwThreadDataSource就是属于object
      

  2.   

    哪不就相当于C#里面声明一个变量  int i; 这种方法了吗
    php里面不是直接这么用就可以了吗  $a 
    可是上面的例子,前面加了一个变量类型,我在php没见过这么用的,是什么意思啊
      

  3.   

    execute(PwThreadDataSource $ds)
    这个 $ds 是形参,这个声明只是为了约定调用者能传入PwThreadDataSource类或其子类的对象,以供函数内代码调用。
    这样做也是为了协调编码,至少我不用看注释或代码,就知道该传个怎样的参数进去。
      

  4.   

    对传入的对象使用类型声明,可不需要在函数内使用 is_a 函数鉴别传入对象是否合法
    而把甄别工作交予编译器完成is_a --  如果对象属于该类或该类是此对象的父类则返回 TRUE 
      

  5.   

    那我以后写代码这么写也行是吗execute(int $a)