批改状态:合格
老师批语:
1、匿名对象与匿名类的实现过程
<?php
header("content-Type:text/html;charset=UTF-8");
echo '<h1>匿名对象与匿名类的实现过程</h1><hr>';
class Task1
{
private $name = 'arthur';
public function sqt($ming)
{
// return $this ->name;
return $this ->name .'是税企通的'.$ming;
}
}
//对象访问方式:
$task1 = new Task1();
echo $task1 ->sqt('项目流程负责人'),'<br>';
//匿名对象访问方式:
echo (new Task1()) ->sqt('董事局主席'),'<br>';
//匿名类的访问方法:
echo (new class {
private $name = 'arthur';
public function sqt($ming)
{
return $this ->name .'是税企通的'.$ming;
}
}) ->sqt('创始人'),'<hr>';
//匿名类的使用场景
//1,在匿名类中使用构造方法
echo (new class('kitty')
{
private $name;
public function __construct($ming)
{
$this ->name = $ming;
}
public function sqt($ming)
{
return $this ->name .'是税企通的'.$ming;
}
}) ->sqt('董事长秘书'),'<hr>';
//2,匿名类继承干爹类成员的方法
class BaBa
{
private $property;
public function __construct($gold='')
{
$this ->property = $gold;
}
public function wo()
{
return $this ->property ? : '三千吨黄金';
}
}
echo (new class('arthur') extends BaBa {
private $name;
public function __construct($ming,$gold='')
{
parent::__construct($gold);
$this ->name = $ming;
}
public function wo()
{
return $this ->name.'继承了'. parent::wo();
}
}) ->wo(),'<hr>';
//3,咱们来开始玩类中类,来
class Ceo
{
public $name = 'tony';
protected $salary = '1000万';
private $agree = '保密协议';
protected function info()
{
return '由税企通培训输出的';
}
public function zhong1()
{
return (new class($this->agree) extends Ceo
{
private $agree;
public function __construct($agree)
{
$this ->agree = $agree;
}
public function zhong2()
{
return '我是嵌套匿名类中的方法:'.__METHOD__;
}
public function show()
{
return 'CEO的姓名是:'.$this ->name.'<br>'.
'CEO的年薪是:'.$this ->salary.'<br>'.
'CEO的协议是:'.$this ->agree.'<br>';
}
});
}
}
echo (new Ceo()) ->zhong1() ->zhong2();
echo '<hr>';
echo (new Ceo()) ->zhong1() ->show();点击 "运行实例" 按钮查看在线实例
2、Trait类的声明与工作原理
<?php
header("content-Type:text/html;charset=UTF-8");
echo '<h1>Trait类的声明与工作原理</h1><hr>';
//Trait类严格来说不是类,因为它无法实例化
//Trait类的作用首先是突破了php的单继承,可以多继承了
//其次作为方法集,给需要实例化的类提供了很多可行条件,相当于当前脚本的函数库
class Ba
{
protected $name;
public function __construct($name='粑粑')
{
$this ->name = $name;
}
public function doing($kan='看电视')
{
return $this->name.'在客厅'.$kan;
}
}
trait Ma
{
public $ma = '麻麻';
public function doing($wan='玩手机')
{
return $this ->name. '在房间' .$wan;
}
}
trait Ki
{
public $kk = 'kitty';
public function doing($cook='做饭')
{
return $this ->name. '在厨房' .$cook;
}
}
class Ai extends Ba
{
use Ma , Ki
{
Ma::doing insteadof Ki;
Ki::doing as cooking;
}
}
$ai = new Ai();
//访问父类
echo $ai ->doing(),'<hr>';
//导入trait类访问
echo $ai ->cooking();点击 "运行实例" 按钮查看在线实例
3、类的自动加载函数的写法
<?php
header("content-Type:text/html;charset=UTF-8");
echo '<h1>类的自动加载函数的写法</h1><hr>';
//类的自动加载本质上也是为了不让代码过于冗余,俗称要优雅;
//更重要的是,如果有几十上百个类,如果不用加载技术,会烦死!
spl_autoload_register(function ($className){
require './class/'.$className .'.php';
});
echo Task3_1::CLASS_NAME,'<hr>';
echo Task3_2::CLASS_NAME;点击 "运行实例" 按钮查看在线实例
4、对象的序列化与反序列化的原理与应用
<?php
header("content-Type:text/html;charset=UTF-8");
echo '<h1>对象的序列化与反序列化的原理与应用</h1><hr>';
class Sql
{
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()
{
return['host','user','pass'];
}
// 对象反序列化的时候自动调用
public function __wakeup()
{
$this ->connect();
}
}
$sql = new Sql;
echo serialize($sql),'<hr>';
$tmp = serialize($sql);
var_dump(unserialize($tmp));点击 "运行实例" 按钮查看在线实例
5、谈谈你对面向对象编程的基本理解:
个人是这么理解的,面向对象编程首先得确定这些对象是谁,有那些属性,以及用什么方法获得;
既然对象有了,那么我还要考虑到它们的封装、继承和多态用什么来实现,其中主要的一步就是要考虑其封装方式;
根据目前接触到的课程,我理解是需要先区分项目的大小,由于面向对象编程比较规范统一,适合进行大项目编程,分割式编程(即分区块完成,然后进行拼接);
确定该项目是使用面向对象的编程方式之后,就要考虑到到命名空间、interface接口、类的组成结构了;
老师说了,大公司里做项目,一般就是大佬写个接口给你,然后你就拿回去分着写吧。。。
所以总结一下:面向对象编程规范、严谨,有迹可循。相比面向过程编程的方式而言,可扩展性好,后期维护起来比较容易。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号