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接口、类的组成结构了;
老师说了,大公司里做项目,一般就是大佬写个接口给你,然后你就拿回去分着写吧。。。
所以总结一下:面向对象编程规范、严谨,有迹可循。相比面向过程编程的方式而言,可扩展性好,后期维护起来比较容易。