PHP命名空间的解析规则

命名空间名称定义

  • 非限定名称Unqualified name:名称中不包含命名空间分隔符的标识符,例如 Foo
  • 限定名称Qualified name:名称中含有命名空间分隔符的标识符,例如 Foo\Bar
  • 完全限定名称Fully qualified name:名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如 \Foo\Bar。 namespace\Foo 也是一个完全限定名称。

继续阅读

PHP5.4中新增Traits的用法

自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。这是一个非常强大的方法,下面详细介绍Traits的用法。

Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。

Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。

继续阅读

php中的declare详细用法

一般用法是 declare(ticks=N);
拿declare(ticks=1)来说,这句主要作用有两种:
1、Zend引擎每执行1条低级语句就去执行一次 register_tick_function() 注册的函数。
可以粗略的理解为每执行一句php代码(例如:$num=1;)就去执行下已经注册的tick函数。
一个用途就是控制某段代码执行时间,例如下面的代码虽然最后有个死循环,但是执行时间不会超过5秒。

继续阅读

PHP的魔术常量与魔术方法

一、魔术常量

__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。它等价于dirname(__FILE__)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增) =
__FUNCTION__ 函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
__CLASS__ 类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写)。Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
__METHOD__ 类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__ 当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。

参考官方文档
继续阅读

日志分析常用命令

一些较为入门级的操作,这里不做介绍,例如cp、mv、rm、mkdir、touch、ls、tar等操作.

1、查看文件的内容cat

cat命令是一个显示文本文件内容的便捷工具,如果一个日志的文件较小,可以直接使用cat命令将其内容打印出来,进行查看。如果一个日志的文件较大,请不要这样操作,打开一个过大的文件,可能会占用过多的系统资源,从而影响系统对外的服务。

继续阅读

大型分布式网络架构

一个大型、稳健、成熟的分布式系统的背后,往往会涉及众多的支撑系统,我们将这些支撑系统称为分布式系统的基础设施,包括:分布式协作及配置管理系统zookeeper,分布式缓存系统,持久化存储,分布式消息系统,搜索引擎,CDN系统,负载均衡系统,运维自动化系统,实时计算习系统,离线计算系统,分布式文件系统,日志搜集系统,监控系统,数据仓库等.

Git常用的config配置

config的配置除了命令外,可以直接修改相对应的文件。

系统配置:/etc/gitconfig
全局配置:~/.gitconfig
项目配置:工作区/.git/config

继续阅读

Git配置命令config

Git中的config命令用来初始化Git环境配置,一旦配置成功后,即使Git升级了,也会绑定到你的环境中,Git的config配置分为三种:系统配置、全局配置、项目配置

继续阅读

>/dev/null 2>&1的含义

shell中可能经常能看到:>/dev/null 2>&1 ,命令的结果可以通过%>的形式来定义输出

  • >/dev/null 代表空设备文件
  • > 代表重定向到哪里,例如:echo “123” > /home/123.txt
  • 1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
  • 2 表示stderr标准错误
  • & 表示等同于的意思,2>&1,表示2的输出重定向等同于1

继续阅读

crontab命令详解

linux系统中由 cron (crond) 这个系统服务来控制,循环运行的例行性计划任务。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。

继续阅读

彻底理解PHP的SESSION机制

默认机制

用磁盘文件来实现PHP会话。php.ini配置:session.save_handler = files

一、session_start()

session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,

继续阅读

谈谈Redis的SETNX

在 Redis 里,所谓 SETNX,是「SET if Not eXists」的缩写,也就是只有不存在的时候才设置,可以利用它来实现锁的效果,不过很多人没有意识到 SETNX 有陷阱!

比如说:某个查询数据库的接口,因为调用量比较大,所以加了缓存,并设定缓存过期后刷新,问题是当并发量比较大的时候,如果没有锁机制,那么缓存过期的瞬间,大量并发请求会穿透缓存直接查询数据库,造成雪崩效应,如果有锁机制,那么就可以控制只有一个请求去更新缓存,其它的请求视情况要么等待,要么使用过期的缓存。

继续阅读

Nginx 配置之安全篇

一、隐藏不必要的信息

大家可以看一下我的博客请求响应头,有这么一行 server: nginx,说明我用的是 Nginx 服务器,但并没有具体的版本号。由于某些 Nginx 漏洞只存在于特定的版本,隐藏版本号可以提高安全性。这只需要在配置里加上这个就可以了:

server_tokens off;

继续阅读

Nginx 配置之性能篇

本文提到的一些 Nginx 配置,需要较高版本 Linux 内核才支持。在实际生产环境中,升级服务器内核并不是一件容易的事,但为了获得最好的性能,有些升级还是必须的。很多公司服务器运维和项目开发并不在一个团队,一方追求稳定不出事故,另一方希望提升性能,本来就是矛盾的。好在我们折腾自己 VPS 时,可以无视这些限制。

继续阅读