原型图设计还可以使用墨刀
bug管理工具:bugfree
分类:PHP实战开发教程
第20章企业级项目开发与学习的异同
1.没有备注
2.主键没有自增
3.密码应该>=32,因为md5()加密后就是32位的,本着为用户负责的思想,密码必须加密,不允许使用明文密码,注意:md5()是散列,不是加密,从密码学的角度来看,能够加密就一定能够解密,但是md5()是不可逆的。
4.DEFAULT NULL对于性能的影响比较大,改为not null
5.应该给username字段加索引,加快检索速度
6.MyIsam不支持事物,建议改为InnoDB
19-6注册树模式简介–PHP实战开发教程
注册树模式简介
点我阅读全文19-5工厂模式简介–PHP实战开发教程
工厂模式简介
点我阅读全文19-4单例模式简介–PHP实战开发教程
单例模式简介
点我阅读全文19-3细说MVC设计思想(下)–PHP实战开发教程
细说MVC设计思想(下)
点我阅读全文19-2细说MVC设计思想(中)–PHP实战开发教程
细说MVC设计思想(中)
点我阅读全文19-1细说MVC设计思想(上)–PHP实战开发教程
细说MVC设计思想(上)
点我阅读全文18-5命名空间的别名与导入方式–PHP实战开发教程
当导入命名空间的类与当前空间的类重名时应该取别名
点我阅读全文18-4命名空间的分类与访问方式–PHP实战开发教程
命名空间的声明
1.没有空间前缀:非限定名称 当前文件/目录
2.有当前空间前缀:限定名称 相对路径
3.从全局空间\开始:完全限定名称 相当于从根目录开始查询即绝对路径
18-3命名空间的声明与全局空间访问–PHP实战开发教程
命名空间的声明与使用
1.使用关键字:namespace
2.php5.3+
3.namespace 之前不能有除了declare和注释之外的任何代码,html也不行
4.命名空间默认从全局开始定位,全局空间用\表示,类似于根目录
5.如果当前脚本声明了命名空间,则所有成员的访问,就必须使用命名空间,包括系统函数
18-1跨类调用__call()和__callStatic()–PHP实战开发教程
实现原理解析:
执行$db->table(‘staff’)时,因为Db中没有table()方法,所以会调用魔术方法__call(),在魔术方法中,会跳转到Query类中的table()方法
17-7类属性检测与删除__isset()和__unset()–PHP实战开发教程
魔术方法:
1.类中以双下划线开头的方法,这是由系统内置的,用户方法不要用双下划线开头;
2.魔术方法由系统在一定条件下自动触发调用,用户不能直接调用;
注意:将类中的私有成员前面添加单下划线是一个好习惯;
例如: private $_salary; private function _listUsers(){…}
使用魔术方法实现几个对象访问拦截器
所谓拦截器:就是对用户的一些错误或非法访问进行检测和控制。
17-6对象序列化与__sleep()和__wackup()–PHP实战开发教程
一、对象的序列化
1.php中的任何值都可以序列化为包含字节流表示的字符串来表示
2.序列化对象可以保存到变量或者文件中,方便保存和传送
17-5如何克隆对象–PHP实战开发教程
对象的复制与克隆
1.默认情况下,对象是引用传递(实际上是对象标识符的复制,后面会详细说)
2.也就是说二个对象变量实际上是引用的是同一个对象
3.如果要创建一个新的对象,必须使用clone关键字来克隆当前对象
4.当使用clone关键字时,如果类中有__clone()会自动调用
5.__clone()方法运行在新创建的对象上面
6.__clone()方法能控制我们复制什么,以及克隆时要完成的基本操作
17-4如何遍历对象–PHP实战开发教程
遍历对象
1.仅能遍历属性,方法不可遍历
2.外部遍历仅能查看公共可见属性
3.如果要查看全部属性,需要在类中创建外部接口方法来实现
4.最终结果以关联数组格式呈现,使用foreach()语句进行遍历
17-3细说trait与继承-–PHP实战开发教程
Trait是什么?
1.trait是为单继承语言量身定制的代码复用机制;
2.之前可以通过函数或类来实现代码复用;
3.trait可以简单的理解为一个类方法的集合,工作在父类与子类之间;
4.但是trait不仅仅局限于方法集合,还支持抽象,静态与属性;
5.当前类成员会覆盖trait类成员,而trait中的成员,又可以覆盖同名类成员
6.重要提示:trait不是类,不能实例化,切记切记
17-2细说接口与实现-–PHP实战开发教程
接口
1.使用关键字:interface
2.类是对象的模板,接口是类的模板
3.接口看作是一个特殊的类
4.接口中的方法,只声明不实现,与抽象类一样
5.接口中的方法必须是public,支持static
6.接口中可以声明类常量const,但不允许被类或子接口覆盖
7.用类实现一个接口使用implements 关键字
8.一个类可以实现多个接口,多个接口之间用逗号分开
17-1抽象类是什么–PHP实战开发教程
抽象类
1.使用关键字: abstract
2.类中只要有一个方法声明为abstract抽象方法,那么这个类就必须声明为抽象类
3.抽象方法只允许有方法声明与参数列表,不允许有方法体;
4.因为抽象方法的不确定性,所以抽象类禁止实例化,仅允许通过继承来实例化;
5.继承抽象类的子类中,必须将抽象类中的所有抽象方法全部实现
6.子类成员的访问限制级别必须等于或小于抽象类的约定,例如抽象类是protected,子类必须是
protected 或者 public 不允许是private
7.子类方法参数必须与抽象类方法参数完全一致,但允许增加默认参数
16-5细说static与后期静态绑定–PHP实战开发教程
细说static
一、用途:
1.类中声明静态成员
2.函数中声明静态变量
3.后期静态绑定
二、特点:
1.静态成员属于类,必须用类访问
2.静态方法比较特殊,允许用对象访问,但不推荐
3.必须使用范围解析符::访问,不允许使用对象访问符->访问
4.静态属性仅允许使用字面量(字符/数值/数组)或常量进行初始化(禁止表达式/变量/对象)
16-4 细说范围解析符–PHP实战开发教程
一、用途
1.调用静态成员(类外部)
2.调用类常量
3.调用被子类覆盖的类成员(属性/方法)
二、场景
1.类外部:前面仅允许通过类名来访问类中成员
2.类内部:前面仅允许: self, parent,static
三、特殊: 允许使用类名变量来引用类名(php5.3+)
点我阅读全文16-3eval()与创建匿名函数–PHP实战开发教程
eval()与create_function()
一、eval()
1.eval()函数把字符串按照 PHP 代码来计算
2.该字符串必须是合法的 PHP 代码,且必须以分号结尾
3.如果没有在代码字符串中调用 return 语句,则返回 NULL
4.如果代码中存在解析错误,则 eval() 函数返回 false
5.该函数对于在数据库文本字段中供日后计算而进行的代码存储很有用
16-2用户回调代理执行函数–PHP实战开发教程
二:两个执行回调的函数
什么是回调?
答:
我们调用php系统提供的函数叫直接调用,也叫: 直调
php系统调用用户自定义的函数,必须要通过一个代理函数来调用,叫间接调用,也叫回调
以下是两个系统定义的函数,用来执行回调
1.call_user_func(callable,args…)
2.call_user_func_array(callable,[…])
16-1参数处理函数–PHP实战开发教程
函数处理函数
一、参数获取:必须在函数中调用才有意义
1.func_num_args(void):返回参数数量
2.func_get_args():返回参数值索引数组
3.func_get_arg(int):返回指定索引的参数值
15-4静态成员的创建与访问–PHP实战开发教程
静态成员的创建与访问
点我阅读全文15-3类的继承与方法重载–PHP实战开发教程
类的继承与方法重载
点我阅读全文15-2类的自动加载–PHP实战开发教程
类的自动加载
1.如果要在当前脚本中使用很多对象时,就不得不在头部使用require或include加载很多的类文件
2.为了避免这种情况,推荐使用类的自动加载器,用户在创建对象时,就不必关心当前类是否已导入
3.类的自动加载,使用了标准php函数库中的spl_autoload_register()函数来实现
4.sql_autoload_register(类名),多个类名请放在数组中
15-1类属性与类常量–PHP实战开发教程
知识点:
类属性与类常量
1.类属性仅允许使用以下类型的数据进行初始化
标量和数组字面量:字符串,数值,常量,数组,原型文档(php5.3+)
2.不允许使用:变量,表达式,对象
3.类常量使用关键字const声明,不允许设置访问限制符,强制为public,不能更改
4.类常量是属性类的,不属性它的某个实例对象,必须使用类才可以访问
5.访问类常量要使用范围解析符::,双冒号
在类中使用关键字self表示当前类,在外部可直接使用类名
14-3魔术方法__get()和__set()–PHP实战开发教程
1.类魔术方法:__get(),__set()实现属性查询器和设置器
2.魔术方法之前介绍过了,需要特定场景触发,由对象自动调用
3.__get($name): 外部通过对象获取对象私有属性或不存在的属性时自动触发
4.__set($name,$value):外部设置私有属性或不存在属性值的时候自动触发
5.魔术方法可以适用于所有存在或不存在的类属性,不需要再为每个属性创建对应的访问接口