Correction status:qualified
Teacher's comments:
1. 编程: 匿名对象与匿名类的实现过程;
2. 编程: Trait类的声明与工作原理;
3. 编程: 类的自动加载函数的写法;
4. 编程: 对象的序列化与反序列化的原理与应用;
<?php //1. 编程: 匿名对象与匿名类的实现过程; class BadPerson{ private $name = '大官人'; public function story($name) { return $this->name.'喜欢上了:<span style="color:red">'.$name.'</span>'; } } echo '1. 编程: 匿名对象与匿名类的实现过程;','<br>'; //实例化对象 $badPerson = new BadPerson(); echo $badPerson->story('妹妹'),'<hr>'; // 匿名对象 echo (new BadPerson())->story('绿茶妹妹'),'<hr>'; // 匿名类 php 7 以上才能使用 echo (new class{ private $name = '西门大官人'; public function story($name) { return $this->name.'喜欢上了:<span style="color:gray">'.$name.'</span>'; } })->story('嫦娥姐姐'),'<hr>'; //2. 编程: Trait类的声明与工作原理;突破php单继承的限制 class Person{ protected $name; public function __construct($name='xiaoming') { $this->name = $name; } public function study($course='php'){ return $this->name.'在学习:'.$course; } } //创建一个trait类 trait Couser { public $friend = 'xiaohua'; public function sport($name='踢足球'){ return $this->friend.'在学习:'.$name; } } class Student extends Person{ //使用 trait类 use Couser; } $student = new Person(); $student1 = new Student(); echo '2. 编程: Trait类的声明与工作原理;突破php单继承的限制:','<br>'; echo $student->study('java'),'<hr>'; echo $student1->sport('paython'),'<hr>'; //3. 编程: 类的自动加载函数的写法; echo '3. 编程: 类的自动加载函数的写法:','<br>'; spl_autoload_register(function($className){ //自动加载函数 require './class/'.$className.'.php'; }); //echo Demo2::CLASS_NAME,'<hr>'; //echo Demo2::CLASS_NAME,'<hr>'; echo '<hr>'; //4. 编程: 对象的序列化与反序列化的原理与应用; echo '4. 编程: 对象的序列化与反序列化的原理与应用','<br>'; $num = 500; echo serialize($num),'<hr>'; $name = 'jack'; echo serialize($name),'<hr>'; $arr = ['bb',13,'worryad',[85,'kick']]; echo serialize($arr),'<hr>'; class Db { public $db = null; public $host; public $user; public $pass; public function __construct($host='127.0.0.1',$user='root',$pass='root') { $this->host = $host; $this->user = $user; $this->pass = $pass; $this->connect(); } //连接函数 public function connect() { $this->db=mysqli_connect($this->host,$this->user,$this->pass); } //魔术方法:序列化时调用 没有参数 public function __sleep() { // TODO: Implement __sleep() method. return ['host','user','pass']; } //魔术方法:反序列化时调用 有参数 public function __wakeup() { // TODO: Implement __wakeup() method. $this->connect(); } } $obj = new Db(); //序列化对象 echo serialize($obj),'<hr>'; $tmp = serialize($obj); //反序列化 echo var_dump(unserialize($tmp)),'<hr>';
点击 "运行实例" 按钮查看在线实例
5. 问答:谈谈你对面向对象编程的基本理解:
面向对象编程,我们可以把任何一种物体或者具有相同公共属性的东西称作为类,我们为其创建一个类,称作为父类,然后这种类型的东西,又分布着多种不同的类型,比如:"动物"是一个很广泛的类,我们可以把"脚"这个属性,作为动物类的一个属性,然而动物也分鸟类动物和陆行动物,这时我们就可以再创建这2个类"鸟类动物"类和"陆行动物"类,然后分别继承于"动物"这个类,这就是所谓类的继承.面向对象,我们可以把一些常用的一些功能封装成一个函数,这样就可以复用了,不用每次再重新去写一遍.所有有关于类的函数或者属性,都可以在创建类的时候进行获取和生成,以及做一些限制.