Correction status:Uncorrected
Teacher's comments:
<?php //1、创建一个对象的模板-----没有实例化 //$this :谁实例化类,就是谁,他是一个对象,比如$student =new students(),%this指的是$student //parent :是指向父类的指针,一般我们使用parent来调用父类的构造函数。 class Students { //属性 public $name,$age,$gender,$bhw; //方法 public function hobby($hobby){ return '他爱好是' . $hobby; } } // 实例化,并赋值,可以直接赋值在字符串拼接里面 $student = new Students(); //实例化必须有 //$student->name = '小明'; //$student->age = 18; //$student->gender = '男'; //$student->bhw = [10,20,30]; //$student->hobby('吃***'); //访问,字符串拼接 $res = '学生信息'; $res .= '<br>姓名:'.$student->name = '小明'; //第一个不用 .= 拼接,直接等号就可以 $res .= '<br>年龄:'.$student->age=18; $res .= '<br>性别:'.$student->gender='男'; $res .= '<br>三围:'.var_export($student->bhw = [10,20,30],true); $res .= '<br>爱好:'.$student->hobby('吃***'); echo $res; echo '<hr>'; // 构造方法 ---- __construct class Students_1 { //属性 public $name,$age,$gender,$bhw; //构造方法 __construct:调用立即执行 public function __construct($name,$age,$gender,$bhw) { $this->name=$name; $this->age=$age; $this->gender=$gender; $this->bhw=$bhw; // echo $this->getInfo(); //直接运行这里调用打印函数。 } public function hobby($hobby){ return '他爱好是' . $hobby; //函数必须返回数值 } public function getInfo(){ $res = '父函数:学生信息'; $res .= '<br>姓名:'. $this->name; //第一个不用 .= 拼接,直接等号就可以 $res .= '<br>年龄:'.$this->age; $res .= '<br>性别:'.$this->gender; $res .= '<br>三围:'.print_r($this->bhw,true); $res .= '<br>爱好:'.$this->hobby('吃牛粪'); $res .='<br>-----分割线-----'; return $res; //必须给给类返回数值,不然$this->getInfo不能调用 } } $student1 = new Students_1('笑二','19','女',[20,20,20]); //echo '<br>单独调用类里面的hobby函数:'; //echo $student1->hobby('喝酒'); //单独输出getInfo() echo $student1->getInfo(); echo '<hr>'; //类的功能扩展:继承(继承一下class Students_2) // 被扩展的类叫父类, 超类,或基类 // 扩展的类叫子类, 派生类 // 在扩展子类中, 父类中的public属性成员,可以直接使用 // 如果仅是简单的继承, 子类并没有添加新的属性或方法, 就失去了继承的意义 // 继承的本质是代码复用 class SubStudents_1 extends Students_1 { private $ac; //添加一个新属性:成绩 public function __construct($name,$age,$gender,$bhw,$ac) { // $this->name=$name; // $this->age=$age; // $this->gender=$gender; // $this->bhw=$bhw; //用parent 继承父类__construct的所有参数和内容,包括输出函数echo this->getInfo() parent::__construct($name,$age,$gender,$bhw); //增加一个学习成绩 $this->ac=$ac; echo $this->getInfo(); //父函数和子函数只能有一个getInfo(),主函数里有经过继承就会运行主函数里面的getInfo() } public function hobby($hobby){ return '他爱好是' . $hobby; //函数必须返回数值 } //方法的扩展叫方法重写,必须重写,不能通过parent继承内容 public function getInfo(){ $res = '扩展函数:学生信息'; $res .= '<br>姓名:'. $this->name; //第一个不用 .= 拼接,直接等号就可以 $res .= '<br>年龄:'.$this->age; $res .= '<br>性别:'.$this->gender; $res .= '<br>三围:'.print_r($this->bhw,true); $res .= '<br>爱好:'.$this->hobby('吃肉'); $res .= '<br>成绩:'.$this->ac ; return $res; //必须给给类返回数值,不然$this->getInfo不能调用 } } $student2 = new SubStudents_1('马东明','29','未知',[31,22,60],48); echo '<hr>'; //封装技术 //将 public(公众属性) 改成 private(私有属性) 或者 protected(局部属性) //先简单粗俗的描述下: //public 表示全局,类内部外部子类都可以访问; //private表示私有的,只有本类内部可以使用; //protected表示受保护的,只有本类或子类或父类中可以访问; class Students_2 { //属性 public $name; protected $age; protected $bhw; protected $gender; //构造方法 __construct:调用立即执行 public function __construct($name,$age,$gender,$bhw) { //不想类外部查看三围 $bhw,设置$bhw为 private $this->name=$name; $this->age=$age; $this->gender=$gender; $this->bhw=$bhw; echo $this->getInfo(); //直接运行这里调用打印函数。 } public function hobby($hobby){ return '他爱好是' . $hobby; //函数必须返回数值 } public function getInfo(){ $res = '父函数:学生信息'; $res .= '<br>姓名:'. $this->name; //第一个不用 .= 拼接,直接等号就可以 $res .= '<br>年龄:'.$this->age; $res .= '<br>性别:'.$this->gender; $res .= '<br>三围:'.print_r($this->bhw,true); $res .= '<br>爱好:'.$this->hobby('吃牛粪'); $res .='<br>'; return $res; //必须给给类返回数值,不然$this->getInfo不能调用 } //想在外部访问类属性或函数,必须给他用函数做一个接口,来供外部访问 public function getsw(){ return print_r($this->bhw,true); } } $students_2 = new Students_2('马冬梅','5','女',[88,77,50]); echo $students_2->name . '<br>'; //访问不了 私有变量 echo $students_2->bhw; //也访问不了受保护类型变量 echo $students_2->gender //外部访问getsw()函数,public getsw()是全局属性,所以可以通过它间接访问$bhw三围数据。 echo '三围属性是:'.$students_2->getsw().'<hr>'; //扩展上面的类,测试protected 使用方法 class subStudents_2 extends Students_2 { //添加一个属性:漂亮程度和ID private $id; private $bui; //父函数$age使用protected ,看这里是否能正常使用?看似有变量$bhw是否正常使用 public function __construct($name, $age, $gender, $bhw,$bui,$id) { parent::__construct($name, $age, $gender, $bhw); $this->bui=$bui; $this->id = $id; //子类不能使用父类private 定义的$bhw //$this->bhw=$bhw; echo $this->getsw(); } //重写获取三围函数 public function getsw(){ if ($this->id=== 001){ echo $this->name.'美丽度是:'.$this->bui; }else{echo '你不是大象管理员,禁止观看大象美丽度';} } } //用变量表示也行 $qq = [ 'id'=>001, 'name'=>'大象', 'age'=>88, 'gender'=>'公', 'bhw' => [77,88,99], 'bui' => 'AAAAA' ]; $subs_2 = new subStudents_2($qq['name'],$qq['age'],$qq['gender'], $qq['bhw'],$qq['bui'],$qq['id']);
点击 "运行实例" 按钮查看在线实例