Blogger Information
Blog 39
fans 0
comment 0
visits 30804
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
匿名类,Trait类,抽象类;自动加载、序列化与反序列化 2018年9月6号 22:12
南通税企通马主任的博客
Original
914 people have browsed it

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接口、类的组成结构了;

老师说了,大公司里做项目,一般就是大佬写个接口给你,然后你就拿回去分着写吧。。。

所以总结一下:面向对象编程规范、严谨,有迹可循。相比面向过程编程的方式而言,可扩展性好,后期维护起来比较容易。

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments