批改状态:合格
老师批语:可以添加一点静态成员的内容
作业内容:1、练习课上所学知识
可用public、protected、private来修饰对象的属性和方法,使用不同修饰符的属性和方法,其可被访问的权限也不同:
public修饰的属性和方法可以在任何地方调用,如果在类中的属性和方法前面没有修饰符,则默认修饰符为public。protected修饰的属性和方法可在本类和子类中被调用,在其他地方调用将会报错。private修饰的属性和方法只能在本类中被访问。
<?php// 定义一个父类class Father{public $name; // 姓名(公有)private $age; // 年龄(私有)protected $weight; // 体重(保护)// 构造函数public function __construct($name, $age, $weight){$this->name = $name;$this->age = $age;$this->weight = $weight;}// 根据属性名获取属性值public function get($key){return $this->$key;}}class Son extends Father{// 为了跟父类区别开,重新定义了一个相同功能的方法public function key($key){return $this->$key;}public function get_weight(){return $this->weight;}}$obj1 = new Father('sunny', 22, '60kg');echo $obj1->name; //输出sunny// echo $obj1->age; //将会报错:Cannot access private property Father::$age,因为age是私有的// echo $obj1->weight; //将会报错: Cannot access protected property Father::$weight,因为weight是受保护的echo $obj1->get('age'); //但可以通过公用方法访问echo $obj1->get('weight'); //但可以在子类内部调用// --------------华丽的分隔线------------------------------$obj2 = new Son('rain', 23, '70kg');echo $obj2->name; // 输出rainecho $obj2->key("weight"); // 输出70kg,因为weight是protected,可以继承到子类// echo $obj2->key('age'); // 报错,Undefined property: Son::$age,age变量只能在父类中使用,没有继承到子类echo $obj2->get('age'); // 输出23,因为这个是调用父类了,所以可以正常显示?>
把一个类作为公共基类,其他的类继承自这个类,则其他类中都具有这个基类的属性和方法,其他类也可各自额外定义自己不同的属性和方法。
类的继承使用关键词extends,在子类中可使用parent访问父类的方法。在子类中可重写父类的方法。
<?php// 定义一个父类class Father{public $name; // 姓名(公有)private $age; // 年龄(私有)protected $weight; // 体重(保护)// 构造函数public function __construct($name, $age, $weight){$this->name = $name;$this->age = $age;$this->weight = $weight;}public function like(){echo "我爱编程";}public function age(){echo $this->name .'今年'. $this->age . '岁了';}protected function get($key){return $this->$key;}// 根据$key设置值$valuepublic function set($key, $value){$this->$key = $value;}}// 子类继承父类class Son extends Father{// 重写父类方法public function get($key){echo $this->$key;}public function what(){echo parent::like(); // 访问父类方法}public function getAge(){$this->age(); // 调用父类继承来的方法}}// 子类会调用父类构造函数初始化实例$obj = new Son('sunny', 22, '60kg');$obj->get('name'); // 子类get方法输出sunny$obj->what(); // 子类what()方法内调用父类like()方法$obj->set('age', 33); // 直接调用父类继承来的方法$obj->getAge(); // 子类getAge()方法调用子类从父类继承来的age()方法?>
这里需要再介绍一个关键词
final,加在方法前,则该方法不允许重写,如果加在类前,则该类不允许被继承
多态通过继承复用代码而实现,可编写出健壮可扩展的代码,减少流程控制语句(if else)的使用
<?phpclass Animal{// 该方法将会在子类中被重写public function talk(){echo '动物会叫';}}class Cat extends Animal{public function talk(){echo '小猫喵喵叫';}}class Dog extends Animal{public function talk(){echo '小狗汪汪叫';}}function talk($obj){$obj->talk();}talk(new Cat()); // 输出小猫喵喵叫talk(new Dog()); // 小狗汪汪叫?>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号