博客列表 >匿名对象与匿名类,Trait类,类的自动加载,对象的序列化与反序列化-2018-9-16

匿名对象与匿名类,Trait类,类的自动加载,对象的序列化与反序列化-2018-9-16

THPHP
THPHP原创
2018年09月16日 17:28:37650浏览

1、匿名对象与匿名类的实现过程:

实例

<?php
class a{
    private $name ='甜歌';

    public function stror($name){
        return $this->name.'看上了:<span style="color:red;">'.$name.'</span>';
    }
}
$a = new a();
echo $a->stror('帅哥').'<hr>';
// 匿名对象
echo (new a())->stror('好哥们').'<hr>';
//匿名类
echo (new class{
    private $name = '坏孩子';
    public function stror($name){
        return $this->name.'喜欢上了:<span style="color:red;">'.$name.'</span>';
    }
})->stror('帅哥'),'<hr>';

运行实例 »

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

2、Trait类的声明与工作原理:

实例

<?php
class a{
    //  受保护的成员变量
    protected $name;
    public function __construct($name='小白'){
        $this->name=$name;
    }
    public function study($course = 'php'){
        return $this->name . '学习:' . $course;
    }
}
trait Cour{
    public $title = '小名';
    public function study($name = '踢足球'){
        return $this->name .'在学习'.$name;
    }
}
trait Cour1{
    public function study($name = '打篮球'){
        return $this->name .'和'.$this->title.$name;
    }
}
class Student extends a{
    use Cour,Cour1{
        // 当Cour类中的方法与Cour1类中的方法同名就替换成 Cour1的类方法,
        Cour::study insteadof Cour1;
        // 给 Cour1类中的方法起个别名
        Cour1::study as MySport;
    }
}
// Student对象实例化
$Student = new Student();
// 调用的是 $Student类中的trait Cour类study方法
echo $Student->study().'<hr>';
// 调用的是 $Student类中的trait Cour1类study方法,但是与方法同名了,所以起了调用的是MySport别名
echo $Student->MySport().'<hr>';

运行实例 »

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

3、类的自动加载函数的写法:

实例

<?php
spl_autoload_register(function ($className){
    // 自动加载class文件夹中的后缀.php文件
    require 'class/'.$className.'.php';
});

运行实例 »

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

4、对象的序列化与反序列化的原理与应用:

实例

<?php
class demo{
        public $name;
        public $age;
        public $salary;
        // 构造方法
        public function __construct($name,$age,$salary=0){
            $this->name=$name;
            $this->age=$age;
            $this->salary=$salary;
        }
        // 当有序列化的属性时,自动调用
        public function __sleep(){
            return ['name','age','salary']; // 要序列化的属性
        }
        // 如果反序列化时,wakeup方法中有相同的属性时,就以wakeup方法中的值为最新值
        public function __wakeup(){
            $this->age = 48;
            $this->name = '天歌凤舞';
        }
    }
$obj = new demo('天弘',28,5000);
// 序列化之前对象属性
echo '姓名:'.$obj -> name.',年龄:'.$obj->age.',工资:'.$obj->salary.'<br>';
// 序列化之后对象属性
$obj1 = serialize($obj);
echo $obj1.'<hr>';
// 反序列化
$obj2 = unserialize($obj1);
// 反序列化之后的对象属性
echo '姓名:'.$obj -> name.',年龄:'.$obj->age.',工资:'.$obj->salary.'<br>';
// 反序列化之后
var_dump($obj2);
echo '<hr>';

运行实例 »

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

5、面向对象编程的基本理解

    访问一个类,必须要实例化对象。这样才可以访问对象中的类。当有很多类方法相同的情况下,为了代码复用性,我们可以把对象实例化来进行调用与访问。以及继承其他的类进行访问调用,这样代码就更加简洁一些。

  可以把对象中的类,看作为一个方法类,当我们需要哪些代码时,进行对象的实例化进行调用他的方法类。

    在对象中有三个重要的访问控制符:private 私有化:属性仅在当前对象内部可以使用,外部类不可以调用。public公开的:可以在外部类进行调用与使用。protected 受保护:仅限本类或本类的子类访问,外部不可访问与代用

    有了类才可以实例化对象,实例化对象后才可以进行调用类(包含继承类),访问类,成员属性!对象中没有类,也只是个无用的代码!


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