modern php笔记---2.1、特性(命名空间、特性、性状)
modern php笔记---2.1、特性(命名空间、特性、性状)
一、总结
一句话总结:
legend2是真的非常好用,资质起码提升5倍,也就是学习效率提升了起码5倍
1、命名空间实质?
从技术层面来看,命名空间只是php语言中的一种记号,php解释器会将其作为前缀添加到类、接口、函数和常亮的名称的前面。
2、厂商命名空间?
厂商命名空间是最重要的命名空间,厂商命名空间是最顶层命名空间,用于识别品牌或所属组织,必须具有全局唯一性。子命名空间没那么重要,不过有助于组织项目的代码。
3、use关键字导入?
使用use关键字导入代码时无需在开头加上\符号,因为php假定导入的是完全限定的命名空间。
4、一个文件中使用多个命名空间?
类中直接namespace关键字声明即可
<?php
namespace Foo{
//在这声明类、接口、函数和常量
}
namespace Bar{
//在这声明类、接口、函数和常量
}
5、php接口是什么?
接口是两个php对象之间的契约,其目的不是让一个对象依赖另一个对象的身份,而是依赖另一个对象的能力。
6、使用接口好处?
使用接口编写的代码更灵活,能委托别人实现细节。
7、php性状(trait)?
性状是类的部分实现(即常量,属性和方法),可以混入一个或多个现在的php类中。
性状有两个作用:表明类可以做什么(像是接口);提供模块化实现(像是类)。
8、让两个无关的php类具有类似的行为,应该怎么做呢?例如,RerailStore和Car两个php类的作用十分不同,而且在继承层次结构中没有共同的父类。不过这两个类都应该能使用地理编码技术转换成经纬度,然后在地图上显示。?
1、父类:我的第一反应是创建一个父类Geocodable(这么做不好),让Retailstore和Car都继承这个类。这种解决方法不好,因为我们强制让两个无关的类继承同一个祖先,而且很明显,这个祖先不属于各自的继承层次结构。
2、接口:我的第二反应是创建Geocodable接口(这么做更好),定义实现地理编码功能需要哪些方法,然后让Retailstore和car两个类都实现这个接口。这种解决方法好,因为每个类都能保有自然的继承层次结构。不过,我们要在两个类中重复实现相同的地理编码功能,这不符合DRY原则。
3、性状:我的第三反应是创建Geocodable性状(这么做最好),定义并实现地理编码相关的方法,然后把在Retailstore和Car两个类中混入这个性状。这么做不会提乱这两个类原本自然的继承层次结构。
9、如何创建性状?
<?php
trait MyTrait{
//这里是性状的实现
}
trait关键词,像类和接口一样
10、如何使用性状?
PHP性状的使用方法很简单,把use MyTrait;语句加到PHP类的定义体中即可。
<?php
class MyClass{
use MyTrait;
//这里是类的实现
}
11、性状执行的原理?
PHP解释器在编译时会把性状复制粘贴到类的定义体中,但是不会处理这个操作引入的不兼容问题。如果性状假定类中有特定的属性或方法(在性状中没有定义),要确保相应的类中有对应的属性和方法。
二、内容在总结中
modern php笔记---2.1、特性(命名空间、特性、性状)的更多相关文章
- 《PHP7底层设计与源码实现》学习笔记1——PHP7的新特性和源码结构
<PHP7底层设计与源码实现>一书的作者陈雷亲自给我们授课,大佬现身!但也因此深感自己基础薄弱,遂买了此书.希望看完这本书后,能让我对PHP7底层的认识更上一层楼.好了,言归正传,本书共1 ...
- <NET CLR via c# 第4版>笔记 第18章 定制特性
18.1 使用定制特性 FCL 中的几个常用定制特性. DllImport 特性应用于方法,告诉 CLR 该方法的实现位于指定 DLL 的非托管代码中. Serializable 特性应用于类型,告诉 ...
- modern php笔记---php (性状)
modern php笔记---php (性状) 一.总结 一句话总结: trait是和继承一个层次的东西 一个类use MyTrait;后,trait中的方法覆盖父类方法,当前类中的方法覆盖trait ...
- [C#]Attribute特性(3)——AttributeUsage特性和特性标识符
相关文章 [C#]Attribute特性 [C#]Attribute特性(2)——方法的特性及特性参数 AttributeUsage特性 除了可以定制自己的特性来注释常用的C#类型外,您可以用At ...
- [C#]Attribute特性(2)——方法的特性及特性参数
上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...
- swift 声明特性 类型特性
原文地址:http://www.cocoachina.com/newbie/basic/2014/0612/8801.html 特性提供了关于声明和类型的很多其它信息.在Swift中有两类特性,用于修 ...
- modern php笔记---1、新时代的php
modern php笔记---1.新时代的php 一.总结 一句话总结: php有Zend Engine 和 Facebook开发的 HipHop Virtual Machine两套引擎 1.php也 ...
- opencv2.4.13+python2.7学习笔记--opencv中的Gui特性--图片:读图像,显示图像,保存图像
阅读对象:可以配置opencv+Python环境的任何人,毕竟写这篇文章的人就是小白. 1.环境说明 1.1opencv版本: 1.2Python版本: 1.3系统:win7 注: (1)opencv ...
- TypeScript学习笔记 (一)基础特性
一. 字符串新特性 1. 多行字符串 var str = ``; 2. 字符串模板 var world = "world"; var str = `hello ${world}`; ...
随机推荐
- .net 分布式锁
原文 : 浅解.Net分布式锁的实现 序言 我晚上有在公司多呆会儿的习惯,所以很多晚上我都是最后一个离开公司的.当然也有一些同事,跟我一样喜欢在公司多搞会儿.这篇文章就要从,去年年末一个多搞会的晚 ...
- homebrew学习(四)之取消homebrew自动更新
homebrew自动更新 使用brew install /brew cask install安装软件总是先updating HomeBrew…,速度很慢 取消homebrew自动更新 方法一:使用命令 ...
- 【转载】Django自带的注册登陆功能
1.登陆 知识点: a.auth.authenticate(username=name值, password=password值) 验证用户名和密码 b.auth.login(request, use ...
- numpy.hstack(tup)
numpy.hstack(tup) Stack arrays in sequence horizontally (column wise). Take a sequence of arrays and ...
- vue-mixins和vue高阶组件
我们在开发过程中,因为需求的变更,往往会遇见对现有组件的改造和扩展. 那么我们有什么方法对现有组件进行改造和扩展呢? 常见的我们可以使用mixins方式 下面就让我们来看一下怎么使用mixins方式对 ...
- GDAL支持中文路径和Shp文件中文属性写入
在使用GDAL的过程中,为了支持中文,比需手动进行中文路径的设置,同时特别是在对Shp的属性进行中文输入的时候,都必须进行必要的设定. 为了支持中文路径,在注册了驱动之后,加上第三句就可以了.必须设置 ...
- Linux--操作系统基础及基础命令--01
一.系统基础 1.三大部件: CPU:运算器.控制器.存储器 内存:CPU的数据只能从内存中读取,且内存数据是易失性的(页面) IO: 控制总线.数据总线 2.OS的管理 GUI:图形用户界面 GNO ...
- [StructLayout(LayoutKind.Sequential) ] 是什么意思
首先介绍一下 结构体和类的区别 :类是按引用传递 结构体是按值传递进入正题:结构体是由若干成员组成的.布局有两种1.Sequential,顺序布局,比如struct S1{int a;int b;}那 ...
- pycharm 的一个小问题
版本:PyCharm 2018.3.7 (Professional Edition) 这段时间用pycharm写python代码,运行网上copy的代码.报错了也就是少个模块或者Python2的语法在 ...
- DNS记录
转载于:https://www.cnblogs.com/sddai/p/5703394.html 类型 SOA NS A AAAA PTR CNAME MX --------------------- ...