PHP的问题:全面阐述PHP网站设计的问题(6)
文本
preg_replace带/e(eval)标志的將用待替换的字符串替换匹配的部分,然后eval它。
strtok的设计显然是和C函数等效的,由于很多原因,已被认为是个坏注意。PHP可以轻易的返回一个数组(而这在C中别扭),很多的hackstrtok(3)用法(修改字符串某处),在这里不能使用。
parse_str解析查询字符串,从函数名看不出任何迹象。而它会register_globals并转存查询字符串到本地范围变量中,除非你传递一个数组来填充。(当然,什么也不返回)
碰到空分隔符,explode会拒绝分割。每个其它的字符串拆分实现采取这种作法的意思应该是把字符串应拆分成字符;PHP有一个拆分函数,令人迷惑的称为str_split而却描述为“將字符串转成数组”。
格式化日期,有strftime,像CAPI处理本地语言环境一样。当然也有date,完全不同的语法而仅用于English.
”gzgetss—获取gz文件的行指针并去除HTML标记。”知道了这一系列函数的概念,让我去死吧。
mbstring
都是关于“multi-byte”,解决字符集的问题。
仍然处理的是普通字符串。有个单一的全局”默认”的字符集。一些函数允许指定字符集,但它依赖于所有的参数和返回值。
提供了ereg_*函数,但这些都被废弃了。preg_*很幸运,用一些PCRE-specific标记,它们能理解UTF-8.
系统和反射
有一大堆的函数,聚焦于文本和变量。压缩和提取仅是冰山一角。
有几种方式让PHP动态,咋一看没有什么明显的不同或相对好处。类工具不能修改自定义类;运行时工具取代了它并能修改自定义的任何东西;Reflection*类能反射语言的大部分东西;有很多独特的函数是为了报告函数和类的属性的。这些子系统是独立,相关,多余的吗?
get_class($obj)返回对象的类名称。get_class()返回被调用函数中的类的名称。撇开这些不说,同一个函数会做完全不同的事情:get_class(null)…行为象后者。因此面对一个随机的变量,你不能信任它。惊讶吧!
stream_*类允许实现自定义的流对象给fopen和其它的内建的类似文件处理的东西使用。由于几个内部原因,“通知”不能被实现。
register_tick_function能接受闭包对象。unregister_tick_function不行;相反,它会抛出错误,抱怨闭包不能转换成字符串。
php_uname告知你当前操作系统相关东西。
fork和exec不是内建的。它们来自pcntl扩展,但默认不包含。popen不提供pid文件。
session_decode用于读取任意的PHPsession字符串,但仅当有个活跃的session时才工作。它转存结果到$_SESSION中,而不是返回它的值。
杂项
curl_multi_exec不改变curl_error当出错的时候,但它改变curl_error.
mktime的参数是有顺序的:hour,minute,second,month,day,year