- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的任务是学习PHP,但是有很多东西我不懂。例如,the concept of "variable functions"不是我在其他任何地方见过的。还有很多其他例子,但为了简洁起见,我找到了PHPWTF ,其中有许多 PHP 特性的示例。
我使用过的大多数其他语言要么有正式规范(例如 Haskell 2010),要么至少有一篇关于其正式语义的研究论文(例如 this for Javascript)。但是,我找不到任何可与 PHP 相媲美的东西。
有一个official "language reference" .但是,它非常不正式,读起来像 wiki,并且缺少整个部分(例如,the section on syntax 根本没有定义语法)。确认我的怀疑,this guy告诉我没有官方规范,甚至没有定义的语法。
维基百科有一篇关于 "PHP syntax and semantics" 的文章, 但它只涉及语法,几乎没有提到语义。
我在 PHP 上找到的一篇论文是 this paper on its assignment semantics .这是该语言的一个非常小的片段,如果没有一些上下文,可能对我没有多大用处。还有this paper on 'SaferPHP' ,它可能必须与 PHP 的某些定义一起使用,尽管我看不到任何定义。
解释器/编译器提供语义,所以我想看看这些。然而,the Zend source令人生畏(尽管它确实提供了 useful test cases ),并且 HipHop runs to 2.7 million LoC . (我发现人们付出了巨大的努力为一种语言编写编译器而从未编写过规范之类的东西,这真是令人惊讶。)
我想查看 PHP 的类型系统以获取指导,就像 TypeScript 为 JavaScript 提供一些指导一样。我找到了 these tantalising slides on Hack ,一个可选的 PHP 类型系统。然而,这只是幻灯片,而且该项目目前似乎是 Facebook 的内部项目。
有谁知道比这些可怜人的语义更好的东西吗?还是每个人都只是“以身作则”?
最佳答案
您似乎不是在追求官方标准(例如,这可能对编写独立的符合标准的实现的人有用),而是为了让您对语言有连贯的理解。不幸的是,不可能有这样的事情,因为 PHP 背后没有一个连贯的正式模型。它已经有机地发展起来,现在却充满了不一致,最臭名昭著的是函数和方法命名,但在一些细节上也是如此比如什么算作 true
和 false
,以及其他类似的令人担忧的细节。
在我看来,接触 PHP 的最佳方法是对核心功能和库、您需要注意的“陷阱”以及(为了阅读现有代码)有良好的感觉不分心)针对在现实世界的 PHP 脚本中非常常见的反模式。我的猜测是,最好在知道如何有效使用 PHP 的人的指导下学习 PHP,但我没有那么奢侈。 (关于文档:我花了很长时间才注意到您可以使用方括号对字符串进行索引。文档中的某处可能会提到该功能,但至少在当时,它所属的任何地方都没有提到。)
This article很好地介绍了使您想要的那种语义模型变得不可能的事情。 (您可能想跳过开头的咆哮,直接转到 discussion of PHP features.)还有很多很多其他类似的文本。引用:“PHP 最初是专门为非程序员(并且,从字里行间,非程序)设计的;它并没有很好地摆脱它的根源。”
不要误会我的意思:我使用 PHP,虽然它不是我最喜欢的语言,但我不会说我讨厌它。我会说,要有效地使用它,必须了解它的性质和局限性。如果您是从 Haskell 学来的,您会大吃一惊。
关于PHP 形式语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595696/
我正在尝试提升我的 javascript 编程技能(或者说我的编程技能时期 :)) 所以我试图理解一些语义: 第一行的“?”是什么意思?均值和“-distance”中的减号 第二行中的“+=”或“-=
我正在尝试在语义 UI 中执行复选框,但它不起作用,我无法弄清楚我做错了什么。 我包括jquery、semantic.min.js、checkbox.js 和semantic.min.css,然后我添
我正在构建一个 Spring 后端。我有一个 Controller ,它获取一个“搜索对象” - 一个具有 10 个字段的对象,其中只有一个应该被填充,所以搜索功能(我没有编写,但需要对其进行更改和重
我面临着编写更智能/高级的“相关内容”算法的挑战,并且不知道从哪里开始,所以我决定提出一个问题,是否有人会指出我正确的方向。 我们的数据库包含很多文章,到目前为止,我们使用关键字/标签查询了相关文章,
我正在尝试将通用字符串写入Rust中的数字函数,其中支持的类型为i16,i32,i64,u32,u64,f32和f64。 最初我有这个: fn str_to_num(s: &str, default_
假设我们在 hpp 文件中有一个带有唯一指针的简单结构: struct SomeType { SomeType() = default; ~SomeType(); st
这是同一预处理指令的多个问题。 1 - <> 还是 ""? 除了在 MSDN 中找到的信息: #include Directive (C-C++) 1.a:这两种符号有什么区别? 1.b:所有编译器都
所以基本上我有一个带有列表的简单系统,当我选择一个项目时,它会显示描述和绑定(bind)到该项目的图像。 项目:https://jsfiddle.net/jhnjcddh/2/ 问题是我需要在 JS
很抱歉问了一个愚蠢的问题,但有人能告诉我以下是什么意思吗 for ctype, (codename, name) in searched_perms: 我不明白括号里是怎么回事。 for ctype
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why do all these crazy function pointer definitions al
我正在学习 HTML5,并获得了一个将 CSS Zen Gardens 转换为 HTML5 语义版本的项目。我已经能够轻松地转换其中的大部分内容,但是底部的链接/导航给我带来了一些问题。 转换此/处理
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improv
我一直在我的 emacs c/c++ 开发设置中试验 cedet 和语义,除了一个小细节外,我对它非常满意。 我使用 ede-cpp-root-project 创建一个项目,并给出我的项目的根目录以及
引用问题自http://www.garfieldtech.com/blog/put-up-with-put (这是针对 Drupal 开源项目的,有点元,因为这里没有代码): GET、HEAD 和 P
我有以下代码。 let v_blue = UIView() v_blue.backgroundColor = UIColor.blueColor() l
我目前正在 objc.io 上阅读优秀的 Advanced Swift 书籍,但遇到了一些我不明白的问题。 如果您在操场上运行以下代码,您会注意到在修改字典中包含的结构时,下标访问会生成一个副本,但随
谁能给我一个关于 Flutter 上下文中语义概念的清晰解释(或链接)(它实际上是什么,何时使用,更新...)? 我在谷歌上搜索了很多,但到目前为止还没有找到任何好的解释。 非常感谢, 最佳答案 Di
这是我的代码 Was this what you wanted? It's good to see you again.
我有一个侧边栏,其中包含应用程序的主导航。它还包含一个 button 触发侧边栏的打开/关闭。在语义方面,标记应该是什么样的? 我应该把侧边栏放在一边,然后只在周围设置导航吗主导航,不包括打开/关闭触
考虑下面这行 Lisp 代码: (some-function 7 8 | 9) ;; some comment. note the extra indentation 该点位于“8”和
我是一名优秀的程序员,十分优秀!