PHP语言一些「有意思」的地方

  1. Integer不支持无符号整数,PHP_INT_MAX表示整数最大值。
  2. 任意长度整数/GMP与任意精度数学库/BCMath。前者大爱呀,做密码学的人必备。
  3. 如果给定的一个数超出了 integer 的范围,将会被解释为 float.
  4. PHP 中没有整除的运算符。1/2 产生出 float 0.5。在这一点上,于C语言设计思想一致:默认由低精度向高精度转换。
  5. 某些数学浮点运算会产生一个由常量 NAN 所代表的结果。任何拿此值与其它任何值进行的松散或严格比较的结果都是 FALSE。由于 NAN 代表着任何不同值,不应拿 NAN 去和其它值进行比较,包括其自身,应该用 is_nan() 来检查。
  6. string中的复杂表达式解析可以使用{}括起来。由于 { 无法被转义,只有 $ 紧挨着 { 时才会被识别。
  7. 数组中新添加元素的默认键名是最大整数索引值+1,注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。
  8. 变量默认总是传值赋值,除非通过「&」引用传递。
  9. 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。
  10. continue 语句作用到 switch 上的作用类似于 break。如果在循环中有一个 switch 并希望 continue 到外层循环中的下一轮循环,用 continue 2。
  11. 在php5 的对象编程经常提到的一个关键点是“默认情况下对象是通过引用传递的”。但其实这不是完全正确的。php的引用是别名,就是两个不同的变量名字指向相同的内容。在php5,一个对象变量已经不再保存整个对象的值。只是保存一个标识符来访问真正的对象内容。 当对象作为参数传递,作为结果返回,或者赋值给另外一个变量,另外一个变量跟原来的不是引用的关系,只是他们都保存着同一个标识符的拷贝,这个标识符指向同一个对象的真正内容。
  12. 当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

socket编程模型总结

2013年,做车联网OBD项目的时候,需要处理的基本问题是如何保持并维护大量车辆与服务器的网络连接(需要做到汽车时时在线,以实现部分对汽车远程控制的功能)。这也是网络编程中中的基本问题,前辈们也提出了多种网络编程模型解决此类问题:select, poll, epoll, I/O重叠,完成端口。

select, poll, epoll模型

需要强调的是,以上三个模型,其实都是同步I/O。

I/O重叠,完成端口模型

以上两种模型都是异步I/O。