批改状态:合格
老师批语:不仅要多写, 还要总结,做笔记, 这样才记得牢
<?phpclass User{public $name = 'maichael';public $age = 30;// 访问类中属性// 方法1.public function class1(){// 创建类实例$class1 = new user;return '姓名:'.$class1->name.'年龄:'.$class1->age;}// 方法2.public function class2(){// $this始终与当前类绑定,为PHP系统进行维护和赋值return "姓名:{$this->name} 年龄:{$this->age}";}// 类种方法变量与类属性区别// 简单说 该变量需要在多个方法中使用时,创建为类属性// 该变量仅在当前方法中使用时,创建为类中方法变量public function class3(){$city = '成都';return "姓名:{$this->name} 年龄:{$this->age} 城市:{$city}";}// 类方法访问外部成员 函数直接访问 变量用global访问public function class4(){$func = func();global $a;return func() . $a;}// 改进类中方法public function class5(string $a , Closure $closure){return $closure().$a;}// 静态方法直接用类调用被所有示例所共享static public $nationality = '加拿大';static public function class6(){return '国籍是'. self::$nationality;}}$user = new User;// 方法1echo $user->class1();// 输出姓名:maichael年龄:30// 方法2echo $user->class2();// 输出姓名:maichael年龄:30echo '<hr>';// 类中变量echo $user->class3();// 输出 姓名:maichael 年龄:30 城市:成都// 类种方法访问外部成员function func(){return 'PHP';}$a = '中文网';echo $user->class4();// 输出PHP中文网// 改进类中方法$func = function (){return 'PHP';};echo $user->class5($a,$func);// 静态方法echo $user->class6();// 输出国籍是加拿大
// 类的成员访问控制:作用域// public: 公开成员,默认值,类外部类内部以及类的子类中均可使用// protected :受保护成员,禁止类外部使用,类内部及子类可使用// private : 私有成员,仅在当前类中可使用,类外部及子类均禁止使用// 类的上下文环境:当前类以及他的扩展类/子类,构成的一个具有层级结构的类家庭class User{public $name = 'michael';protected $age = 30;private $gender = '男';// 当前类访问私有成员public function func(){return "性别:{$this->gender}";}}// 访问一下$user = new User;echo $user->name;// echo $user->age; 报错无法访问受保护的// echo $user->gender; 报错 无法访问私有的echo $user->func(); //输出性别:男// 创建子类class Ser extends User{// 创建一个方法访问父类中的受保护成员public function class(){return "年龄:{$this->age}";}// 子类访问父类私有成员public function class1(){return "性别:{$this->gender}";}}$ser = new Ser;echo $ser->class();// 输出年龄:3// 输出父类私有成员// echo $ser->class1(); 报错:未定义的属性
// 面向对象 OOP:封装,继承,多态// 封装 public protected private// 继承 extends// 多态 方法的重写是实现方法级的多态,面向接口开发是实现对象级的多态// 类的继承// 二类成员:父类的public protected// 三种操作:继承,重写,扩展// 继承:父类的二类成员自动成为子类的成员// 重写:覆盖与父类同名的成员(属性、方法)// 扩展:子类添加自身的方法来扩展父类的功能// 父类也叫基类,子类也叫扩展类// 创建父类class User{public $name = 'michael';protected $age = 30;private $gender = '男';public static $nationality = '加拿大';// 创建方法public function Name(){return $this->name;}}// 创建子类class Ser extends User{// 重写父类属性public $name = "kaiwen";// 重写方法public function Name(){return parent::Name().'不是中国人';}// 扩展属性public $hibby = 'shoot';// 扩展方法public function means(){return parent::Name()."爱好:{$this->hibby}";}}// 子类实例化$ser = new Ser;// 直接继承父类方法,在子类输出echo $ser->Name(); //输出 michael// 重写父类name属性,输出echo $ser->Name(); //输出 kaiwen不是中国人 因为上面已经重写了name的值 所以不是michaelecho '<hr>';// 扩展echo $ser->means(); //输出kaiwen爱好:shoot// 最终方法最终类 在前面加 final
// 抽象类:部分分离了设计(抽象类的完成)与实现(工作类的完成)// 只要一个类中有一个抽象方法 那么这个类就是抽象类// 抽象方法:没有方法体// 创建一个抽象类abstract class User{public $name = 'michael';protected $age = 30;private $gender = '男';public static $nationality = '加拿大';// 创建方法public function Name(){return $this->name;}// 创建抽象方法:没有方法体abstract public function class();}// 子类叫做实现类或者工作类 父类中的抽象方法必须在子类中实现// 实现类、工作类:是一个可以被实例化的普通类// 工作类不一定是一个可以被实现的普通类,他也可以是一个抽象类// 抽象类也可以被继承,也可以被用在继承上下文环境中、// 抽象类中允许有抽象成员,但不是强制的,也可以没有abstract class Ser extends User{// 创建一个受保护的属性protected $hibby = 'shoot';// 必须将父类中的抽象方法实现public function class(){return "姓名:{$this->name} 兴趣:{$this->hibby}";}}// 最终工作类:允许被实例化class Er extends Ser{public function class(){return parent::class();}}// 实例化$er = new Er;echo $er->class();// 输出姓名:michael 兴趣:shoot
// 接口:完成分离了“设计与实现”// 关键字:interface// 使用与类相似的语法:抽象方法,常量,构造方法(魔术方法的一种)// 默认访问控制必须是public// 接口允许多继承,从而实现了PHP的多继承// 子类继承父类使用 implements// 创建接口interface User{// 接口常量 constconst NAME = 'michael';// 接口方法public static function class();}// 访问一下接口常量echo User::NAME;// 工作类实现接口class Ser implements User{protected static $age = 17;public static function class(){return '姓名: '.User::NAME. '年龄: '.self::$age;// 注意 这个地方不能用“” 双引号}}echo Ser::class();// 输出姓名: michael年龄: 17
看上去无法理解,当深入的敲上几遍,就慢慢理解了
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号