博客列表 >面向对象的进阶内容 20191010

面向对象的进阶内容 20191010

阿乎乎的学习
阿乎乎的学习原创
2019年10月11日 17:20:53649浏览

第一个知识点   接口常量,接口常量和类常量类似,也是用const来定义,

第二个知识点  后期静态绑定(延迟静态绑定),绑定是在代码运行是发生的。静态继承的上下文环境中,调用子类重新的静态方法,使用关键词static代替self。

第三个知识点 命名空间的分级管理

第三个知识点  trait是为了解决子类只能继承一个父类单继承机制,在宿主类中引用trait类,使用use traitName就可以使用

作业一:写一个分级的命名空间, 并实现类的自动加载

实例

<?php
namespace __1010;
spl_autoload_register(function($className){
    $path=str_replace('\\',DIRECTORY_SEPARATOR,$className);
    $path=__DIR__.DIRECTORY_SEPARATOR.$path.'.php';
    include $path;
});
//类的别名使用use \__NAMESPACE__\className as Name 来定义,use默认是从根空间开始的,因此最前面的\可以省略。如果省略了Name,那么类的别名就是类名,as定义放置空间命名冲突
use config\inc\text1;
use config\inc\text2;
use config\demo1;
use config\demo2;
use inc\test1;
use inc\test2 as test2;
//测试结果,输出的都是类名下的text()方法,加载成功。
echo text1::text().'<br>';
echo text2::text().'<br>';
echo demo1::text().'<br>';
echo demo2::text().'<br>';
echo test1::text().'<br>';
echo test2::text();

运行实例 »

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

2222.png


作业二: 写一个trait类, 理解它的功能与使用场景

实例

//创建一个返回姓名和年龄的trait类
trait info{
    public $name;
    public $age;
    public function info(){
        return '我名字是'.$this->name.',年龄是'.$this->age;
    }
}
//创建一个返回地址和电话的trait类
trait address{
    public $address;
    public $phone;
    public function ainfo(){
        return '我家住在'.$this->address.',我的电话是'.$this->phone;
    }
}
//创建类来继承方法,最后返回信息
class getInfo{
    use info;
    use address;
    public function __construct($name,$age,$phone,$address)
    {
        $this->phone=$phone;
        $this->name=$name;
        $this->age=$age;
        $this->address=$address;
    }
    public function getInfo(){
        return $this->info().$this->ainfo();
    }
}
echo '<br>';
$info=new getInfo('小新',18,13598653541,'重庆市渝北区万寿山');
echo $info->getInfo();

运行实例 »

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



Trait类是为了解决子类只能继承一个父类而生的,这样子类就可以继承多个trait类的属性和方法,更加灵活多变。

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