static静态属性和方法:
1、静态方法在程序开始时加载到内存中,实例化方法使用是再加载
2、静态方法不能调用非静态方法
3、静态方法无需实例化就可以直接调用,实例化方法需要先生成实例在通过实例调用方法,
虽然看来静态方法比较快,但是他还是会占用很多内存(即常驻内存)
4、静态内存连续,因为在程序开始时就生成了,而实例申请的是离散的空间,所以速度较慢
5、静态方法无论有多少个实例,内存中也只需要维护一份拷贝
6、静态方法可以用来执行一个无状态的完整操作,因为他不能调用其他的非静态方法
7、静态方法及实例化方法是为了解决模式的问题,为了让开发更加模块化、面向对象化。
PHP对象的深拷贝和浅拷贝:
深拷贝:(值传递)赋值时完全复制,完全copy,改变其中一个不会影响另一个
浅拷贝:(引用传递)赋值时引用赋值,相当于取了个别名,对其中的一个修改,会影响到另一个
场景:对象的 = 赋值时(引用传递)实现一份副本,这样存在很多问题,在不知不觉中我们可能会拷贝很多分副本
解决引用传递(实现值传递)的两种方式:
1、重写clone函数
public function __clone(){
$this->obj = clone $this->obj;
}
2、序列化反序列化实现对象深拷贝
$m = new TestOne();
n
=
s
e
r
i
a
l
i
z
e
(
n = serialize(
n=serialize(m);
n
=
u
n
s
e
r
i
a
l
i
z
e
(
n = unserialize(
n=unserialize(n);
3、运算符注意事项:除数不能为0;整数间运算大于最大值是将被转换为float型;取模运算时余数的正负取决于被除数的正负。
4、$GLOBALS 获取函数中所有的变量
5、常量不可被修改,也不可被销毁,判断常量是否存在:用defined(‘PI’)
define(‘PI’, 3.14);
6、mysql常用函数
floor():向下取整
rand():取0-1之间的小数
left(email,5):从左边开始截取字符串
position("@"):查找字符串@的位置,返回数字
now():返回当前时间戳
date_format(now(),’%Y/%m/%d’):格式化当前时间
distinct():去重
7、表的优化与列类型选择
定长与变长分离:fixed表(定长)
常用字段和不常用字段分离
添加冗余字段
8、字段类型优先级 整形>date,time>enum,char>varchar>blob,text
9、哈希的原理(myisam)(存取的时候,运用以下函数计算id与磁盘地址间的关系)
hash($id){
…//一系列复杂的运算
return address; //返回一个磁盘地址,告诉
}
缺点:无法为范围查询进行优化,无法保证唯一性,排序无法优化,必须回行
10、联合索引:index(a,b,c) 注:和顺序有关
按顺序走a、b、c模板
= 严格走完模板
like 走完like之前的,之后的未走,所以like之后的索引不生效
btree的左前缀原则:like ‘%hello’(此句不生效)
11、非聚簇索引:myisam,数据是一个文件,索引是一个文件(要回行操作:索引和值在不同的位置),myisam指向行所在的位置
聚簇索引:innoDB,数据及索引放在一起(不需要回行操作,数据藏在叶子节点的下面),innoDB次级索引指向对主键的引用
索引覆盖:如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据,这种查询速度非常快的操作称为“索引覆盖”
12、理想的索引:操作频繁,区分度低、长度小、尽量能覆盖常用查询字段
13、伪哈希技巧:使用crc32()函数,把字符串转为32位有符号整数
14、修复表的索引碎片:optimize table;