的事, 但一个带多个参数, 另一个带参数数组.文本>> preg_replace 带 /e (eval) 标志的將用待替换的字符串替换匹配的部分, 然后 eval 它.>> strtok 的设计显然是和 C 函数等效的, 由于很多原因, 已被认为是个坏注意. PHP 可以轻易的返回一个数组(而这在C中别扭), 很多的hack strtok(3) 用法 (修改字符串某处), 在这里不能使用.>> parse_str 解析查询字符串, 从函数名看不出任何迹象. 而它会 register_globals 并转存查询字符串到本地范围变量中, 除非你传递一个数组来填充. (当然, 什么也不返回)>> 碰到空分隔符, explode 会拒绝分割. 每个其它的字符串拆分实现采取这种作法的意思应该是把字符串应拆分成字符; PHP有一个拆分函数, 令人迷惑的称为 str_split 而却描述为 "將字符串转成数组".>> 格式化日期, 有 strftime, 像 C API 处理本地语言环境一样. 当然也有 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 用于读取任意的 PHP session 字符串, 但仅当有个活跃的 session 时才工作. 它转存结果到
从5个方面全面解析PHP的糟糕设计 _网学
浏览:
SESSION 中, 而不是返回它的值.杂项 >> curl_multi_exec 不改变 curl_error 当出错的时候, 但它改变 curl_error.>> mktime 的参数是有顺序的: hour, minute, second, month, day, year数据操纵程序什么都不是, 除了咀嚼和吐出数据以外. 大量的语言围绕着数据操纵设计, 从 awk 到 Prolog 到 C. 如果语言无法操纵数据, 它就无法做任何事.数字>> Integers 在32位平台是是有符号32位数. 不像PHP的同时代者, 没有自动 bigint 提升. 因此你的数学运算可能会由于CPU体系结构结果不一样. 你唯一选择大整数的方式是使用 GMP 或 BC 包装函数. (开发者可能已经建义加入新的, 单独的,64位类型. 这真是疯了.)>> PHP支持八进制数语法, 以0开头, 因此如 012 是10. 然而, 08变成了0. 8(或9)和任何接下来的数字消失了. 01c是个语法错误.>> pi 是个函数. 或者有个常量, M_PI.>> 没有幂操作符, 只有 pow 函数