Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:面向对象中有许多新知识 , 如果自学难度不小
echo '<h3>一、常规属性的定义和访问</h3>';
class Person {
//在类内部定义类的常规属性
public $name = '小明';
public static $age = 18;
public function getName() {
//在类内部访问类的常规属性
return $this->name;
}
}
$p1 = new Person();
//在类外部访问类的常规属性
echo $p1->name;
echo '<br>';
//在类内部访问类的常规属性
echo $p1->getName();
echo '<h3>二、静态属性的定义和访问</h3>';
class Person1 {
public $name = '小红';
//在类内部定义类的静态属性
public static $age = 17;
public function getAge() {
//在类内部访问类的静态属性
return self::$age;
}
}
$p2 = new Person1();
//在类外部访问类的静态属性
echo $p2::$age;
echo '<br>';
//在类内部访问类的静态属性
echo $p2->getAge();
echo '<h3>一、常规方法的定义和访问</h3>';
class Person {
public $name = '小明';
public static $age = 18;
//在类内部定义类的常规方法
public function getName() {
return $this->name;
}
public function sayName() {
//在类内部调用类的常规方法
echo $this->getName();
}
}
$p1 = new Person();
//在类外部调用类的常规方法
echo $p1->sayname();
echo '<br>';
echo '<h3>二、静态方法的定义和访问</h3>';
class Person1 {
public $name = '小红';
public static $age = 17;
//在类内部定义类的静态方法
public static function getAge() {
return self::$age;
}
public static function sayAge() {
//在类内部调用类的静态方法
echo self::getAge();
}
}
$p2 = new Person1();
//在类外部调用类的静态方法
echo $p2::sayAge();
echo '<br>';
echo '<h3>三、在类方法中访问外部成员</h3>';
$name = '小王';
$age = 19;
$sayName = function() {
global $name;
return '我的名字叫'.$name;
};
class Person2 {
public function hello($v, $a) {
return $v(). ','.'我的年龄是'.$a;
}
}
$p3 = new Person2;
echo $p3->hello($sayName, $age);
/*
* 时间:2020年4月30日10:42:47
* 知识点:重写类属性和类方法
* 场景:重写父类的方法并对其进行拓展
*/
echo '<h3>类的继承</h3>';
class Person {
//定义公共的类属性
public $name;
public $sex;
public $age;
public $test = 1;
//使用一个公共方法初始化类属性
public function setInfo($name, $sex, $age)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
//定义一个公共方法来获取类属性
public function getSelf() {
return $this->name.$this->sex.$this->age;
}
}
$p1 = new Person;
$p1->setInfo('小明', '男', 18);
echo $p1->test;
echo $p1->getSelf();
echo '<br>';
//定义一个子类
class Student extends Person {
//重写父类的属性
public $test = 2;
public $school = '北京三中';
//重写父类的saySelf方法
//并在该方法中使用parent关键字调用父类被覆盖的saySelf方法
//如果需要父类saySelf方法中的完整代码而又要避免在该方法中对其复制粘贴,因为这样会导致代码冗余
public function getSelf() {
return parent::getSelf().$this->school;
}
//扩展父类的方法
public function saySchool() {
echo '我在'.$this->school.'读书';
}
}
$p2 = new Student;
$p2->setInfo('小红', '女', 17);
echo $p2->test;
echo $p2->getSelf();
echo '<br>';
$p2->saySchool();
序号 | 描述 |
---|---|
1 | 抽象类也叫设计类 |
2 | 不能被实例化 |
3 | 只要类中有一个抽象方法,那么这个类就是抽象类 |
4 | 抽象类中允许有抽象成员,但不是强制的,也可以没有,类中也可以定义普通方法 |
5 | 必须实现类中的抽象方法才可以实现此抽象类 |
6 | 抽象类可以被继承 |
echo '<h3>抽象类的实现</h3>';
//设计类实现
abstract class aPerson {
protected static $name;
protected static $sex;
protected static $age;
abstract protected function getInfo();
}
//工作类实现
class Student extends aPerson {
protected $school;
public function setInfo($name, $sex, $age, $school) {
self::$name = $name;
self::$sex = $sex;
self::$age = $age;
$this->school = $school;
}
public function getInfo() {
return self::$name.self::$sex.self::$age.$this->school;
}
}
//客户端调用
$user = new Student;
$user->setInfo('小明', '男', 18, '北京三中');
echo $user->getInfo();