正常运行结束.>> 没有 finally 结构, 使得包装代码 (注册处理器, 运行代码, 注销处理器; monkeypatch, 运行测试, unmonkeypatch) 很难看, 很难写. 尽管 OO 和异常大量的复制了Java的模式, 这是故意的, 因为 finally "在PHP上下文中, 只得其形不得其神".Huh ?函数>> 函数调用似乎相当昂贵.>> 一些内建函数与 reference-returning 函数交互, 呃, 一种奇怪的方式.>> 正如在别处提到的, 很多看起来像函数或者看起来它们应该是函数的东西实际上是语言的构成部分, 因此无法像正常函数一样的工作.>> 函数参数可以具有 "类型提示", 基本上只是静态类型. 你不能要求某个参数是 int 或是 string 或是 对象 或其它 "核心" 类型, 即使每个内建函数使用这种类型, 可能因为 int 在PHP中不是个东西吧. (查看上面关于 (int) 的讨论). 你也不能使用特殊的被大量内建函数使用的伪类型装饰: mixed, number, or callback.>> 因此, 下面:function foo(string $s) {} foo("hello world"); 产生错误 the error:PHP Catchable fatal error: Argument 1 passed to foo() must be an instance of string, string given, called in...>> 你可能会注意到 "类型提示" 实际上并不存在; 在程序中没有 string 类. 如果你试图使用 ReflectionParameter::getClass() 动态测试类型提示, 將会得到类型不存在, 使得实际上不可能取得该类型名.>> 函数的返回值不能被推断>> 將当前函数的参数传给另一个函数 (分派, 不罕见) 通过 call_user_func_array(''other_function'', func_get_args())完成. 但 func_get_args 在运行时抛出一个 fatal 错误, 抱怨它不能作为函数参数. 为什么为什么这是个类型错误? ( 已在 PHP 5.3 中修复)>> 闭包需要显示的命名每个变量为 closed-over. 为什么解析器不想办法解决? (Okay, it’s because using a variable ever, at all, creates it unless explicitly told otherwise.)>> Closed-over 变量, 通过和其它函数参数相同的语义"传递". 这样的话, 数组和字符串等等, 將以传值方式传给闭包. 除非使用 &.>> 因为闭包变量会自动传递参数, 没有嵌套范围, 闭包不能指向私有方法, 不管是否定义在类中. ( 可能在 5.4 中修复? 不清楚.)>> 函数没有命名参数. 实际上被 devs 显示拒绝, 因为它 "会导致代码臭味".>> Function arguments with defaults can appear before function arguments without, even though the documentation points out that this is both weird and useless. (So why allow it?)>> 向函数传递额外的参数会被忽略 (除了内建函数, 会抛出异常). 丢失的参数被假定为 null.>> "可变" 函数需要 func_num_args, func_get_arg, 和 func_get_args. 这类事情没有语法.OO>> PHP的函数部分被设计成类似C, 但面向对象 (ho ho) 被设计成类似 Java. 我不想过分强调这有多不合谐. 我还没有发现一个有大写字母的全局函数, 重要的内建类使用驼峰式方法命名, 并有getFoo的Java风格的属性访问器. 这是门动态语言, 对吗? Perl, Python, 和 Ruby 都有一些 通过代码访问"属性"的概念; PHP 仅仅有笨重的 __get 之类的东西. 类型系统围绕着低层的 Java语言设计, Java 和PHP''s处一时代, Java 有意的做了更多限制, 照搬Java, 我百思不得其解.>> 类不是对象. 元编程不得不通过字符串名指向它们, 就像函数一样.>> 内建的类型不是对象, (不像Perl) 也无法使得看起来像对象.>> instance