Blogger Information
Blog 35
fans 0
comment 0
visits 32668
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
匿名对象与匿名类,Trait类,类的自动加载,对象的序列化与反序列化-2018-9-16
THPHP
Original
651 people have browsed it

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 受保护:仅限本类或本类的子类访问,外部不可访问与代用

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


Correction status:Uncorrected

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
Author's latest blog post