PhpStorm 代码审查

PHP的自动类型转换(弱类型)使我们在开发过程中确实尝到了不少甜头,然后由于语言的松散性(个人杜撰用词,PHP是全宇宙最牛逼的语言),也使我们在开发过程中碰到不少让人追悔莫及的问题,这篇文字旨在帮助自己总结IDE是如何帮助自己避免一些潜在问题的 手抖问题 先看下面代码 if ($condition = 'ok') { //do something } 这里我们的本意是当$condition的值为ok时,进入判断逻辑内。但是由于我们手抖少写了一个等号,结果的变成了每次后悔执行do something操作 当然如果我们有良好的编码习惯,这类问题是可以直接避免的,我们可以做到在判断语句中,始终将常亮放到等式的左边,例如 if ('ok' = $condition) { ...
点我阅读更多...

谈谈session

做互联网开发的同学,想必都对session有所了解。session我们可以理解为是一个会话,能确定服务的访问者当前的状态或者身份,也可以理解为是当前访问者的一些相关数据。最近由于项目中碰到了一些关于session处理的内容,索性将session相关的东西总结下,以备将来回顾。 什么是session 在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Se...
点我阅读更多...

nginx vhost

在服务器架构上,一般我们会选用LAMP或者LNMP的配置。前面我们说明了一些关于apache配置的东西,这里大概描述下nginx的配置。关于怎么安装LNMP这里就不做赘述,网上也存在很多教程。 nginx配置文件 nginx的配置文件,一般都存在于nginx目录下的conf目录。如下图所示 所有的配置都可以在此设置 配置vhost nginx的vhost配置文件存在于conf/vhost目录,结构如下 我们可以为每个虚拟主机路径建立一个文件,当然文件名没有什么特殊的要求,只要以conf结尾即可。一般我们会起一个容易标示的名字。 配置说明 首先我们来看看phabricator.conf的内容 server { server_name phabricator.powell....
点我阅读更多...

C++11 Lambda表达式

今天学习了C++11引入的Lambda表达式,Lambda在使用上有很多的方便之处。我们可以将之用于函数的回调,操作的封装的等地方。如果我们有Objective-c的经验的话,其实我可以将Lambda表达式和Block进行对比学习,两者有很多的相似之处。 优势 根据对Lambda的了解,发现其用途和函数指针有太多的相似之处,甚至可以理解为功能重叠。那么为什么在C++11中还要引入Lambda表达式呢? 1. 函数指针是类型不安全的 C语言的函数指针就是一个地址变量,在赋值和调用的时候没有任何类型检查。任何一种函数指针都可以转型为其他类型的函数指针, 当转型回来时,与原函数指针相同。必须由开发者自己保证正确的类型。函数指针无法提前在编译器给出错误提示。 2. bind能保证类型安全...
点我阅读更多...

Apache vhost

刚开始开发web的时候,我总是将项目直接部署至Apache的DocumentRoot目录,这样我只需要将自己的域名指到localhost即可。但是随着项目开发的进行,我需要同时开发前端和后台时,一个致命的问题就暴露了出来,我需要在每次切换项目的时候,替换DocumentRoot下部署的文件,这样反而让我的开发效率降低了不少。于是乎,最终选择了Apache的vhost方式 打开Apache对vhost的支持 编辑Apache配置文件,在macos上的默认路径为 sudo vim /etc/apache2/httpd.conf 找到下面这行代码,将前边的注释去掉 498 # Virtual hosts 499 Include /private/etc/apache2/extra/h...
点我阅读更多...

MySQL对char和varchar长度的解释

这篇文章纯属实践检验型的,没有技术分析的成分。这段时间在建表的时候,对字符串存取时设置预置大小时产生了一些小得疑问,所以就自己检验了下。要是平时不太注意的同学也可以参考下。 实验 首先我们建立一个数据表 CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(5) NOT NULL DEFAULT '', `ic_number` varchar(18) NOT NULL DEFAULT '', `bank_card` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name_number` (`...
点我阅读更多...

Git实现代码自动部署

这段时间自己一直投身于Web的前后台开发,每每碰到需要部署到测试服务器或是线上服务器时,都是手工进行合并。但是这样会无形中增加我们部署的风险。而我们确实也由于这样的手动部署导致了不少线上问题。今天这里为大家推荐一个方法,就是利用push代码的时机对代码进行自动部署,这样我们每次只要有提交代码就会部署到测试服务器或者线上,方便快捷,降低出错率。 确定自动部署的时机 我们的代码采用的是Git Flow的形式,介于我们在本地开发测试,只有预发布状态才会进行线上部署,所以我们的时机就选择当master代码接收到push动作时触发。Git本身给我们提供了很多hook脚本来帮助我们在git的各个阶段做一些自定义的工作,由于我们是为了捕捉Git的push操作,所以git hook当然是我们的不二...
点我阅读更多...