批改状态:合格
老师批语:
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个类"鸟类动物"类和"陆行动物"类,然后分别继承于"动物"这个类,这就是所谓类的继承.面向对象,我们可以把一些常用的一些功能封装成一个函数,这样就可以复用了,不用每次再重新去写一遍.所有有关于类的函数或者属性,都可以在创建类的时候进行获取和生成,以及做一些限制.
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号