PHP进阶知识总结
周末梳理了下这段时间看书的一些知识点,进步的过程不仅要实践,还要安排多看书、思考、总结。
只针对知识点进行了罗列和简单说明,很多细节还未整理好,待后面再专门详细写。
基础易忽略概念
is_bool()
is_integer()
is_double()
is_string()
is_object()
is_array()
is_resource()
is_null()
__call()
__callStatic() (必须是static属性)
__set()
__get()
__isset()
__clone()
__toString()
$first = new ClassName();
$second = $first;
//在php5以后的版本中,$second 和 $fitst指向同一个对象 $third = clone $first; //使用clone进行"值复制"
//在php5以后的版本中,$third和$first是两个不同的对象
/*控制复制什么:
可以实现一个__clone()方法
比如待复制的对象中有个$id=1,可我们希望此id唯一,不希望clone此id,可以在类中自己实现clone方法*/
is_callable();
call_user_func($funcName,$param); //单个参数
call_user_func_array($funcName,$arrParam); //参数是数组的形式
namespace com\name\test1;
class Debug{
static function test();
}
namespace test2;
//调用test1命名空间中的test方法
\com\name\test1\Debug::test(); //最前面必须加上 / 否则会在test2下寻找此命名空间 use com\name\test1;
test1\Debug::test();
use com\name\test1\Debug as uDebug;
class Debug{...}
uDebug::test(); __NAMESPACE__ //输出当前的命名空间
命名空间加大括号形式:
namespace com\name\test1{
class Debug1{...}
class Debug2{...}
}
require()调用文件发生错误时,将会停止整个程序,
function __autoload($className){
//将$className中的下划线转换为目录分割
$path = str_replace('_',DIRECTORY_SEPARATOR,$className);
require_once("$path.php");
}
__autoload方法是一种根据类和文件的结构,管理类库文件包含的有效方法。
class_exists();
get_declared_classes(); //获得脚本进程中定义的所有类的数组
get_class($obj); //检查对象的类,检查对象所属的类
$obj instalceof className; //检查对象 get_class_methods(); //获取一个类中所有的方法列表 is_callable()、method_exists() //检查类方法是否存在且可被调用
#一个方法存在并不以为着可调用,对private、protected、public方法,method_exists()都返回true get_class_vars($className); //获取类中定义的属性
get_parent_class($classNa,e); //获取一个类的父类
is_subclass_of($className , 'classStrName'); //检查类是否是另一个类的派生类
class_implements($className); //返回一个由接口名组成的数组
- 单一职责原则
- 接口隔离原则
- 开放-封闭原则
- 替换原则
- 依赖-倒置原则
- 不要在列上进行函数运算,导致索引失败
- 使用JOIN时,应用小结果集驱动大结果集。把复杂的JOIN查询拆分为多条sql
- 使用like模糊查询时,避免%%,可替换为<= 、 >=
- select后仅列出需要的字段,对速度不会有明显影响,主要考虑节省内存
- 使用批量插入语句,比依次执行单个插入节省交互
- limit的技术比较大时考虑使用between
- 不要使用rand函数获取多条随机记录
- 避免使用NULL
- 不要使用count(id),而是count(*)
- 尽可能在索引中完成排序
- 命中率
- 缓存更新策略
- 缓存最大数据量
- FIFO(先进先出)
- LRU(最近最少淘汰策略)
- LFU(最少使用淘汰策略)
- 停止缓存服务器,清空所有缓存数据
- 拒绝写入,不再对缓存数据进行更新
- 根据缓存更新策略清除旧数据
- 基于3的方式,对淘汰的数据进行备份
- 对数据库的高并发读写
- 对海量数据处理
- 协议简单
- 基于libevent的事件处理
- 内置内存存储方式
- 采用不互相通信的分布式
- 以守护进程方式运行与一个或多个服务器中
- Memcached使用LRU算法淘汰数据缓存
- 不支持数据持久化
- Memcache::connect(string $host [, int $port [ , int $timeout]]); //连接mem服务器
- Memcache::addServer(string $host [ , $port [ , $bool $persistent [ , $weight [, int $timeout [, int $retry_interval [ , bool $status [ , callback $failure_callback]]]]]]]); //向对象添加一个服务器
- Memcache::add(string $key,$mixed $var [, int $flag[ , int $expire]]); //添加缓存数据
- key长度不能超过250字节,
- var 值最大为1MB
- $flag 是否使用ZLib压缩,设置为MEMACHE_COMPRESSED使用压缩
- $expire缓存过期时间,0表示不过期。设置不能大于2592000(30天)
- Memcache::replace(string $key, mixed $var [ , int $flag [, int $expire]]); //替换一个已存在的key
- Memcache::set(string $key ,mixed $vsar [ , $flag [ , $expire]]) //add和replace的集合体
- Memcache::get(string $key [ , int &flags]); //获取key的缓存内容
- $flags 如果给定此参数(引用方式传递),该参数会被写入一些与key对应的信息
- Memcache::delete(string $key [ , $timeout]); //删除key的缓存
- Memcache::flush(void); //立即使所有已经存在的缓存失效
- 不真正释放任何资源,仅标记为失效
- Memcache::getServerStatus(string $host [ , $port]); //获取一个服务器的在线/离线状态
- Memcache::getStats([ string $type [ , $slabid [ , int $limit = 100]]]); //获取服务器的统计信息
- Memcache::close(void); //关闭与Memcache服务器的连接
- 主线程:接受客户端连接,并把连接分配给工作线程处理
- 工作线程:处理客户端连接的请求
- 普通Hash分布
- 一致性Hash分布
- 支持丰富的数据类型:String、List、Sort、Sorted Set、Hash
- 支持数据持久化方式:内存快照、日志追加
- 支持主从复制
PHP进阶知识总结的更多相关文章
- Spring实战3:装配bean的进阶知识
主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...
- Httpd服务进阶知识-LAMP源码编译安装
Httpd服务进阶知识-LAMP源码编译安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道,动态资源交给fastcgi程序处理,静态资源依旧由httpd服务器处理 ...
- Httpd服务进阶知识-基于FASTCGI实现的LAMP架构
Httpd服务进阶知识-基于FASTCGI实现的LAMP架构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.httpd+php结合的方式 module: php fastcgi ...
- Httpd服务进阶知识-基于Apache Modele的LAMP架构之Discuz!案例
Httpd服务进阶知识-基于Apache Modele的LAMP架构之Discuz!论坛案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库 博主推荐阅读: ...
- Httpd服务进阶知识-基于Apache Modele的LAMP架构之WordPress案例
Httpd服务进阶知识-基于Apache Modele的LAMP架构之WordPress案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装依赖包及数据库授权 博主推荐阅读 ...
- Httpd服务进阶知识-基于Apache Modele的LAMP架构之PhpMyAdmin案例
Httpd服务进阶知识-基于Apache Modele的LAMP架构之PhpMyAdmin案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常见LAMP应用 PhpMyAdm ...
- Httpd服务进阶知识-LAMP架构概述
Httpd服务进阶知识-LAMP架构概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.LAMP架构概述 1>.什么是LAM(M)P架构 L: linux A: apa ...
- Httpd服务进阶知识-HTTP协议详解
Httpd服务进阶知识-HTTP协议详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.WEB开发概述 1>.C/S编程 CS即客户端.服务器编程. 客户端.服务端之间需 ...
- Httpd服务进阶知识-调用操作系统的Sendfile机制
Httpd服务进阶知识-调用操作系统的Sendfile机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.不用 sendfile 的传统网络传输过程 read(file, tm ...
- 互联网 Java 工程师进阶知识完全扫盲
互联网 Java 工程师进阶知识完全扫盲:https://github.com/doocs/advanced-java
随机推荐
- EDEM 2018 + Fluent 19.0耦合
具体步骤参考流沙的文章即可,如果python版本较高,可能有个地方需要小小的改动一下: tools文件夹下的compile_lib_edem_coupling.py文件中,导入模块有个地方需要修改 其 ...
- java无符号Byte
1.无符号byte, 实现了将byte(-128~127) 转换为 (0~255) class UnsignedByte { private short value; private byte raw ...
- [转] 两个静态html页面传值方法的总结
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/csdn_ds/article/details/78393564 问题 因最近尝试实现客户端与服务端分 ...
- Mac 10.12安装Windows远程桌面工具Microsoft Remote Desktop
说明:之前Office自带的Windows远程桌面工具虽然简便,但是保存的服务器列表有限.而这个微软推出的自家工具可以完美解决这些问题. 下载: (链接:https://pan.baidu.com/s ...
- 数据库主键ID生成策略
前言: 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,下面介绍一些常见的ID生成策略. Sequence ID UUID GUID COMB Snowflake 最开始的自增ID为了实现分库 ...
- MySQL 连接注意事项
外连接 A LEFT JOIN B join_condition 数据表B的结果集依赖数据表A 数据表A的结果集根据左连接条件依赖所有数据表 B表除外). 左外连接条件决定如何检索数据表B(在没有指定 ...
- jstl fmt标签的使用
所有标签 fmt:requestEncoding fmt:setLocale fmt:timeZone fmt:setTimeZone fmt:bundle fmt:setBundle fmt:mes ...
- InterView之C/CPP
CPP 引用 什么是"引用"?申明和使用"引用"要注意哪些问题? 答:引用就是某个目标变量的别名(alias),对应用的操作与对变量直接操作效果完全相同.申明一 ...
- lazy初始化和线程安全的单例模式
1.双检锁/双重校验锁(DCL,即 double-checked locking) JDK 版本:JDK1.5 起 是否 Lazy 初始化:是 是否多线程安全:是 实现难度:较复杂 描述:这种方式采用 ...
- Paypal如何实现循环扣款(订阅)?
起因 业务需求要集成Paypal,实现循环扣款功能,然而百度和GOOGLE了一圈,除官网外,没找到相关开发教程,只好在Paypal上看,花了两天后集成成功,这里对如何使用Paypal的支付接口做下总结 ...