>> [音乐播放]
>> DAVID J.马兰：好吧。
这是CS50。
这是8周的开始。
你可能还记得，我们不放过 上次看一个新的语言
干脆。
事实上，一个是相当 重量轻，它甚至不是
一种编程语言。
这是一种标记语言，它让我们 实际上结构，使网页。
而当你点别的 与this--结合
或者你会很快，如果 你还没有。
我们将使用层叠 样式表或CSS，这
是另一种类型的语言 用属性和值
那将让我们做 喜欢的东西改变颜色
并改变其位置 这些类型的调整的。
但今天起，我们开始 专注于更强大的语言，
实际的编程语言，如PHP。
>> 所以，PHP已经有一段时间了。
正如你所看到的，它 设计的主要
早在实际 在web开发中使用
而实际产生的网页。
那么什么样的 特点做了语言
需要为了使卷筒纸 动态与它的网页？
>> 换句话说，如果你想生成 像Facebook的内容dynamically--
新闻源，它不断地变化，或 即弹出不时即时消息
以时间 - 像有什么 功能按键件
需要在编程语言 它可以让你动态
打印新的信息在屏幕上？
>> 学生：代码。
DAVID J.马兰：代码。
行。
我们就买那种。
有一点更精确。
我的意思是，我们可以做 这与C，坦率地说。
这将是在颈部疼痛。
但是 - 是这一承诺？
>> 学生：是啊。
变量，也许？
DAVID J.马兰：变量。
OK，确保万无一失。
变量肯定能帮助我们。
甚至更简单的东西。
我们在使用它的第一个 第一天的节目
当我们真正说的“hello world”。
>> 学生：打印。
>> DAVID J.马兰：打印，对不对？
打印，或printf中 C.因此，这段时间的世界里，
我们已经在我们的 处置语言 - C，
在particular--甚至 从头开始为此事了
可以生成文本的字符串。
>> 好吧，如果HTML，正如我们上周所看到的，是 只是一大堆的文本字符串
尽管开放式支架和关闭 支架和某种韵
和原因，它的背后， 那么我们可能真的
开始生成的网页要么 手动键入出来gedit中
或在Microsoft Word中，为 matter--我们只需要一个文本编辑器。
>> 或者，我们可以编写代码， 您的建议
早些时候，这将让我们 动态生成HTML，
这就是我们要 开始用PHP做
并且最终即使有 语言JavaScript调用，
是用一种语言来生成另一个。
事实上，这就是Facebook的 和很多很多其他网站
做真正动态 显示新的信息给你。
>> 因此，让我们开始this--一 神秘的看线，但一
这实际上是非常强大的。
到目前为止，我们一直在使用C， 这是编译型语言。
而就在快recap--一个编译 语言有什么特点呢？
你显然需要编译 它，但到底是什么意思呢？
是吗？
>> 学生：它需要 组装成机器代码。
>> DAVID J.马兰：OK。
它需要被组装 成机器代码。
所以，你把你的源代码， 这是有点类似英语的。
你，转换为 一些较低的水平，
这是所谓的最终 对象代码 - 0和1的。
而正是这些0和1的 一个CPU，像那些由Intel生产，
真正理解。
>> 现在，PHP和Python和Ruby和 JavaScript和其他的串
语言不编译 语言，但解释型语言，
这意味着你只需要输入他们，然后 你不把它们变成0和1。
你不是只提供那么作为 输入到别人的节目，
所谓的翻译。
而那人的 程序的设计
要了解每 在Python或PHP的每一个符号
或Ruby或任何数量的 其他语言的意思。
>> 所以我们需要的是 这样的事情。
所以，事实上，我要去 去到家电
在这里，只需到任何 旧的窗口，而且我们
要继续前进，并开放 一个名为，说，你好。
现在，以前，我可能有救 这即使是文件扩展名，
但我该怎么办 事情就更简单了这里。
我要继续前进，开始 这个文件与此语法晦涩。
因此，“用户，垃圾桶，ENV， 对于环境，PHP。“
>> 这是一个简单的一行代码是 要告诉我的操作系统，
去找你的地方 环境，不管它是什么，
无论PHP is--的interpreter-- 并继续使用该翻译
解释下面的代码。
现在，这是怎么样的 PHP的一个丑陋的功能。
但是，在这种语言，任何 一次编写PHP代码，
你需要有这些丑陋的一 PHP标签划分的开始
你的代码 - <？php的。
>> 但低于在这里，我现在可以做些什么 很简单，如printf你好逗号
世界反斜杠N分别闭合 引号，括号接近。
然后刚刚好 措施，我要去
继续前进，接近 在这里我的PHP标签
让一切看起来 漂亮精美印刷。
>> 而当我点击保存， gedit中实际上是足够聪明
看那个第一行和 意识到，哦，你写PHP代码。
我的语法高亮 它与色
在这里，使其立起 出多一点。
但现在我会去 到我的终端窗口。
我会缩小。
>> 这项计划被称为“你好，” 所以我打算做点斜线你好，
但是权限被拒绝。
和bash。
实际上，我们听说过 事情在几个星期前
在Shellshock的范围内， 其中的一个漏洞。
>> 但是被拒绝的权限，我们已经看到了 之前，可能在不同的上下文。
有谁还记得如何 你可能会解决一些
其中，权限类似这样的拒绝？
什么是命令，至少？
>> 学生：CHMOD。
DAVID J.马兰：是啊，CHMOD， 用于改变文件的模式。
你会得到更习惯 下周有一个后续问题
设置的。
但现在，我要改变 该模式不被读取，
但让所有人executeability 特权的能力
运行此文件。
我要去分配 即该文件打招呼。
>> 如果我现在做点斜线打招呼进入， 看，其实，我的程序，你好世界。
和什么样的步骤做了我 显然完全跳过？
编译。
所以，我只是跑这个程序很简单。
>> 而事实证明，你可以做到这一点 很多语法类似于C
让我走在今天的代码， 我把我的虚拟主机目录
在这里，真正的原因 我们再回过头来。
而且我要进入， 比方说，条件1。
>> 你会看到这里，第一， 最重要的是，一大堆的意见。
但其实这是 一个再创造的PHP
一个程序，我们在做一周 一个叫条件1.C
其中，目的在 这个方案的寿命
显然是要问 为一个整数的用户
然后做一些蓬松 分析它，从而
你说，如果是正面还是 负或等于零。
和我提起这事，只是因为， 除了也许一个小细节，
它是不可区分的，到目前为止，从C.
>> 什么是特色之一 在这里，也许跳出
你作为一个有点不同？
也许两件事。
是吗？
>> 学生：美元符号N +
>> DAVID J.马兰：是啊。
因此，美元符号存在n。
而美元符号，如 我们会看到，会
是一个修复程序的开始 在PHP中的任何变量。
它在爱恨bad--好 它的排序明显的是什么
一个变量，坏的，因为它是 另一件事键入。
而且还有另外一个 事情我们还没有完全
看到的那样，至少由该拼写。是吗？
>> 学生：Readline的。
>> DAVID J.马兰：Readline的。
readline的，我们并没有看到，本身在 C，尽管存在着一些
类似的，但是我们使用的GetString， 这是它的对手。
所以，如果我进入这个 目录中，这恰好是，
我会在我的虚拟主机了一下解释 目录和我的源目录，
我继续前进，做点斜线 条件 - whoops--点斜线
条件1，你会看到，同样， 同样issue--权限被拒绝。
>> 因此，让我放大和文件模式做一个加 X上的情况下，点斜线条件。
我想一个整数，请50。
我们可以发挥这 游戏一整天。
它要表现得完全 因为它没有在一个星期。
>> 行，所以不是所有的不同，除了 没有语法只是轻微的一点，
但在顶部，我又 有这种线，
让我创造的东西， 貌似名为hello C程序，
所谓的条件1。
但它不是0和个位 我直接执行。
它不是运行此 翻译的名字
刚好是相同的语言。
该计划被称为PHP，和我的代码 下面一行被传递到它。
>> 我们可以做的另一种相当简单的 例如让人联想到的东西
我们在几周前就已经。
再次，这是一种类型的 的任意代码块
这显然​​是不 当你运行它呢？
这是什么付印，大概是？
>> 所以最初的16行，它的 要说X现在是2，可能是。
％d是一样$我的printf的。
这样的话它的魔方，点， 点，点，在第17行。
然后第18行出现 调用函数立方。
何为立方定义？
>> 嗯，它看起来像在第25行， 所以这还不是全部不同。
我已经得到了上面的一些意见 它，但在大多数情况下，
这是一个相当简单的 移植或转换
从C程序的PHP版本。
但现在有几个 差别也许应该跳出。
还有什么是你如何不同 可以写在C中同样的程序？
>> 学生：[听不清]。
>> DAVID J.马兰：有 没有原型往上顶。
所以PHP--坦率地说，一 很多现代languages​​--的
有很多更聪明，更乐于助人 比C编译器中，你
可以把函数在这里， 你可以把一个函数到这里，
并解释是怎么回事 做你的阅读青睐
它决定之前，整个文件 有些功能不存在。
这么好看的改进年后。
但也有一些 有什么不同或不存在这里。
是吗？
>> 学生：[听不清]。
DAVID J.马兰：我们不必 声明的变量的类型，
所以我们会看到不久的 有不同类型的PHP，
但你并不需要指定它们， 这也是有好有坏。
并有一件事缺失。
>> 学生：有没有图书馆。
>> DAVID J.马兰：没有图书馆。
好了，这很好。
我们得到了很多开箱即用。
所以实际上是多了很多 事情比我想象的不同。
怎么样在回来的方式？
那是什么？
说一次？
>> 学生：指针。
>> DAVID J.马兰：没有指针。
行的，至少在这个示例中，没有。
这是公平的。
因此，有没有指针 在PHP中其实一般。
有一种叫做参考， 但我们不会花太多的时间在那里。
还有呢？
>> 学生：主要。
DAVID J.马兰：主。
因此，这是大问题 我在想的。
请注意，没有主入口点。
您只需开始编写代码。
这实际上是 将是有利
当我们转型 暂时以实际使用
此相同的语言，用于基于web的 编程，为此我们
不希望只有一个入口点。
我们可能希望有一堆 网址，一堆不同的文件
在用户输入所有服用 并产生输出。
>> 但这里是非常令人沮丧 例如，我答应最后一次，
即此文件夹中 在这里，拼写错误。
所以在这个文件中的拼写，这是我们 不会花太多时间，有
本质上是porting-- P-O-R-T。 它只是给出时候，说了一句话，
你从一种语言转换 另一个通常手动。
>> 这是PC的移植 从PSET 5版本拼写的。
我基本上是试图转换 通过线就行密切，我可以。
所以，如果你喜欢这种东西， 它实际上是值得在某些时候
两个边向上拉他们 一边，看看哪些是相同的
这有什么不同。
但他们相当不错的相似。
如果你还记得什么 拼写甚至长得很像，
即使你没有 要改变这个文件，
这是很相似的 在结构上只有一对夫妇
变化在这里和那里。
>> 所以，这只是说，这是很 简单的转换拼写
从C到PHP。
但是，在字典中，有 一些更加引人注目。
让我继续前进，创造 我自己dictionary.php文件。
所以在这略有不同 我们称之为.C它的.php来代替。
因为这是一个PHP文件，我 do--略有annoyingly--有
启动与该文件 一个PHP标签那样。
而且我要继续前进 并定义一些功能。
函数调用检查，这是 要采取的一个字像以前一样。
但这种说法的 将有一元钱
签名因为我们再次使用PHP。
从另一个功能 dictionary.c是负载
并用了在字典中的名称， 所以我会得到这个函数蓄势待发。
>> 另一位在dictionary.c是什么？
大小的最好的人之一，在 至少，如果你周围保留了一些变数。
这样的尺寸只是要返回一个变量。
再有就是卸载。
>> 所以，有这四个 在问题的功能设置5
你需要实现与 一些数据结构或结构。
所以，我承诺，在 PHP，我们可以声明
哈希表，例如 这些更容易。
事实上，如果我想要一个哈希表， 我只是要去这样的
还有就是我的哈希表。
这就是说明，令人沮丧， 我们在上次离开。
而你知道吗，如果我想 对于大小可变的，好了，
这其中并非全部 从C不同，
但我要继续前进，做到这一点。
并注意没有数据类型。
我会回去以后和 其实在这里补充一些意见。
但对于负载？
>> 如果美元符号字典 是我的文件的名称
实际上我想加载 也就是说这个表，现在，
其实我可以做的 事情很简单。
埃德蒙顿，这是minorly annoying--在PHP中，
你必须指定内部 如果一个函数的你
要访问一些全球 这被定义之外的变量。
>> 但是，这并不特别 有趣的现在。
更有趣的是这对每个 构建我上次提到的。
而事实证明，PHP有一个功能 所谓的文件，其目的在生活中
是打开一个文件，并读出在 它的所有行到一个数组
并把他们回。
>> 这是说我可以做这样的字典 现在有效的，当我打电话的文件，
这是要交给我回来 从文件中单词的数组。
这不是所有的好。
它仍然将是一个行 的话，东西直线。
但是，我可以继续循环 在每个这些词使用
该语法，我​​们看到简要最后一次。
你会看到它的更多 在即将到来的PSET。
>> 但现在我有一个循环迭代 在字典中的每个单词。
并在每个迭代中，记得我 调用当前单词“字。”
和所有它要采取 把一个单词到词典
将是猜字“真”。
这是我的插入功能。
这是我的加载功能 我的字典。
现在，这是一个有点作弊，因为， 你知道吗，有实际
反斜杠N为在单词的结尾 我也许应该改掉，
但是这不是一个问题，因为PHP有 一个函数调用印章字面
关闭一个字符扒在最后。
所以，没有任何问题。
我们已经先行一步，实际上 缩短的只是这个。
现在我应该跟踪 大小，让我们至少要做到this--
大小++。
因为之前，我可以做到这一点。
然后这很可能会 工作得很好，让我们回到正确的。
完成的。
PSET 5。
>> [笑]
>> DAVID J.马兰：OK。
我们要再做一次 与下一个PSET得。
那么，关于大小？
那么，这一次希望是关于 你所期望的最后一次，
但我必须这样做 这个愚蠢的全球性的事情。
这只是从一个神器 该语言的设计。
>> 但是，检查是更有趣一点。
所以，如果我通过了以美元 第一次签的话，我
要获得 全球变量表。
现在如果我想 检查一个词是存在的，
我可以简单地说，如果这是真的， 下面的设置在该表中，
然后继续前进，返回 真实的;否则，返回false。
完成的。
PSET 5的另一半。
>> 好吧，如此反复，我 而省几个小钱。
凭心而论，我也许应该 花了几秒钟
在此实现。
我可能不应该嘲笑一切 小时就提上了PSET这么多。
所以用strtolower是一个函数。
同样的事情也存在主义 在C中，至少对于字符，
但PHP的得到整个字符串版本。
>> 这是怎么回事，迫使一切 为小写，其中一些你
可能会做什么规范化 你把你的字典。
现在你可以用C做了。
这有没有关系PHP。
>> 但是，任何时候你有 一个布尔条件，
喜欢的东西就行 10那里，也就是只
将评估结果为true或 假的，如果您还有清晰
将返回true或false，我可以 只是真正使这个性感
而只是做这样的事情。
因此，有我的检查功能。
对了，如果布尔 返回一个真或假，
就让我们回到它立竿见影。
>> 而且还有一些其他的调整 我能在这里和那里。
Load--卸载，顺便说一句，这样做了。
无关那里。
由于所有的存储器中 PHP和许多其他语言
其实是你管理。
因此，而在C中，作为 你已经学会了痛苦，
任何你的malloc或释放calloc或 realloc的，你必须释放自己。
任何你的fopen，你要FCLOSE， 使资源得到最终释放
而像Valgrind的工具不 注意，不要抱怨，
这是一件好事，在它们上面运行。
>> 但可以肯定，必须有 有些赶，对不对？
否则，我们种浪费 一大堆星期。
所以有任何数量的原因 样的，为什么我们把这个轨迹，
但有一个折衷。
没错，这一直是主题。
>> 那么，什么可能的权衡 在这里运动，从C到PHP？
感觉就像是赢得所有迄今除 有点丑陋的这里或那里。
是啊。
那是什么？
>> 学生：[听不清]内存。
DAVID J.马兰：速度。
行。
好吧，我的速度是相当快的。
对不对？
但程序的执行速度？
好了，所以这是一个公平的问题。
>> 因此，它会发生，我提前 选曲无论我尝试的解决方案，一个
我对大板 是一个尝试的解决方案，
我有这个目录在这里。
所以，我在那一刻，我可以继续前进， 在国王詹姆斯圣经运行此，
按Enter键。
这是正确的希望 执行结束时，
给我时间总 0.38秒的
1有些武断例子。
>> 如果我现在进入这个 第二个终端窗口
在这里，我第一次打开gedit中，让 我进入今天的代码 - 这又
在该目录下这里 - 和 让我继续运行拼写。
因此，只要是明确的， 这是PHP的版本。
我只是展示它的顶部位置。
>> 所以，如果我做波浪CS50的拼写 PSET 5文字，国王詹姆斯输入。
它仍然比写快 它在C，但总的时间
是，公告，0.93，而我 基于C语言的实现为0.38。
所以这是一个不平凡的区别。
>> 而这仅仅是在一个文件中。
如果你要运行两 项目与大板
并有一大堆的投入 经过测试，这肯定会增加。
如果我们有更大的数据集， 这也将增加了所有的多。
所以，是的，付出一些代价 速度的确是这样的。
还有什么？
是吗？
>> 学生：内存使用量。
>> DAVID J.马兰：内存使用量。
所以，我没有给1秒 写这篇文章时，PHP想到
版本到多少 内存我用。
我完全是推迟到PHP 自己和谁写的程序。
而这可能是OK， 但如果我真的真的
关心挤压尽可能多的性能 我的节目或我的网站
或者出什么工具 我建立的，也许
PHP确实是不正确的语言。
>> 而事实上，这是为什么， 例如，很多网站servers--
实际的程序 成为了网络内容 -
是不是用PHP写的 或Python或Ruby。
它们被写入，像 现在你会做PSET 6，
在C中，这样就可以挤 每一位的表现出来呢
而真正行使 在什么样的细粒度控制
怎么回事下方 油烟机而不是仅仅把它
理所当然更高一些 级数据结构。
>> 考虑一下，毕竟， 谁PHP实现
散列的概念 table--它实际上更多
妥善称为关联array-- 他或她有任何想法什么样的
输入您将要 投入的结构？
所以，很显然不是，对不对？
这是一个通用的工具 在工具箱的
提供给任何人谁想要 要使用它，所以它肯定
不能被最终优化 为正是你想要做什么。
>> 因此，贸易offs--开发时间可能 不同，性能可能会有所不同，
复杂性和内存使用情况可能会有所不同。
还等什么，你会发现 越来越多的是，有
将不同 工具的交易。
而事实上一个超级多数 人们最后的项目在这个类中，
不管你信不信，C是不会 是正确的语言来使用。
>> 而事实上，一个外卖的 最终为任何一类这样的
是让你思考， 好了，应该怎么决绝
你要下架的时候 要解决一些问题。
而事实上，我们跨过这道坎 更因为我们看更多的语言
甚至超越今天。
>> 因此，让我们过渡到现在 也许是更熟悉的环境
使用像PHP语言。
这有点常见的使用 在命令行中，编写脚本
像我一样，但它的 多，更常见。
和它的目的是在使用 文件的形式，典型地结束
在.php--但是这 不是prerequisite--
这本身生成的网页内容。
>> 因此，让我继续前进，打开几 例子我提前做好准备。
而这些实际上是某种真实 在那一个的第一件事情故事
我办完做过自己 CS50，也许，我想，
CS51年前是我的 室友和我帮助
运行校内新生 体育节目​​，其中，在当时，
曾新生报名参加各种 通过填写一张纸运动，
因为它被称为，走 穿过院子到威格尔斯沃，
并放到一些 监考的大门下降。
然后，他或她会去通过 他们，然后手动实际上给我们发电子邮件
我们注册了一些运动。
>> 所以很明显，一个机会 改进。
这些天来，你可能会转向只 谷歌形式，但早在一天，
我们要真正达到for--这 甚至没有那么长的时间ago--到达
对于编程 语言，是不是PHP。
当时，它是 一些所谓的Perl，
这是自熄灭时尚的。
但这个想法是一样的。
>> 我本质上坐下来试试 端口进入的Perl版本的PHP，
但在完全免责，没有给 任何认为美学只是还没有。
因此，这里是一个网页。
这是一个文件。
如果我放大，其明显 所谓froshim0.php
只是因为它是我们的第一次 例如，在这个系列。
并注意它有什么出现 是一个非常丑陋的HTML表单，
但形式很有趣 因为它允许
我提供用户输入到浏览器。
>> 现在，最后的时候，我们有一个形式， 谁没有，我们提出我们的查询参数，
因为它是所谓的队列参数？
所以，谷歌，对吗？
我们完全踢上的想法 干什么用该输入什么。
>> 但今天，我们开始产生输出。
而行为我要去看看 这里最初是相当琐碎。
大卫，我会检查过性别 在这里，马修斯说，在这里。
我不会队长。
我要点击注册。
并注意URL有 改为注册，0.php，
再有就是在这里这个丑陋的文本。
我给不计较 这种格式。
>> 但有趣的是，3 值显然来传递。
这是PHP的排序 相当于printf--
我们将看到它真正被称为 在刚刚打印出bit--
你传递给它的东西。
因此，这表明，这种形式 有至少三个字段，它
你看到我输入他们进来。
一个是我的名字，一个是 性别，一个是宿舍。
和队长甚至都没有被发送到 服务器，因为我没有检查它。
>> 因此，这显然是说， 当你提交的东西在网络上，
不仅做了URL有时 change--有时没有。
事实上，文件名改变， 但究竟是从URL缺席
我们确实看到最后一次与谷歌。
是吗？
>> 学生：没有查询字符串
>> DAVID J.马兰：有没有查询字符串。
有没有问号的东西。
有没有问号Q 等于猫，因为我们做了最后一次。
而且也肯定没有 问号名称等于
大卫宿舍或等于马修斯， 那么，是所有的准备？
>> 好了，让我回去在这里gedit中 并开辟了第一个这些文件
在我的虚拟主机，本地主机，公共 在此目录中，进入froshim0。
所以，事实证明，几乎 所有本页面仅仅是HTML。
这可能是你不熟悉的， 但它很快会更因此与PSET 6
和PSET 7和PSET 8。
但是这仅仅是一个HTML页面。
>> 而有趣的东西 似乎是在这里。
它的action属性的表单标签 有寄存器0的一个值。
这就是为什么当我提交 此，它进入到该文件。
但方法不同today--职位。
因此，原来还有的至少 在网络上使用两种方法
发送信息 从浏览器到服务器。
获取所说的URL。
发表在其他地方所说的那样。
而什么时候，为什么你可能 其实想一个网站
使用后则改为 弄，只是凭直觉？
任何网站。
什么样的数据应该只是通过 由通过邮寄，现在的推断，而不是
得到的，如果我们已经看到了 两者区别在哪里？
学生：[听不清]保障。
DAVID J.马兰：如果你想 什么是安全的。
所以，你可以键入密码 到网站，信用卡
到网站会 这些种类的次优
如果浏览器把那 值的URL的内部。
为什么呢？
你看它，它不 似乎是这样的一个大问题，
但可能你很频繁地走路 远离电脑或使用电脑
实验室等人 别人甚至是室友
可以很容易地行走，看看 私人信息。
当您发送一封电子邮件， 通过网络，你可能
不希望出现这种结局的数据 在该URL为好。
所以有任何数目的原因 我们为什么要放在这里。
即使和photos--吧，我不是很 想象一下，你会如何利用图形，
如JPEG，并把它变成一个URL。
你可以做到这一点。
还有它的编码方式，但它的 只是不能直接这样。
>> 所以寄存器0实际上是 很给人留下深刻印象。
所有它说，从字面上是这样。
它打印出的一些内幕 HTML标签下面。
我有一个PHP标签在这里 嵌套的预标记的内部。
“预”的意思只是预格式化的文本， 单倍行距，就像一台打字机。
>> Printr是打印递归函数。
再有就是这个 这里有趣的事情。
我们会回到这个 因为这里的人，
但美元符号下划线 交的似乎是
在PHP中的变量在任何 送你从浏览器到服务器
被存储为您服务。
我们将看到如何得到的 不久该信息。
>> 但首先，让我们回去 一个稍微不同的实施例。
进入register--或 相反，froshims1.php，
这看起来有点不同。
我花了一点 努力与格式，
即使它仍然是相当难看。
但我要继续前进 而输入“万人迷”了。
男性。
我们将检查“队长”这个时候。
我们会做马修斯。
并注册。
>> 而这个时候它说，嗯，不是真的。
好吧，那么什么是寄存器1？
让我进入开放注册1还有 - HM。
好了，所以这是 有趣的，这
是一个敲门砖，现在走向 更有趣的节目。
>> 请注意上面的这个文件有一个 PHP标签以及一些意见。
而这些，就目前而言，分心 让我们刚刚摆脱这些意见
就像他们在C和我要求 与此块的代码注释
这个代码 确认提交。
>> 嗯，事实证明， 像美元符号变量
下划线是后 所谓的超全局变量。
他们是这样的 特殊的全局变量
这只是全现 可在程序中。
您可以使用方括号 索引到他们不要使用数字
像0，1，2，3，但实际的话。
>> 所以，你能想到的美元符号 强调担任排序哈希表
你可以通过一键进入，查找 单词在中间的方括号中，
并且它会退给你 该用户实际提供的值。
PHP有一个功能 所谓空，仅仅
说是或否，这 变量为空或不是。
我们有这些双线， 这只是意味着，或者像C.
>> 这样在实际上，这4行仅 他说，如果用户没有给一个名字
或者没有给出一个性别或没 给一个宿舍，继续和他重定向
或者通过该行这里她。
所以这是一个有点神秘， 但是这只是字面上的意思
回到这个位置， 所以平底船用户
回到无论他或她是从哪里来的。
但它是一个有点不雅 在我硬编码了。
>> 但是，如果这种情况的话 不计算为真？
如果用户没有给我他 或她的名字和宿舍，性别？
如果条件不 要评估为true，
所以我不打第7行中退出。
所以会发生什么？
这是什么 有趣的关于PHP。
>> 你可以将流入和流出 PHP模式，可以这么说。
如果你想一些代码来执行， 您可以打开和关闭PHP标签
并把代码中有像我在这里所做的。
一旦你关闭 PHP的标签，服务器
只是要吐 无论你放在那里。
事实上，这是一部分 PHP的原创设计，
为更好地恶化，这是 代码和标记搀和
语言。
我们将看到，这很 赶紧转予成一团糟。
所以我们会做的更好比 这最终只是
注意难易程度，我 居然能够执行一些逻辑。
>> 但还是有点给人留下深刻印象。
让我们打开了版本 2即时的新生，哪
显然提交给register2.php。
因此，这个文件实际上会 看起来几乎是一样的。
我会去的新生即时消息2。
但是，在即时的新生2， 让我们看看会发生什么。
>> 大卫，点击单选按钮， 这就是所谓的;马修斯，没有队长。
注册。
您已注册。
并不是的。
哦，等一下，我们只是做 这个例子，不是吗？
好吧，袖手旁观。
我们会做三个。
显然，一些是关于 发生与Gmail。
我们会到达那里。
>> 因此，即时的新生3看起来是这样的。
没有什么不同。
但是当我做大卫，男，马修斯和 注册，这第三个也是最后版本
索赔，很简单，你 注册真的。
这就是那种无关紧要的。
但我要求这个 第三个也是最后版本
现在我已经重新正是我 室友和我建立了即时的新生
程序年前。
它很简单。
没有数据库， 没有Excel电子表格。
但更重要的是， 没有更多的纸
因为我们这个项目做了 是真正的电子邮件监考官，谁
此前接受 这些东西通过表格。
>> 显然我们在编写此 这样一种方式，当某人寄存器，
约翰·哈佛的帐户的电子邮件 在这种情况下proctor--还是他自己，
约翰Harvard--具有以下 text--“此人刚注册的。”
名字是大卫，队长是空白的; 性别，男;和宿舍，马修斯。
>> 到底发生了什么呢？
好了，在这里的问题文件 显然register3.php。
如果我开这一点，你会看到 像这样的代码，两者的力量
而且，坦率地说，不安全 像电​​子邮件系统。
我刚才有效地假装 约翰·哈佛以下面的方式。
>> 我开的PHP标签往上顶，这 只是说这里来了一些PHP代码。
到这里，原来有 在PHP库。
你只是不需要 包含头文件一样多。
你得到更多的 厨房水槽，可以这么说。
>> 但是这一次在第4行，我做的 想所谓的特殊库
PHP的邮件，这是你的东西 可以免费在许多系统上安装。
到这里，我验证 在刚刚提交
通过检查没有用户给 我的名字，性别，和宿舍。
如果是的话，请继续 实例化一个邮件。
>> 你可以把这个作为一个 线是刚刚分配的代码。
这就像malloc的，但 这是一个有点性感
在你提到不只是 malloc和一些通用的编号。
你说给我其中的一个， 给我这一个新的。
>> 如果您在已设定 Java或C ++或其他语言，
你可能已经看到了这一点。
但是它的短，如果 陌生，这条线
投入到美元符号的邮件 特殊的结构称为
已内置对象 电子邮件功能。
而事实上，通知和类似的语法。
>> 这不是一个指针，本身。
PHP只是使用相同的语法。
该行称使用 SMTP--简单邮件传输
协议，它仅仅是 协议，用于发送邮件。
这是指定用途 哈佛大学的SMTP服务器，
是在这里的某处校园。
>> 这是说什么TCP 端口号，聊得来，
我只是想通了这一点通过 谷歌搜索或询问服务台。
然后，因为哈佛的使用了一些 在邮件server--系统安全
至少要加密 你和它之间的流量，
虽然任何人都可以发送给它 - 我要打开TLS协议
为保持这种安全的。
>> 但是，这是哪里的东西 变得有点吓人。
我可以随意 说我jharvard，
而且我可以随意 在这里我发电子邮件。
然后，我可以指定一个 受这条线在这里。
>> 而这只是长相丑陋，但它的 只是一堆级联。
原来，PHP有一个超好用的象征， 像一些语言，点操作符，
这只是字面上符连接 字符串的字符串后的字符串后，
你不必对malloc或图 出字符串的总长度。
你就去做。
事实上，因为我串联 在所有这些事情与这些点，
这就是为什么我的电子邮件 发送看了，因为它没有。
>> 然后最后在这里，我要送的邮件。
因此，如果这是假的， 我只是会死，
这是一个函数，只是打印 到屏幕上的一些错误信息。
但是，实际上， 调用send功能。
否则，如果所有的失败， 它重定向我回到这里。
>> 还有，为什么我看到 我注册的是吗？
嗯，这事就在这里。
所以我提出来的 有两个原因。
>> 一，这是究竟如何，如果你建 一些网站的最终项目
或用于现实世界中，这是 你如何发送电子邮件提醒
给你的客户或你的用户。
这是你如何发送密码的提醒。
这是你如何发送人的邮件 他们有一个新的Facebook
消息尚未了结或类似的东西。
>> 但它也说话 的事实，这可能
一直非常好，从 达文或其他任何人。
我说这样的 面带微笑，因为我
搞不清是怎么回事，通过 几个你的心在这一点上。
但是，这是其中的一个做的，因为我 说，还不如我做那种事情，
因为它是微不足道的 建立这样的电子邮件。
但正如你可能已经看到 或阅读深红，
最近它也是相当 平凡的人
跟踪他们回到一些原点。
并问我一些时间，也许 在CS50的午餐，我第一次
相识非常密切 几乎到了编辑委员会多年
以前，当我发现 互联网如何工作。
因此，在任何case--略 之后，编辑终于上了。
>> 所以，在任何情况下，存在一个 一大堆超级全局变量，
因为它们在这里被称为，其中一个 我们saw--美元符号下划线后。
有一个名为get对应， 这是哪里的东西从一个URL
结束了下去。
而且还有一大堆其他的， too--会话和服务器的cookie。
我们会回来 cookie的一些其它时间
但会是一种很酷的 因为右now--直到now--
一切，我们已经与Web浏览器进行 是那种无状态的，可以这么说。
我可以按一下周围，接入 在服务器上，文件的东西
发生在屏幕上，但 那么连接关闭。
在Internet Explorer或 Firefox的图标停止旋转
你刚才看到了什么 该网页包含的内容。
>> 因此，HTTP是无状态的那 一旦建立连接，
得到了一些数据，仅此而已。
没有更多的连接，不像Skype公司， 不同的Facetime，谷歌聊天软件不同，它
保持恒定的 连接到服务器。
网页是从根本上 断开，虽然我们
不久怎么看 我们可以模拟的东西
像Facebook聊天和谷歌聊天软件， 它保持illusion--
或实际上做维护 使用持续连接
更多的现代技术。
>> 但是，如果我去，说，counter.php， 这是另一种简单的例子，
正如我们所看到的，目前认为 我参观了现场零时。
但如果我只是重新载入页面， 它在某种程度上知道我在这里之前。
如果我再次重装，它 知道我在这里之前。
一次又一次，再而三。
>> 因此，有一些加plussing 怎么回事，但通知
这个小东西不断旋转，使 简要地往上顶，然后断开连接，
所以它不是像我有一个恒定的 连接到我的设备。
好吧，如果我进入counter.php， 注意到它是多么的简单。
我第一次把这种特殊的 函数，我们很快就会
开始服用理所当然 所谓的会话开始。
启动一个会话。
>> 和会话今后就是 将是一个水桶，像一个购物
购物车中，你可以把值 和那种信任，作为一个程序员
他们打算到这里来的时候 该用户自带back--第二
后来，一个小时后，甚至一年后， 只要他或她不明朗
他们的饼干，因为我们最终会看到的。
现在我只是有 如果一个条件在这里。
因此，如果下面的项， 所谓的专柜，设置里面
这个超级global--这个哈希 表，如果你will--所谓会话，
然后继续前进，抓住 从session--思考价值
此作为购物 车 - 并将其存储
在所谓的柜台临时变量。
>> 否则，如果该值是计数器 没有设置所谓的购物车，
只需将它初始化为0。
最后，到这里，去放回 放入购物车或会话
计数器1的值。
所以，事实证明，这 特种集装箱这里 -
这又是这些相关联的一个 数组，数组，你可以索引
进言，而不是numbers-- 后仍存在用户消失。
再次，我会回去的页面了。
它是一分钟左右。
但记得，我已经 来过19次。
这是我20日访华。
>> 所以这将是关键 实施该记住任何网站
你已经登录，你把 您的购物车字面的东西
买，或者你有一些 消息数待定。
任何时候你想要 记住的信息，
我们会看到，PHP，像 其他几种语言，
为我们提供了这种幻觉状态 尽管，您将在PSET 6看，
当你正在做的HTTP请求 从客户端到服务器，仅此而已。
一旦你回来了 对此，没有什么更多
默认情况下，来从服务器返回。
但是，我们将看到如何解决的。
>> 现在好了，让我们尝试 打扫一下一点点。
我们已经看到了一些 不同的例子在那里。
哦，顺便说一句，对于 那些熟悉或不熟悉的，
的原因，该 即时的新生例如去
从寻找真 丑slightly--好，
还是ugly--小幅 不太难看，虽然仍然难看
因为如果我们看 在这里的源代码，
事实证明，我有这样的 在该文件的顶部。
>> 事实证明，自举是其中之一 免费的图书馆那里
存在不是编程语言 永远，但对于CSS或JavaScript的
或HTML或者任何数量的语言。
>> 而这些人这里 - 本来就出来了
Twitter--的只是有 一大堆的风格。
这是一个巨大的文件 在这里，有人写道：
或某人的写道，随着时间的推移 指定颜色和格式
和诸如此类的东西，这样我可以 那种借自己的语法
而不是要搞清楚 如何布置自己的状态。
这也被缩小的 使得计算机能够
理解但不 不一定是人。
所以，这就是为什么在 风格化有改变。
>> 但是，让我们现在做的更好 在设计方面，
因为如果我们停留下来 这条路太长，
我们的代码的要 会导致混乱和混乱。
因此，让我们专注于这些例子在这里。
最后今天。
>> 因此，这里是一个超级简单 对CS50的网站1.0版本。
它只有链接 讲座和课程大纲，
和它的使用无序列表 tag--我们上一次使用的UL标记。
如果事实上，如果我 打开查看页面源代码，
你会看到，这是 真的，真的很简单的HTML。
而事实上，尽管这是 引擎盖下的一个PHP文件，
它仍然只是随地吐痰 只出HTML现在。
>> 所以，如果我点击讲座， 我们看到这样的情况。
如果我点击周 零，我们看到这一点。
如果我点击 周三，我们看到这一点。
这显然​​是PDF 从当天的幻灯片。
所有我做的是一个带有链接 锚点标​​记这个网址在这里。
>> 所以，这只是说这是一个相当 简单的版本CS50的网站。
让我们来看看它是如何实现的。
如果我进入mvc0目录， 我们会看到几个文件。
一个是自述的，所以如果 一些这是太快了，
你可以闲逛 更悠闲以后。
并注意在这里是一个index.php文件。
事实证明，如果 你自己，人，
没有在指定的最后名称 一个URL，通常是Web服务器
推断一些默认名称为您服务。
一个指数点事 一般是默认的。
>> 所以这就是为什么刚才 当我在这里访问此网址，
没有文件名，没有文件 延长，无期的URL。
它只是知道某种神奇 寻找index.php文件。
这只是一个约定。
可以被称为什么。
>> 所以，如果我现在进入 index.php文件，你会看到
即，indeed--我们 摆脱的评论
因为这里真的 没有什么有趣的它 -
这仅仅是硬编码的HTML。
所以这是一致的， 不过，我的要求
你可以汇成HTML和PHP。
有没有实际的 在这里编程逻辑。
>> 和其他文件相当 多一样无趣。
这只是硬编码一个星期 这里每周一米，每周一W，
周一和周三。
然后如果我打开了零一周， 发现这几乎是相同的。
>> 那是怎样的一个关键外卖的。
请注意，是多么多余，这是。
这些文件几乎没有改变，但我 拉着这些复制/粘贴的工作之一
在那里我花了一file--推测 在本周zero--复制它
在每周一到来的时候， 并调整了几个值。
我们也许应该能够 做的比这更好的。
>> 所以，让我们恢复到MVC 并进入一个版本。
并请注意我有一个 几个文件，原因是什么
是共同所有这些文件只是一个 此刻ago--如果我回去版本0，
让我们回到指数， 而刚刚postulate--
一旦我摆脱comments--的 这是什么页面的一部分
大概是在每一个我的文件？
只需要调用它。
这行是重复的 可能在所有这些页面？
是吗？
>> 学生：[听不清]。
>> DAVID J.马兰：1〜9。
是的，绝对。
1到9，可能除了8 的变化，因为CS50一点点
成为讲学或 零一周的东西。
但是，几乎是相​​同的。
因此，所有这些东西仅仅是 种复制和粘贴。
还有一对夫妇 其他行，我能想到
那可能是相同的 在所有的文件。
>> 学生：12和13。
DAVID J.马兰：是啊。
当然，12，13，14和可能， 只是因为有趣的东西
是发生在11行 和10，所以它似乎。
因此，让我们来看看第1版， 它试图改善这一点。
在这种MVC example-- 1版本中，我们将 解释什么是MVC方式的moment--
如果我进入指数种，它 现在看起来有点混乱。
这不是那么简单之前。
>> 但是，一旦你开始 仔细阅读，这是
相当简单的它在做什么。
显然，1号线和 8号线已经取代
大家只是identified--的东西 虽然刚刚好措施，
我只是在某些情况下离开的UL有 天没有的事情列出来。
所以需要有点像英镑 包括C.它复制并粘贴
内容有效 这里到这个文件。
>> 所以在header.php中，你 可以推断，从它的名字，
将是该页面的标题。
它种在这里的孤儿。
它仅具有顶部，但 有下面没有更多的内容。
>> 如果我看一下页脚同时， 这是另一个文件mentioned--
这其中甚至不感兴趣， 但同样，这是常见的一切。
因此，这是页脚。
这是首部。
这是这是文件 不断变化的，所以为什么不
试图分解出的共性 在这里这两条线？
>> 但是，我们可以清除此 一个远一点。
我要继续前进， 开了两个版本的地方
我们会看到有 一个新的文件，helpers.php。
我们会看到，就是在某一时刻的内容。
让我们去索引，为 入口点和以前一样。
>> 现在发现我需要 helpers.php，不是页眉或页脚。
但助手有点像 helpers.c和helpers.h从PSET 2
或PSET 3不久前，当你真正 没有搜索并找到该PSET，
你把所有的代码进行排序 和搜索在一个单独的文件中。
这就是这里发生了。
>> 现在3号线看起来有点不同。
而这只是一条线。
为了使这更 清楚，我可能只是
确实这是风格上保持一致 与一切，我们已经做到了。
但是，这不是真的 改变的功能。
这只是一条线的实际代码。
>> 很显然，有一个功能 地方叫做渲染头，
这是哪里的东西 变得相当强大。
请注意它的括号里面 就是另一片语法？
它可能是一个有点难以启齿，但 注意there's--我会放一些白
空间。
还有方括号。
>> 和方括号中，我们看到了一点前 在关联数组的情况下，
这是，再次，像散列表。
如果你觉得现在到C时， 为了参数成函数
必须始终是相同的。
你要记住什么 订购is-- X，Y，Z或Z，Y，x--
你必须总是为他们提供 在同一顺序或找一找
如果您忘记了。
>> 但是，这似乎是一种聪明的办法 路过的一个任意的键值
对由此标题名称 在这种情况下的说法
和CS50是其值。
而事实上，我有 这些方括号
这里的意思是，我可以 还传递东西
象是每周1或0或2或3。
因此，我们已经参数 以这样的方式该功能
这可以利用多个输入， 但现在它只是一个。
>> 如果我现在进入helpers.php， 注意它在做什么。
这是一点点 的新功能，
但现在只拿 信仰，这是
语法与您 定义在PHP中的函数。
你从字面上说的功能。
你没有指定返回 型，这是一致的
与可变细节较早 在这里你真的不强类型。
>> 这只是规定 在默认情况下，此
接受联合 数组作为参数。
你知道吗？
如果用户没有通过1 中，假设一个默认值。
>> 这是一个功能，C没有 对我们来说，这是很好的，因为现在
数据，即使你 不给它任何东西，
将是一个 数组，但空单。
而作为旁白，提取物 只是做一些时髦
其中，它需要所有的键从该 关联数组，所有的东西
你可以把方括号中， 并创建变量了出来
这样我们就可以最终获得 他们在footet.php和header.php文件。
这是一个有点抽象， 所以让我指出这一点。
>> 在index.php文件，请注意我 传递一个键值对称号
与CS50的值。
如果我现在看helpers.php， 注意RenderHeader
被抽取了我传递的数据 中，然后，需要的header.php。
我所做的就是那种穷人的的 现在执行下面的。
>> 如果我打开header.php文件， 注意，我不再难
编码这个头文件中的文字CS50。
我已经把这个无可否认的残暴 命名功能，HTML特殊字符，
在那里。
但是请注意，我做了什么。
我有打开HTML。
然后我开的头和公开赛冠军。
>> 然后里面的标题的开放， 关闭标签，我有一点PHP代码。
这是一个很好的语法，但是， 这只是意味着赞同出来。
它的字面意思是this-- 呼应following--
但这是性感写。
呼应了标题 一个已经来传递。
>> 但是，你有什么感想HTML 特殊字符是怎么一回事，
特别是如果你有 之前的一些HTML的经验？
可能是什么字 危险中要传递给页
在那里你动态地生成 网页使用这样的代码？
让我去这个文件，版本 2，看我能不能诱导这一点。
>> 第二版是这样的。
并注意一切 精美，做工精良。
但是，假如我去到index.php和 我指定我的网页的标题
不CS50。
它是开放的支架脚本警报 你好世界，接近单引号，
右括号，分号， 开放式托架，斜线脚本。
>> 脚本，如我们 最终看到的，是一个标签
你可以用它来使用的另一种 编程语言叫做
JavaScript的Web页面的内部。
现在这里看到的逻辑。
这里有一个名为标题的关键。
下面是它的疯狂long值了。
>> 但是，如果我去了助手页面级 或者更确切地说，标题页，
我调用这个函数 在该标题的第一。
所以，如果我现在刷新页面，我 看到这，看起来可笑，
但它是安全的。
它只是看起来愚蠢。
>> 但是，假设代替 我已经忘了这一点。
和记住我的话，一个非零数字 你会忘记这样做
你会得到一些勤劳 学生或朋友来了
你在CS50公平或匿名 晚上闲逛在您的网站
而实际上注入的代码 瞒着你进入你的网站
不知何故。
>> 因为如果我只是吐 在这里标题和标题
那里 - 好吧，如果从字面上称号 貌似这个和PHP
作为可吐的语言 从其他语言的文字，
这是从字面上去 来替换这个​​标签，
当然，我把其他地方。
>> 所以，如果我现在去这里后重装 撤销这些安全机制，
现在我的hello world这里。
现在还不是所有的大的 处理，但你可以做一些事情
多一点恶意 在这里，像有
其他tags--，我们会看到，一旦我们度过 更多的时间在JavaScript--如位置
点HREF得到，报价，引文结束，HTTP business.com，但其相反的
从那天。
现在你可以诱导网络 页面居然马上去
在这里这个网页。
>> 而实际上，我不想 甚至去business.com
因为我不想 知道是什么。
但是，这也将触发代码 被注入到当前页。
因此，这是唯一地说，即使 我们要介绍一些超早
这些更复杂的结构中， 这一切都朝着确保的一端
你的代码是不可利用。
>> 所以，现在这里的第三个版本。
它变得有点票友。
我真的不like-- 我的肛门侧
渐渐的有点恼火 事实上，我已经叫功能
RenderHeader和RenderFooter 这几乎是相同的。
于是我想到，为什么不 我这些参数的函数
逼到一个叫打底， 有它需要第二个参数
象模板的名称，最终 以render--要么页眉或页脚？
然后可选，如果我想 通过在一些键值对
像我这样做，为的标题 头但不是页脚，
我能做到这一点。
>> 所以现在如果我进入helpers.php， 这是一个稍微复杂一些。
我会挥动我的手在 细节，但它只是一个功能。
所以这是朝着更好的设计的一个步骤。
>> 我们可以借此一步。
如果我去了我的第四个 这个版本的，现在通知
我正在做的事情 更有种神秘。
我知道这是一个 大量吸收一次，
但我们只是种 清洗东西。
现在，我把我的助手 文件到一个文件夹，名为
includes--只是一个任意 名字在这里我想提出的东西
我想包括 - 再 这剩下的是一样的。
>> 但是，如果我现在看gedit中， 我已经摆脱了通知
所有其他文件和我所 移动它们，例如，到此处。
然后在模板中， 我有这个在这里了。
所以这是现在都朝着一个步骤 使用的一个更好的设计图案。
我们非常迅速地 要搬走
从PHP的默认功能， 我们开始在这里与，
在这里你只汇成PHP， 和你的HTML和CSS的，
你刚才吐出来 你走你的路。
它不会是非常维护。
就像在C中，我们开始使用 多个文件和多种功能
和保理的事情说出来。
我们会在这里做同样的。
而事实上，在第五和最后 版本在这里，我做了一件事。
您甚至可以使用点点，对此， 再次，就是父目录。
为了更加安全意识， 因为如果我看听
这里的第五个，也是最后的版本，预告 我有一个目录名为这里
公众，然后在 同一级别，可以这么说，
我已经得到了包括和模板 然后将该文本文件的自述。
>> 其原因我已经结构 它喜欢this--等众多网络
主机，特别是那些5元 那些一个月美元10个月的人，
如果你曾经有过的其中之一 services--是什么让很多人做
是他们只是希望你能转储所有 你的文件放到一个目录中，
就像我们已经做了有 这第一个例子。
>> 但只要你开始建造更多 只是存储复杂场所
数据你关心和文件你 关心，其实组织的事情
正确和更安全 意识的头脑可以
我们开始防守 对所有的朋友
你有两种或 这个类以外的谁，
只要你开始做 在网络上自己的节目，
要开始采摘 你和他们。
>> 所以我们将看看 最终，在这个设计。
这仅仅是一个图片 描绘如下。
我们打​​算把我们所有的 在一个或多个文件的编程逻辑，
我们要去刚刚开始 调用这些控制器。
它是其中的​​大脑 我们的网站竟然都是​​。
然后，我们要 有意见和看法
是简单，只是单独的 files--所谓的模板，通常。
他们只是有 我的网页的美观，
我想要的页面看看 like--的颜色和布局
的位置和 所有的变量。
>> 然后更有趣 我们最终会到达
是模型，这将是刚 我们拍其他技术的话
我们领进 图片，就像实际的数据库，
所以，当你想 保存的信息，
你不只是发邮件 您的监考官或自己，
你居然把它存储在数据库中 使用称为SQL另一种语言。
所以我们今天离开这里 拿起这个星期三
并引入数据库即可。
>> [音乐播放]