Hot For Coding
狡猾的几道PHP试题,试试看看你会不会也掉入陷阱

这几道题是在网上看到的,感觉挺有意思,拿来给大家分享其中的陷阱,看看你会不会掉入其中。

第一题

$arr = array(0 => 1, "aa" => 2, 3, 4);

foreach($arr as $key=>$val){
  print($key == "aa" ? 5 : $val);
}

输出结果是多少?如果的答案是1534就掉入陷阱了。

先看看这个数组最终形成的结构:

Array
(
  [0] => 1
  [aa] => 2
  [1] => 3
  [2] => 4
)

然后遍历每一个元素的key看等不等于aa,等于就用5替代。当我告诉你答案是5534的时候,你会不会有点惊讶!难道0等于"aa"吗?是的,0就等于"aa",这道题重点就考你这个。在PHP中两个值进行逻辑判断时,如果两个值的类型不一致PHP会自动把右边的值转换到左边的类型,然后再进行判断。因此"aa"转换整形等于0,自然也就等于左边的0了。你可以使用全等于避免这种该情况,也就是如果你写成

...

READ ALL

MySQL IFNULL函数判断字段值为NULL时使用默认值

在使用left join等联表查询时,常遇到某些字段为null,一般都在程序处理使用if a==null判断做处理,其实MySQL本身也有一个IFNULL函数可以处理。

name:

mysql> select * from name;
+------+-----------+
| id   | user      |
+------+-----------+
|    1 | xiaoqiang |
|    2 | lisi      |
|    3 | xiaowu    |
|    4 | laoliu    |
+------+-----------+
4 rows in set (0.00 sec)

...

READ ALL

Nginx支持.htaccess

Nginx和Apache的.htaccess自然是一点关系都没有,然而由于历史原因非常多的Apache用户正在逐步使用Nginx,同样是WebServer,部分规则特性都是相通的,要想在Nginx使用.htaccess目前最简单的方法是把.htaccess翻译到nginx.conf。显然已经有人这么干了,并且还推出了网页版

打开这个网页,把你的.htaccess内容粘贴到文本框中,点Convert按钮即可生成nginx.conf,并且这个工具还支持格式检查,非常好用。当然了,毕竟是程序翻译的,最好还是检查一下转换结果再使用。

...

READ ALL

Git常用命令

Git是一个分布式版本控制软件,目前非常流行,尤其是去中心化,相比SVN我更觉得Git更加好用

# 它可以将当前目录初始化一个Git仓库
$ git init

# 克隆一个远程的仓库,这个地址一般有两种协议
# 1、http
# 2、ssh
$ git clone [remote repo url]

# 查看改了哪些文件
$ git status

# 添加修改的文件,后面的点表示添加所有文件
$ git add .

# 提交代码
$ git commit -m "first commit"

# 查看所有记录
$ git log

# 设置远程仓库
$ git remote set-url origin [url]

# 同步远程代码到本地
$ git pull

# 推送到远程分支
$ git push -u origin master

# 查看所有tag
$ git tag

# 打tag
$ git tag v1.0.0

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 如果本地和远程都要列出来
$ git branch -a

# 新建一个分支并切换
$ git branch -b [branch name]

# 切换回master分支
$ git checkout master

# 合并dev分支到master分支
$ git merge --no-ff dev

# 删除分支
$ git branch -d dev

...

READ ALL

推荐一个JavaScript的变种脚本语言CoffeeScript

首先,为什么会有CoffeeScript这种东西,原因特别简单,为了弥补JavaScript的不足。它的运行原理特别简单,按照它的语法编写程序,在丢到浏览器运行之前需要使用它的编译器编译成JavaScript代码。理论上,也属于编译语言,只不过传统上我们认识的编译语言都是编译成二进制

使用之前需要安装

npm install coffeescript

...

READ ALL

关于script标签

script标签是我们主要引入或者编写JavaScript脚本代码的标签,通常它这么使用

<script>
// Here is JavaScript codes
console.log('Hello World!');
</script>

也可以使用src指定远程脚本,这个远程脚本可以是任意URI资源

app.js

// Here is JavaScript codes
console.log('Hello World!');

index.html

<script src="app.js"></script>

...

READ ALL

yum命令出现 段错误 (core dumped)

使用yum命令安装东西或者yum update时都提示以下错误:

[root@lee ~]# yum update
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * extras: mirrors.tuna.tsinghua.edu.cn
 * soluslabs: mirror.eu1.soluslabs.net
 * updates: mirrors.tuna.tsinghua.edu.cn
段错误 (core dumped)

...

READ ALL

一个可以使用浏览器通过SSH连接Linux的程序

如果你总是在新的电脑上需要使用SSH客户端连接你的远程服务器,又不想没换一个环境就要安装一次SSH客户端,那么这个程序就是你需要的,地址

把它下载到你的服务器端,按照教程设置并启动服务

打开一款支持WebSocket协议的浏览器,输入服务器地址,顺利的话你应该能看到这个页面

full

如果输入正确的地址加授权信息,就能顺利登入系统

full

...

READ ALL

JavaScript的namespace命名空间

首先,JavaScript里没有namespace关键字用于声明命名空间。如果在NodeJS有模块的概念,但在浏览器下因为I/O的问题不能require加载模块,只能使用script标签一下加载所有脚本,当然也有一些插件实现了浏览器端require的做法。

为了避免编写大型项目造成混乱,通常都是采用面向对象的方式组织代码结构,将属性,方法放入一个对象中。如以下代码

var dog = {
  name: 'Petty',
  sayName: function () {
    console.log(this.name);
  }
}

dog.sayName();

...

READ ALL

Python也可以这样实现多行注释

Python程序的注释跟其它语言有点不一样,对于习惯了使用/**/多行注释的人来说,在Python中只能使用#号进行单行注释很痛苦。

# 这里是单行注释
# a = 50
# b = 10
# c = 10

其实我们可以通过多行文本定义的格式实现多行注释

'''
# 这里是多行注释
a = 50
b = 10
c = 10
'''

这个方法感觉还不错,跟/**/多行注释用起来没啥区别,这在调试代码的时候很管用,可以直接使用多行文本定义符号注释掉部分代码。也许Python的多行文本定义功能本来也可以充当注释用的,当然这毕竟是文本

...

READ ALL