class Say{   public $name;
   public $title;   function __construct($name,$title){    $this->name=$name;
    $this->title=$title;   }
   function eat(){     return $this->name;
   }
}$p=new Say('hello','gouzao');比如我这个类,我已经在构造方法里面初始化了我的属性,那我很搞不懂,那我最上面声明的那2个属性,还有什么用,我删掉都不会影响我的程序, 如果这几个属性只是用来声明,告诉这个类中有哪些属性的仅仅这个作用的话,那么我是不是 如何使用的构造方法的话,所有属性在里面就可以进行初始化,那么我是不是 可以把那些声明的属性,全部定义为私有的属性,因为这些属性 仅仅只是用来说明而已 是不是这样的 请高手们为我解惑啊!谢谢了

解决方案 »

  1.   

    如果你删除的话
    你的方法就错误了:   function eat(){        return $this->name;
       }
      

  2.   

    你这个例子里看不出什么差别.但是如果public换成private, 而且后面有 $p->name; 这样的就不一样了.那么,即使你属性是public, 也是应该在上面明确定义的, (php不要求明确定义只是为了兼容旧版本)
    因为,你的public属性是你的类提供给外界的一个接口, 这样别人可以一目了然地看见他可以操作那些属性,想想,如果你的construct不是只有两行,而是200行,别人如何能一眼看见你这里有个->name可以直接引用?
      

  3.   

    你所说的,把类内的变量定义删掉。其实不会影响,因为你 构造时用了 $this->变量,不存在变量时会新建一个,这是php为弱语言所具有的特征,但写上是一个好习惯。
      

  4.   

    等于定义了接口,公共属性的也可以直接设置而不用设置用构造class Say{   public $name;
       public $title;   function __construct($name,$title){       $this->name=$name;
           $this->title=$title;   }
       function eat(){        return $this->name;
       }
    }$p=new Say('hello','gouzao');
    echo $p->eat()."<br/>";
    $p->name="world";
    echo $p->eat()."<br/>";