Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:__wakeup(),名称不对
<?php
class user {
public $name;
public $id;
function __construct() { // 给id成员赋一个uniq id
$this->id = 123;
}
function __sleep() { //此处不串行化id成员
return(array('name'));
}
function __wakeup() {
$this->id = 123;
}
}
//实例化user()
$i = new user();
$i->name = "Leo";
$s = serialize($i); //serialize序列化对象i,此处不序列化id属性,id值被抛弃
$u2 = unserialize($s); //unserialize发序列化,id值被重新赋值
print_r($i);
echo '<br>';
print_r($u2);
输出结果:
<?php
//匿名类的三种使用方法
// 1.直接定义一个匿名类
$objA = new class
{
public function getName()
{
echo "Hello I'm peret";
}
};
$objA->getName();
echo '<br>';
// 2.在方法中返回
function testA()
{
return new class
{
public function getName()
{
echo "Hello I'm peret obj";
}
};
}
$objB = testA();
$objB->getName();
echo '<br>';
//3. 作为参数
function testB($testBobj)
{
echo $testBobj->getName();
}
testB(new class{
public function getName()
{
echo "php.cn";
}
});
输出结果:
数据库信息:
<?php
// 匿名类的应用场景
//匿名类查询操作
interface iDb
{
public function __construct(...$params);
}
// 2. mysqli方式
//使用匿名类查询操作
$sql = (new class ('localhost','admin','huicheng123','admin') implements iDb {
private $mysqli;
public function __construct (...$params)
{
$this->mysqli = new mysqli($params[0],$params[1],$params[2],$params[3]);
}
public function select ()
{
return $this->mysqli->query("SELECT `name`,`email`,`password`,`time` FROM `users`")->fetch_all(MYSQLI_ASSOC);
$this->mysqli->close();
}
}) -> select();
foreach ($sql as $v) {
vprintf('| 用户名: %s | 邮箱: %s | 密码: %s | 电话: %s' . '<br>',$v);
}
输出结果:
<?php
// 匿名类的应用场景
// 1. 实现接口的部分功能
interface iDb
{
public function __construct(...$params);
}
//2.匿名类删除操作
// 2. mysqli方式
$delete2 = (new class ('localhost','admin','huicheng123','admin') implements iDb
{
private $mysqli;
public function __construct (...$params)
{
$this->mysqli = new mysqli($params[0],$params[1],$params[2],$params[3]);
}
public function delete2 ()
{
$this->mysqli->query("DELETE FROM `users` WHERE `id`='7'");
$this->mysqli->close();
}
})->delete2();
输出结果:
与原数据库对比id为7的欧阳克被删除了
<?php
// 匿名类的应用场景
// 1. 实现接口的部分功能
interface iDb
{
public function __construct(...$params);
}
//2.匿名类跟新操作
// 2. mysqli方式
$delete2 = (new class ('localhost','admin','huicheng123','admin') implements iDb
{
private $mysqli;
public function __construct (...$params)
{
$this->mysqli = new mysqli($params[0],$params[1],$params[2],$params[3]);
}
public function delete2 ()
{
$this->mysqli->query("UPDATE `users` SET `name`='灭绝老师',`email`='miejue@php.cn' WHERE `id`=5");
}
})->delete2();
echo $mysqli->affected_rows;
print_r($delete2);
输出结果:
朱老师被更新成灭绝老师
serialize
函数:将数据序列化
file_put_contents()
:将一个序列化的数据保存到一个文件中unserialize
函数:将一个数据反序列化(反序列化:将字符串还原成对象)
学习到了_sleep()
方法以及warkup()
方法
_sleep()
方法:将对象序列化时自动调用,可以用于清理对象wakeup()
方法:反序列化时调用或类似的操作,例重新建立数据库连接或执行其他初始化操作学习了匿名类的使用场景,便于数据的一次性使用