Correction status:Uncorrected
Teacher's comments:
类与对象的进阶知识,是需要掌握的。
如下代码演示匿名类、Trait、自动加载、序列化。
<?php //1. 编程: 匿名对象与匿名类的实现过程; class Player{ private $name='james'; public function belongto($team){ return $this->name.'属于'.$team; } } echo (new Player())->belongto('湖人'),'<br>'; echo (new class{ private $name='curry'; public function belongto($team){ return $this->name.'属于'.$team; } })->belongto('勇士'),'<hr>'; //2. 编程: Trait类的声明与工作原理; //原理:PHP不支持多重继承,为了代码复用,引入trait,优先级:自身方法>trait的方法>继承的方法 trait Player1{ private $name='钓鱼岛'; public function belongto($team){ return $this->name.'永远属于'.$team; } } trait Player2{ private $name1='苍老师'; public function belongto($team){ return $this->name1.'不只属于'.$team; } } class Player3{ use Player1,Player2 { Player1::belongto insteadof Player2; Player2::belongto as belongto1; } } ECHO (NEW Player3())->belongto('中国'),'<br>'; ECHO (NEW Player3())->belongto1('日 本'),'<hr>'; //3. 编程: 类的自动加载函数的写法; spl_autoload_register(function ($className){ require './class/'.$className.'.php'; //存在命名空间的情况下 // $className = str_replace("\\","/", $className); // require './class/'.$className.'.php'; }); //4. 编程: 对象的序列化与反序列化的原理与应用; $obj = new player(); /** * 对象序列化的特点: * 1. 只保存对象中的属性,不保存方法 * 2. 只保存类名,不保存对象名 */ echo serialize($obj),'<hr>'; $tmp = serialize($obj); var_dump(unserialize($tmp));
点击 "运行实例" 按钮查看在线实例
对于面向对象的理解:
面向对象是相对于面向过程而言的,面向过程是一步步的做,面向对象是将面向过程进一步抽象,提取出类、对象和方法,提高了代码的可复用性,面向对象三要素封装、继承、多态。