博主信息
博文 35
粉丝 0
评论 0
访问量 40696
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
匿名对象与匿名类,Trait类,类的自动加载,对象的序列化与反序列化-2018-9-16
THPHP
原创
868人浏览过

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举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学