Correction status:qualified
Teacher's comments:
通过今天的学习,我学会了匿名对象,匿名类的创建和使用,并且知道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));
点击 "运行实例" 按钮查看在线实例
以下是手抄图片