批改状态:合格
老师批语:
通过今天的学习,我学会了匿名对象,匿名类的创建和使用,并且知道trait作用和使用,同时懂得了如果创建接口,与抽象类,并且掌握其作用,以下是我的编程代码:
1,匿名对象与匿名类的实现过程
<?php
/**
* 匿名对象与匿名类的实现过程;
*/
class anonymous
{
private $name;
private $age;
public function show()
{
echo $this->name,"今年:",$this->age;
}
public function __construct($name,$age)
{
$this->name=$name;
$this->age=$age;
}
}
//对象实例化
$restult=new anonymous('小红',14);
echo '对象实例化输出',$restult->show().'<hr>';
//匿名对象
echo '匿名对象',(new anonymous('小军',33))->show(),'<hr>';
//匿名类使用方法1
echo '匿名类使用方法1',(new class('笑吧',58){
private $name;
private $age;
public function show()
{
echo $this->name,"今年:",$this->age;
}
public function __construct($name,$age)
{
$this->name=$name;
$this->age=$age;
}
})->show(),'<hr>';
class show
{
public $name;
private $age=600;
protected $sex='sex';
public function __construct($name)
{
$this->name=$name;
}
public function show()
{
return $this->name;
}
}
//匿名类使用方法2
echo '匿名类使用方法2继承类',(new class('小青',22) extends show{
public $name='小军';
protected $age;
public function __construct($name)
{
parent::__construct($name);
}
public function show($name='')
{
return '姓名'.parent::show();
}
})->show('小军'),'<hr>';
//匿名类使用方法3
class student
{
public $studentName='爱奇艺';
protected $studentAge=30;
private $studentSubject='科学';
private $type = '哈士奇';
public function getName()
{
return $this->studentName;
}
//创建一个新的方法包含匿名类
public function getInfo()
{
return (new class ($this->studentSubject) extends student{
//定义科目属性
private $studentSubject;
//创建构造方法
public function __construct($studentSubject)
{
$this->studentSubject=$studentSubject;
}
//输出匿名方法
public function demo1()
{
return '我是嵌套匿名类中的方法: '. __METHOD__;
}
public function show()
{
return '我是'.$this->studentName.'今年:'.$this->studentAge.'我擅长的科目是:'.$this->studentSubject;
}
});
}
}
//实例化对象
echo (new student())->getInfo()->demo1().'<hr>';
echo (new student())->getInfo()->show();点击 "运行实例" 按钮查看在线实例
2,Trait类的声明与工作原理
<?php
/**
* trait类 是代码复用机制(函数, 类的继承)
* 使的类的语法,但不是类,所以不能实例化
* triat 相当于方法集
*/
class lianxi
{
protected $name;
public function __construct($name='小孟')
{
return $this->name=$name;
}
public function study($subject='科学')
{
return $this->name.'在学习'.$subject;
}
}
//单一的继承,如过使用多个继承,则必须使用trait,但是必须通过use导入
trait info{
public $s = '小华';
public function study($name='踢足球')
{
return $this->s .'在学习'. $name;
}
}
trait info1{
public $frient = 'ff';
public function study($name='科学')
{
return $this->frient .'在学习'. $name.'<hr>';
}
}
class student extends lianxi
{
//如果多个trait类中方法名相同,则进行判断
use info,info1{
info::study insteadof info1;
info1::study as mysort;
}
}
//实例化子类,创建子类对象
$student=new student();
echo $student->study();
echo $student->mysort();点击 "运行实例" 按钮查看在线实例
3,类的自动加载函数的写法;
<?php
/**
*
* 类的自动加载函数的写法
*
*/
//include 'pdo/Test.php';
spl_autoload_register(function ($className){
require './pdo/'.$className.'.php';
//存在命名空间的情况下
// $className = str_replace("\\","/", $className);
// require './class/'.$className.'.php';
});
//echo Test, '<hr>';
echo Test::CLASS_NAME,'<hr>';
echo Test::DIR_NAME,'<hr>';
echo Test::FILE_NAME,'<hr>';
echo Test::SERVIER_NAME,'<hr>';点击 "运行实例" 按钮查看在线实例
4,对象的序列化与反序列化的原理与应用
<?php
/**
* 对象的序列化与反序列化的原理与应用
*
*
*
*/
class seriaze
{
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();
}
private 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 seriaze();
echo serialize($obj).'<hr>';
$tmp=serialize($obj);
var_dump(unserialize($tmp));点击 "运行实例" 按钮查看在线实例
以下是手抄图片
![1536219955670821.jpg O$HPNFL61$EK75C2(C49]IM.jpg](https://img.php.cn//upload/image/752/915/884/1536219955670821.jpg)
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号