博客列表 >php基础知识(匿名对象)--2018年9月10日17:51:18

php基础知识(匿名对象)--2018年9月10日17:51:18

Hi的博客
Hi的博客原创
2018年09月10日 17:56:08753浏览

由于面向过程的编程在构造系统时,重用,维护,扩展等问题逻辑过于复杂,因此面向对象由此产生.

面向对象的编程主要是把构成的问题的各个事物分解成各个对象,建立对象目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为,对象作为程序的基本单位将程序和数据封装在里面,提高程序的重用性,灵活性和可扩展性.

以下是我的代码

实例

<?php
echo "<h2>匿名对象与匿名类的实现过程</h2>";
class AAA
{
    private $name ;
    public function __construct($name)
    {
        $this->name=$name;
    }
    public function __get($name)
    {
        return $this->$name;
    }
    public function T()
    {
        return $this->name;
    }
}
//匿名对象
echo(new AAA('我是测试'))->T(),"<hr>";
//匿名类
echo(new class('我是匿名'){
    private $name ;
    public function __construct($name)
    {
        $this->name=$name;
    }
    public function __get($name)
    {
        return $this->$name;
    }
    public function T($name)
    {
        return $this->name.$name;
    }
})->T('类');
//继承父级的匿名类
echo"<hr>";
echo(new class('我是继承父级的匿名类') extends AAA{
    private $name ;
    public function __construct($name)
    {
        parent::__construct($name);
        $this->name=$name;
    }
    public function __get($name)
    {
        return $this->$name;
    }
})->T();
echo"<hr>";
class BBB
{

    private $salary = "在嵌套类中获取继承的私有属性";

    public function hello()
    {
        return (new class($this->salary) extends BBB
        {
            private $salary;
            public function __construct($salary)
            {
             $this->salary=$salary;
            }
            public function demo1()
            {
                return $this->salary;
            }
        }
        );
    }

}
$test5=new BBB();
echo $test5->hello()->demo1();
echo"<hr>";
echo "<h2>trait类的声明</h2>";
//可以使用!class_exists判断类名是否已经存在
trait CCC{
    public function w(){
        return "我是trait类";
    }
}

class DDD{
    use CCC;
    public function w()
    {
        return "我是父类DDD的";
    }
}
class EEE extends DDD{
    use  CCC;
}
$DDD = new DDD();
echo $DDD->w();
echo "<hr>";
$EEE = new EEE();
echo $EEE->w();//测试表明.trait类的CCC是位于父类和子类的中间.
echo"<hr>";
echo "<h2>类的自动加载</h2>";
//spl_autoload_register(function ($className) {
//    require './class/' . $className . '.php';//
//}
//echo T1::CLASS_NAME, '<hr>';
//echo T2:CLASS_NAME, '<hr>';
echo"<hr>";
echo "<h2>对象的序列化和反序列化</h2>";
class Db
{
    //连接参数与返回值
    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();
    }

}

$obj = new Db();
echo serialize($obj),'<hr>';
$tmp = serialize($obj);
var_dump(unserialize($tmp));

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议