批改状态:合格
老师批语:类实例化时,只有在不需要给构造方法传参时才可以省略,不过推荐总是写上, 上课我是为了简化代码而已, 毕竟能少写几个字符,就多一点时间与大家多说点
这节课讲了面向对象其中一部分内容,主要有以下几点:
类与实例:类的实例,实际上就是一个对象,类使用class关键字定义,类的示例使用new关键字定义
类属性与类方法:不管属性还是方法,只要在前面加上了static关键字,就表示静态属性或静态方法,此时,就可以不需要实例化类而直接访问了,也因为不需要使用对象来调用,所以伪变量$this在静态方法中就不能使用了
类成员的访问控制:也可以叫做封装,实际上就是使用public、private、protected关键字对类成员(包括类属性和类方法)的作用域设置使用范围
类的扩展及扩展方式:实际上就是类的继承,子类共享父类的属性和方法,并且子类可以对父类中的属性或方法进行覆盖或者扩展
<?php// 类与示例// 1. 声明一个类class Car{public $price;public $performance;public function config () {}}// 2. 类的示例:对象$Bmw = new Car();// 3. 简写:可省略小括号$Changan = new Car;
<?php// 类成员:包括类属性和类方法class Cars{// 1. 类属性public $price;public $brand;public $performance;// 2. 类方法public function config () {printf('%s 的价格才 %d 元,性能也 %s ,配置是真好!',$this->brand,$this->price,$this->performance);}// 构造函数:它是一种特殊的方法,主要用来对 对象成员变量赋初始值,此方法必须在类实例中用 new 来调用public function __construct($bra,$pri,$per){// 为变量赋值// $this:表示类实例引用,相当于 $this = new self ;// self :引用当前类名称$this->price = $pri;$this->brand = $bra;$this->performance = $per;}}// 实例化一个类,并传参$changan = new Cars('长安',20000,'not bad');// 调用函数$changan->config();echo '<hr>';// 动态类:和可变变量差不多,就是将类名称放到一个变量中$car = 'Cars';// 原始写法:// $wuling =new Cars('五菱',19000,'not bad');// 动态类写法:利用变量$wuling =new $car('五菱',19000,'not bad');$wuling->config();

<?php// 类成员中的 static 关键字// 一旦声明了属性或方法为static(静态),就可以不实例化类而直接访问了,// 因为静态方法不需要通过对象就可以调用,所以$this在静态方法中不可用class Info{public static $sex = 'male';public static function same () {// 这里使用$this的话会报错// return 'We are all '.$this->$sex;// 使用self:表示引用当前类名称return 'We are all '.self::$sex;}}// 不需要实例化类,直接访问echo Info::$sex;echo '<hr>';echo Info::same();

<?php// 类成员的访问控制:也叫封装// 通过关键字 public、private、protected 来声明类成员的作用域class StuInfo{// public 公共的,在类的外部、内部以及子类都可使用public $name = '佩奇';// protected 受保护的,在类的内部和子类均可使用,仅外部不能使用protected $score = '90';// private 私有的,仅在类的内部使用,外部和子类均不能使用private $grade = '一年级';public function info () {return "{$this->grade} 学生 {$this->name} 的平均分是 {$this->score} 分";}}// 子类class StuInfo1 extends StuInfo{public function info () {// 如果加入 {$this->grade} ,就会报错,因为这是私有成员,子类也不能使用// return "{$this->grade} 学生 {$this->name} 的平均分是 {$this->score} 分";return " 学生 {$this->name} 的平均分是 {$this->score} 分";}}// 1. 实例化类,调用函数,均可输出,表示任何类型在内部均可使用$demo1 = new StuInfo;$res = $demo1->info();echo $res.'<hr>';// 2. name输出,score无输出,grade报错,表示public在外部可用,protected和pricate在外部均不可使用,$demo2 = new StuInfo;echo $demo2->name,'<br>';// echo $demo2->score,'<br>';// echo $demo2->grade,'<br>';echo '<hr>';// 3. 实例化子类,现在有输出,表示public和protected在子类中可用$demo3 = new StuInfo1;echo $demo3->info();

<?php// 类的扩展及扩展方式:扩展也叫做继承// 扩展方式分为:属性扩展和方法扩展// 扩展有两层意思:1. 在原来的基础之上增加内容 2.覆盖原来的内容class Stu{public $name = '佩奇';public $grade = '一年级';public $hello ='棒棒哒';public function info () {return "{$this->grade} 学生 {$this->name} {$this->hello}";}}// 扩展:增加内容class Demo1 extends Stu{// 1. 属性扩展,子类能够继承父类的属性,现在我只增加一个属性public $score = '100';// 2. 方法扩展,在原有的方法上,增加内容public function info () {// return "{$this->grade} 学生 {$this->name} {$this->hello}";// 引用父类的方法,简写:return parent::info()." , 因为它考了 {$this->score} 分";}}$obj1 = new Stu;echo $obj1->info(),'<hr>';$obj2 = new Demo1;echo $obj2->info(),'<hr>';// 扩展:覆盖内容class Demo2 extends Stu{// 1. 属性扩展,修改父类中的属性public $name = '柯蓝';public $grade = '六年级';// 2. 方法扩展,修改父类中的方法public function info () {return "{$this->grade} 学生 {$this->name} 帅爆了";}}$obj3 = new Stu;echo $obj3->info(),'<hr>';$obj4 = new Demo2;echo $obj4->info(),'<hr>';

<?php// final 关键字 :一旦使用此关键字,表示方法或者类都不允许扩展或者继承final class Stu// class Stu{public $name = '佩奇';public $grade = '一年级';public $hello ='棒棒哒';// 1. 方法使用 final 关键字final public function info () {return "{$this->grade} 学生 {$this->name} {$this->hello}";}}class Demo1 extends Stu{public $name = '孙悟空';// 方法扩展public function info () {return "{$this->grade} 学生 {$this->name}";}}$obj = new Demo1;echo $obj->info();


声明类与实例化类比较简单,知道两个关键词,class和new
加入了static关键字的属性或方法,就不需要实例化了,可以直接使用类来访问,语法:类名称::类方法或者类属性,记住:在类方法中$this->没有用了,要使用self::来引用当前类名称,访问类属性
记住类成员加入了public、private、protected关键字后,其作用域范围
扩展/继承中,子类能够继承父类的属性和方法,也能对其修改或者更新,但是一旦方法或者类加入final关键字后,就不能再扩展/继承了
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号