>> [音乐播放]
>> DAVID MALAN：这是CS50，和 这是八周的开始。
而且我们很高兴地欢迎 背，大惊喜，CS50自己的拉蒙
高尔文，上升资深谁一直 消费在过去的几个月
自七月在洛杉矶，在好莱坞， 从字面上工作一个全新的电视
节目叫殖民地，它的创造者 实际上是一个哈佛大学的明矾自己。
所以，我们非常兴奋地看到这一 首次亮相美国网络今年一月上。
敬请关注这一点，对于 对于周更拉蒙来。
>> 知道现在到底是近了。
而这是什么意思是，有没有 所有的东西离开了CS50的，痛心地说。
我们只有三个问题 套left--有
问题集six--这是在 你的手现在还是很快就会被，
由于稍后week--是为了弥补 我们在命令行中，其中世界
我们已经花费了我们大部分的时间用 C和Web编程的世界。
那么，你会看到很多的想法 在命令行工作借来的，
但也有很多新的 而有趣的想法
这也将是有密切关系的 移动应用和技术，
更一般地，使用它 人都熟悉时下
在笔记本电脑和手机等。
>> 所以，你将实现不 一个网页，或网站
本身，而是实际的web服务器。
您将编写一个Web服务器的其它部分 C语言编写的，其目的在生活中
是接收的HTTP请求，那些 我们一直谈论的虚拟信封
对了，居然无论是与回应 一些静态内容 - 就像一个圆点的HTML
文件，或一点阵JPEG或 任何其他数量的文件，
甚至是PHP文件，由此您的Web 服务器将解释该PHP
代码和吐出的结果。
现在，我们为您提供 相当多的框架
对于它 - 确实 对于问题的分布码
组六超过1000行代码，一个 很多这是注释，是fair--
但这实际上意味着 为契机
让你的手脏跳水 到一个相当大的项目
我们已经非常明确 雕刻出件的你，
这样真的，当你退出CS50和 进入编程的真实世界
并希望涉足 任何数量的项目，
你将有更大的 舒适下载一些源
代码，一些开源 项目在网络上，
和潜水，使 你认为合适的变化。
习题集七是将是关于 使自己的基于Web的应用程序
这需要动态输入和 产生动力输出形式
的etrade.com样的网站。
而问题集8将集中在尚未 已知以JavaScript另一种语言。
>> 同时，最终 项目是在地平线上。
所谓预提案 一个星期从今天到期。
按照规范的预proposal--， 这是对CS50的website--
是一个很随意的机会 你发送一个非常简洁的电子邮件
你的助教 只是通知他
（她），你在想什么， 用他或她作为一个传声筒。
而有理智check-- 不管你是想
关于贪得 太多或者太少，
也许你无论如何也没办法 并希望与其进行通话。
>> 其后是一个建议 和状态报告，
所谓CS50这里在黑客马拉松 剑桥哈佛和耶鲁大学的学生
一致好评。
最后一个项目的 实现是那么所致。
然后这里CS50公平，在剑桥， 还有另外一个在纽黑文。
所以建议，看看 该网站的详情。
>> 但更令人兴奋的，也同样是一个 机会，让你的手脏，
和你的头脑开放给整个 一堆的主题和工具
和技术，是辅助 该课程的核心教学大纲，
但仍然相关。
而同样精彩垫脚石 这样做很酷的最终项目
远远超出了我们的材料已经覆盖 正式的问题在课堂上设置或。
所以去CS50的网站 研讨会整个花名册。
如果你还没有注册，这很好。
来吧，注册仍然和我们将 跟进直播流媒体链接，
的日期和时间是在网站上。
所有的一切都将是 记录下来，放到网上
如果你不能使 特别的日期和时间。
>> 至于什么样的未来thereafter--好， 当然，还有的CS50黑客马拉松。
这张照片，回忆，从零一周拍摄 凌晨4点左右的一个晚上在过去的几年。
该CS50公平，这再次 将在这两个城市。
然后，只需厂 种子，尽管我们仍然
有一个月加左学期，如果 你想加入CS50自己的教学
工作人员，并且要开始 想成为一个CA，
或教学老乡，知道 我们将开始谈论更多关于
后来这个学期。
但图为 今年大部分时间的球队。
>> 因此，PHP--我很伤心 上周[？ Allyse？]好心
去得到的努力 我们这些精彩的道具
我没有使用结束，所以 真的只是看上去有点傻
我们有一个铁锹坐在这里所有 日上周三，和一个小勺子。
但是，这是我的隐喻 试图描绘方式
为什么我们过渡的图片 从C到PHP之类的语言。
并且同样可以的任何所述 languages​​--的Java，Python和Ruby的数量
的others--但而在或串 C，比如，编写C语言程序
通常可能是这样 采取这样的勺子
而挖的一个洞 地面上，在沙或污物。
PHP可以让你花费太多 大咬出了问题，
编写更少的代码 用小得多的工具，
因为有这么多 功能拼凑研究。
>> 现在，如果我们真的是戏剧性的， 我们不得不有所铲
在这里，但就这样吧。
同时，其它 比喻，我们想出了
是的，当然，你可以 使用类似扳手
锤的东西都像钉子。
不过，当然，合适的 使用的工具是怎么回事
是没有这么多的 所谓的语言C--
现在我只是生气 [？桑德斯？]也许，
我们将解决这个问题later--如此 正确的工具经常使用
是不会被 这种最低水平的工具。
事实上，C是不是一种语言， 你们中的大多数都曾经打算使用，
还是应该必然再次使用。
>> 而事实上，一个小 secret--唯一一次
我用C自己之间几乎 每一个秋天的九月和十二月
学期。
那是因为我们 以此为契机
教基本面 编程，
并与它的计算机 科学的基本原理，数据
结构，算法和 like--但很快会把你
现在看到的语法 和思想基础C
如此奇妙 转移到更现代的
更高层次的语言，如 PHP和Python和Perl和Java
和Objective-C--其实，与其说 目的-C--但斯威夫特，这些新
语言是很多人都会 然后涉足与你最后的项目。
>> 因此，事不宜迟，让我们真正 使用PHP来解决一些问题。
回想一下，在年初，去年 本周，我们只是用CS50 IDE，
我们写了一个极小的小程序 只是说，“世界，你好。”
然后我救了它 称为文件hello.php。
然后我跑了这个命令。
>> 为什么？
在英语中，这是怎么回事吗？
什么是我在做的时候 我跑这个命令？
>> 是吗？
>> 听众：有一些功能PHP 读什么in--明白这一点。
DAVID马兰：好，有一些功能 PHP--，让我更具体，
有一个名为PHP程序，又名
一个解释，那理解 hello.php的内容，
和顶部解释它 底部，左到右，
然后做了这些命令说。
当然，在hello.php的命令， 仅仅是源代码 - 功能
和变量和循环和 等等，我们自己
已经开始使用PHP编写。
>> 但不同于C，这是 编译语言，
PHP你只写它，并运行它。
你跳过了中间商的步骤 将其转换为0和1
然后运行它。
还等什么是这种积极的一面？
为什么我们省略这一步？
为什么做更多的现代语言 往往会忽略这一步呢？
是什么好处？
>> 或者只是直觉？
即使我们还没有 之前写太多PHP，
什么是有益的关于不 编译代码，你觉得呢？
没有？
不承诺？
抓你的头？
是啊。
>> 听众：更有活力。
>> DAVID马兰：更多的活力呢？
你是什​​么意思？
>> 听众：[听不清]
DAVID马兰：OK，好，所以 取决于输入，
你不必每次都进行编译。
它真的是为 简单that--什么
继续点 编译代码？
这仅仅是一个步骤中的 making--这是需要，
在过去的几 周，两倍的步骤
作为刚刚运行您的程序。
它是有益的看到你 看到一些错误信息等等，
但它仍然只是一个恼人的一步。
>> 所以程序员实现 随着时间的推移，我们为什么不
开始编写语言的不 需要一个相当机械的步骤，
这样就可以只写 你的代码并运行它。
但究竟是什么价格 我们看到，我们付出
上周，有一个具体的例子？
是吗？
>> 速度。
所以，[？什么？]口译 慢一点，
在零和一的 很好，速度很快的电脑
要了解，因为 Intel的CPU，或不管它是什么，
只是明白这是怎么回事 与这些位模式。
而一名翻译 是一个程序，真的
有读取ASCII源 您所编写的代码，
并将其转换，可以这么说，或者 弄清楚如何将它转换最终
到零和一。
因此，它只是需要一点点 一个性能命中位。
所以这是一个有点折衷。
现在，如果我们做到这一点在这里，让我 继续前进，做一个举例如下。
如果我走在这里，新的文件，我要去 再次保存，这是hello.php。
现在我要继续前进 并说，“印刷世界你好” -
和回忆，我可以使用打印，我不 必须使用打印-F。而现在到这里，
如果我做hello.php的PHP，huh--我 似乎没有不同的方式解释它。
我做了什么错？
>> 听众：有角度的手镯。
>> DAVID马兰：是的，你需要 这个角度支架往上顶。
因此，它是一种恼人的，但 你习惯它很快。
如果我有写PHP代码，我 一般需要告诉程序，
或者告诉解释，嘿嘿 PHP，这里涉及一些PHP代码。
然后，良好的措施，我想 关闭此与此，而是
只有问号角 支架，以至于现在到这里，
如果我跑这一次，现在 我获得所需的结果。
>> 现在，让我们做一个轻微的优化， 只是让你以前见过它。
这是种讨厌我 必须运行PHP空间hello.php，
因为在过去我 可以只写点斜线
节目的名字，这是一种很好的。
它是一种更好的用户体验。
>> 因此，原来你可以这样做 与following--我的PHP
可以使用这个相当隐蔽 咒语在此处的顶部，
这一般被称为认领， 因此，这是一个尖锐的象征，
可以这么说，这是一个爆炸 或感叹号。
而现在这是通向一个程序 在一个典型的Linux系统，
被称为环境，或包膜。
而这个line--漫长的故事 short--行一个刚
说，哎电脑，找到PHP 环境中的解释对我来说，
发现它在你的记忆，可以这么说。
>> 什么是好的，现在，是 如果我去到这里，
我可以做点斜线 你好点PHP，or--哼。
没有权限。
那么，你会看到更多的这 有问题设置七，如果你
还没有准备好，与权限。
事实证明，我需要 执行此命令
所谓的[？ chamod？]变革 mode--一个X轴正hello.php。
我需要[听不清]这一个额外的 步骤，告诉我的电脑，
使hello.php可执行文件。
而现在看什么happens--点 斜线hello.php，它只是运行。
我并不需要指定 解释了。
我可以让它更漂亮， 不过，如果我重新命名这件事情。
如果我移动hello.php只 Hello--所以注意到在左上角，
该计划的名称是 实际上现在只是您好。
现在我可以使它看起来像一个C程序， 即使它写在PHP--
或者坦白任何数量 其它语言。
>> 所以边缘增强， 没有功能差异。
但它只是一个小的好奇心 现在，这样就可以编写程序
在任何语言，而且用户不 要知道或关心那些是什么。
好吧，让我们来看看一个更 现在引人注目的例子
我提前掀起了。
这就是所谓的quote.php。
而且它是可在网上。
并注意这是很short-- 但它是一个命令行程序，是
要查找股价 对我来说，这实际上是将
是有密切关系的问题设置七人。
>> 所以，让我们来看看我在做什么。
在最上面我已经得到了 开放式支架问号PHP。
然后，我已经得到了这条线，因此我 需要一个名为functions.php--文件
我们将看到 更多关于这一点，
但是这是像C的 版犀利包括，
你想去哪里 包括另一个文件。
PHP称它为要求，虽然它 也有一个包括功能。
而事实证明，function.php是 只是我在课前写的。
我把它放在同一个目录下，因为 我想分解出一些代码
我们可能要在其他地方使用。
>> 同时，你也许可以 推断出是怎么回事。
这是C--，但有一点不同 这是什么意思通过确保正确使用？
技术上更翻译此。
在什么情况下我是 退出程序，或退出？
是吗？
>> 听众：当你不具备 两个命令行参数。
>> DAVID马兰：如果我没有 以命令行参数。
请记住，其中之一 参数是该程序的名称本身。
和第二将是 一个字我提示符后键入。
所以就像C，这 是我的检查方式，
没有用户合作， 运行该程序，因为我打算？
现在，有什么东西 有一点不同
与C--首先我们 有这样的美元符号，
什么做一美元 签署表示在PHP？
只是一个变量。
这是all--只是一个变量后跟 无论你想实际调用它。
请注意，有一些东西 从我的PHP程序缺失，
就像它缺少最后 本周，对C，这是什么？
>> A型，而且别的东西。
没有东西 function--主要功能。
有没有主要功能。
你刚开始写 你的代码，而不必
担心一个比较随意 命名一些默认的约定
功能为主。
所以ARG C是真的 一个全局变量
该解释 使提供给我。
现在，这是有趣的。
所以查找的东西。
美元符号的股票是在 离开了，这是我的变量。
在右手侧， 有明显
在PHP中的函数调用查找的 我通过我的最后一个命令行
参数用于：不管这个词。
我们将看到如何 工作在一个时刻。
>> 然后最后我汇报的价格。
我打印一颗颗 份额如此这般。
请记住，这是 在PHP--在PHP--的方式方法
在这里，你不必做 美元符号s了。
你可以只用花括号 并插入一些变量。
你不必担心 用printf以同样的方式。
>> 而作为一个不谈，当你把一个变量 双引号像这里面，
您使用的是看中技术 所谓的变量插值。
它只是意味着插上变量在这里。
而作为一个抛开你，有的谁进来 从其他编程背景，
你可能不使用单引号 字串，做到这一点。
您必须使用双引号 变量代换工作。
否则，你会从字面上 看到这些花括号。
>> 所以，最后，让我们继续并运行此。
让我做我的终端大些。
让我继续运行 在我引用的目录。
[？ CDsource？] [？ AM？] [？报价？] PHP的报价点PHP，
而我要寻找的东西 就像歌，这是它的股票代码，
和一个共享的新名称， 字母表公司，花费$ 717到今天为止。
好吧，如果我们想 再次运行此，任何人
还有一个股票行情 他们想看看吗？
>> 微软，我认为是 这其中，MSFT-- $ 53
我认为雅虎是可能的。
而Facebook是。
>> 那么，什么是这个程序在做什么？
魔术似乎被嵌入 在查找功能。
因此，让我们快速浏览一下。
>> 事实证明，不来 用PHP，它在functions.php中。
我们不会通过 这很详细，
但注意的词这里 上functions.php--六线
我从字面上说功能。
我指定我的函数的名称。
我然后指定任何 参数，或者参数，
我想这功能take--没有类型。
然后，我实现它。
>> 我会挥挥手 在实施中，
因为它是相当先进的右 现在，但我们会再次看到它实际上
在一个星期中的问题设置七人。
但我可以打扫一下了。
我也包括在 今天的代码版本
的报价，其中有没有点PHP文件。
因为什么大概是在 所谓刚引用程序的顶部？
这所谓的shebang--的 相当神秘的咒语
上面写着发现PHP，然后 在我的代码运行在这里。
>> 好吧，这样带来的 我们的地方，我们离开
最后时间 - 尽管有 一些更高级的例子。
有任何疑问，迄今约 PHP还是我们在做什么？
No--所有权利。
是吗？
>> 听众：内 HTML文件，做你 -
[？你做 ？] [？只是打电话了吗？] 一个[听不清] PHP文件？
DAVID马兰：好问题。
在网络方面，我们是 从字面上即将过渡到，
你不使用所谓的 认领在顶部，
因为Web server--常 程序调用Apache或微软
IIS，Internet信息服务器，或 任意数量的其他网络服务器软件，
知道，它认为，当 一个点的PHP文件，它
应在其上运行的解释。
它不看那个第一行。
所以这第一行招 只是当你
写命令行programs-- 我们不会做超的时候，
但它是我们的桥接方式 我们的C例子，现在我们的PHP。
>> 因此，让我们确实弥补这个世界 在命令行天下网络
通过执行以下操作。
让我继续前进，绘制 在这里只是一瞬间。
因此，如果我们有一个web服务器，或者更确切地说， 如果我们有我的笔记本电脑在这里，
我就画这样的。
在这里，我们有 互联网以某种形式。
然后在这里，我们有 在building--服务器
这是怎样的互联网 works--在这里
与一些灯光，也许一台服务器。
什么是真正回事 这两个连接之间？
>> 所以在这个建筑是一个Web服务器。
这只是一台电脑 这在运行一些操作
系统 - 或许称为自由软件 阿帕奇，其中CS50 IDE运行。
所以，你可以实际 觉得这个建筑
作为建设中 这CSt0 IDE存储。
这就是所有你 帐户，所有的你
拥有自己的Web服务器 运行时，所有的你
有自己独特的网址， 当我们开始讨论，
你会看到更多的在体育组六。
>> 这里是我的笔记本电脑的地方 其他在互联网上。
因此，当我访问一个网址属于 对我来说，互联网流量是怎么回事
转移到服务器，该服务器的 收到HTTP request--
像获得的index.html，它的 回复该网页。
所以这是一般的范例。
而一切行动 到现在为止的今天，一切都
不仅是发生在 这座大楼的界限。
我用我的笔记本电脑，但 我是连接到CS50 IDE，
因此，所有这些程序我跑 是服务器，它本身的内部。
>> 但现在，让我们开始重新使用PHP 写一些实际的程序
由网络服务器提供。
而要做到这一点，我要去 到一大堆的例子
这里介绍了这个想法。
因此，这是怎样的一种奇特的方式 描述一个编程范例。
>> 而事实上，当你退出CS50 或工作的最终项目，
或者采取一些后续 在类中，你会开始
地看到，天下 - 特别是已经长大了
与语言，如C 是超低level--
意识到有更好 如何写软件。
有一定的 模式可以遵循，
整理文件的某些方面 和命名你的函数的方法，
使长话短说， 世界已经到来了
有一大堆缩写词 和名称进行编程的方法。
这些都是你可以只使用技巧。
>> 其中之一称为MVC中， 对于模型视图控制器。
而这仅仅是为 现在，一个过于复杂
的说你应该怎么布置方式 一个基于PHP的网站，在我们的例子。
你如何组织你的文件， 你如何安排你的逻辑，
的方式，可以更容易地 编写更复杂的网站？
事实上，我们很快就会 那里用对置7。
>> 因此，在MVC的世界里，你会 看到我们的代码一般可以
被表征为型号代码， 或控制器的代码，或查看代码。
而我要去 过分简单化它作为follows--
所述控制器是 你的程序的大脑，
这其中所有的 有趣的逻辑发生。
所以，一切，我们已经 写迄今在课堂上，
是一种像控制器 代码 - 它的控制
你的程序，你的循环，你的 条件，你的函数
和变量和所有。
>> 意见，现在，将是一个小 在幅材的世界更明显。
视图是美学 你的网站。
这就是用户sees--的图像， 在HTML表格，HTML标记，并且所有
这一点，所有的蓬松美感 东西并不难写，
但仅仅是要生成什么， 是所谓的观点，美观。
和型号，最终会 是数据库stuff--这
我们将开始深入到这些 更本周三。
所以控制器是逻辑， 视图是审美的东西，
和型号将是哪里 我们保存我们的实际数据。
>> 因此，让我们看看这个更具体 用下面的例子。
我要进入​​我的目录位置 今天的源代码 - 所有这些都
可在网上。
而且我要进入零版本。
在这里，is--让我们叫它 的CS50的网站版本0。
没有太多在这里的。
这是一个非常简单的网页，是 可能使用什么HTML tags--刚
从过去的例子猜？
>> 那是什么？
H1--可能为大黑体 标题，这标志向上顶，CS50。
而且是在玩什么？
是吗？
听众：无序列表。
DAVID马兰：无序列表中 - 所以 UL标签，也许一对夫妇LI标签。
如果你不记得这些， 老实说，这并不重要。
这些都是蓬松排序 HTML的实现细节
您快速查找 和你回来的路上。
我们将更多的精力放在编程 想法是多汁件。
>> 那么就让我们来简单 看HTML--的确
如果我打开查看源代码在这里，是啊， 这正是这里发生了。
这里有一个UL标记。
那里面嵌套是LI标签。
然后，我借来的网址 这里实际的教学大纲。
>> 然后在 lectures.php显然是
另一个动态生成的页面 这将不得不让我们see--啊，
前两周的讲座。
所以有一周零一周，让我们 看this--如果我查看网页源代码，
也超简单。
这些都导致了两页 所谓week0.php和week1.php。
所以，现在考虑发生了什么。
>> 当我点击week0.php，我的笔记本电脑 正在为week0.php请求。
Web服务器，也叫做CS50 IDE， 正在接收该虚拟包络。
它看到一个消息 像，得到week0.php。
它然后解释该文件中，顶 至底部，左到right--文件
所谓week0.php--和 吐出的结果。
所以此文件的内部， week0.php，必须
在生成控制器逻辑 这个HTML，我们将很快看到。
>> 但现在，让我点击零一周， 现在我们有三，五，
现在我们有幻灯片 慢慢的从零一周。
你可能还记得 这从遥想当年。
所以，这就是这个网站是做什么。
>> 因此，让我们考虑一下它是如何做这个。
我要去回 这里的源代码，在CS50 IDE，
我要去开拓的index.php。
在该文件的顶部 是一堆意见。
然后在该文件中的中间，它 事实证明，没有PHP代码任何责任。
因为如果你没有任何的 开放式支架问号PHP标签，
你可以自由地只是把HTML。
>> 因为是PHP 解释是应该做的，
是当它读取该file-- 从上到下，左right--
它只是解释它看到的代码 这些尖括号问号。
和其他任何它不 承认PHP，它只是吐出来。
而HTML是其中的东西 它只会吐了出来。
>> 因此，这个文件可以有 被称为index.html的，
但我命名的一切 点PHP的垫脚石。
Lectures.php--类似 给人留下深刻印象，它只是一些HTML。
Week0.php，同样只是一些HTML。
>> 但现在让我们把对 众所周知工程帽，
并考虑我们如何才能改善这一点。
这并不难做到这一点，但我种 中演化成复制和粘贴。
而事实上，如果我做两个星期，你 知道我可能会做什么？
我要去week1.php，我 要突出一切。
我要去复制，粘贴 到一个名为week2.php新的文件，
调整一些网址，以及我的路。
>> 因此，基于我们所 可见在C中已经，
这感觉不对，希望。
复制，粘贴，很少正确的解决方案。
那我们可以开始 要怎样才能提高呢？
机会在哪里 为更好的设计？
>> 到时候我去 8周，这是怎么回事
是真的很烦人 如果我想改变
每一个的字体 我的网页，或者如果我想
改变布局的结构。
因此，哪来的机会 为更好的设计？
好吧，让我们来看看什么是 在所有这些文件的共享。
>> 这里有一个星期，这里的一周 零，这里的lectures.php，
这里的index.php--什么是相同的， 所不同的是，粗略地讲，
在每个文件？
是吗？
>> 听众：[听不清]
DAVID马兰：好，好。
因此，有一种模式，当然，其中 每次我选择我的演讲，
我应该产生 非常相似漂亮的网页。
所以，也许我可以利用 事实真是，
我们特意数值 索引我们的lectures--
如果我可以把更多的 也就是说在你的答案。
什么是唯一的，真的， 这为期一周的变化埃德蒙顿
让我向下滚动，所以它是 大致处于同一place--
所以这里是零一周， 大致在顶部。
这里是一个星期，周 零个，一个星期，零周。
OK，从字面上如果你知道 没有任何程序，
这是现在就像一个 模式匹配游戏。
那么，有什么不同呢？
是吗？
>> 听众：[听不清]
DAVID马兰：好，所以标题 是变化的，非常轻微。
零是怎么回事，当然，一。
同样的事情发生了，在H1标签。
同时，我们也不太把它看成很容易， 因为URL是有点长。
但是，这些网址被稍微改变。
>> 但是，什么是没有改变的是，敢跟我 说，大多数的page--的内容
HTML标记是相同的，头部是 相同的，标题是几乎相同的，
身是相同的，并 几乎一切
是除了同一 这些小的调整。
那么，如何才能去 一些保本了呢？
>> 那么，让我提出确切 在未来的版本。
因此，这里的一个版本，我有确切 相同的文件，以及其他几个。
下面是index.php--即使 你从来没见过的PHP之前，
那我可能做来解决这个 根据problem--你在这里看到的？
是啊，是轻微的承诺？
没有？
是的，去上。
>> 听众：[听不清]
>> DAVID马兰：是的。
>> 听众：[听不清]
>> DAVID马兰：我需要你 只是大声一点说话。
>> 听众：[听不清]
DAVID马兰：好，好。
我think--是 很难听到你 - 但我
以为你在说什么是 这是常见的往上顶的标签，
那是常见的标签 底部，现在已经被提取出来，
或降级哪些文件？
header.php文件，footer.php-- 我们要去
做出一些调整，以 这些关注你只是
提出了关于数字变化，为 举例来说，如果我没有听说你。
>> 但是，这似乎是它的要点。
如果有大量的 冗余的页面的顶部，
且数额巨大的 冗余底部，
让我们从字面上只是亮点 切的内容了，
把它放在一个单独的file--就像 CSS中，我们提取出来的想法
非常相似的美学，把 它在一个单独的点PHP文件，
使用需要mechanism--这 是像C锐利包括 - 这
基本上好像是说去 抓住的header.php的内容，
和复制并粘贴到这里。
>> 但是，这意味着什么，现在在 的index.php，我有这两条线。
在lectures.php，我也 有那些两行。
在week0.php，我也 有那些两行。
>> 所以，现在，如果我想改变 我的所有网页的标题，
或者我想改变 基本结构，
我可以在一个地方，现在改变它， 两places--页眉和页脚，
分别。
现在代码的开始看 多了几分神秘，对吧？
但是，如果你想想页面 是doing--如果我请求week0.php，
就像在画过 当week0.php要求这里 - ，
这意味着什么？
>> 从字面上看，这个文件是 由浏览器请求。
该网站server--又名
CS50 ID--抓住这个 文件，week0.php，并读出
它从上到下，从左到右。
线之一，它立即遭遇 开放式支架问号PHP，需要
头点PHP，等等 什么PHP解释器
does--是内置于网络 服务器，因为我们预先配置
它为你 - 它会自动进入 成的header.php，复制的内容，
在这里它们粘贴。
>> 但随后的解释遭遇 问号密切支架，
所以这一切都做了思考。
现在，它只是盲目地吐出 出线路2至7，
因为它只是原始的HTML。
获取到线八条，并做了 同样神奇的again--打开文件，
敛的内容，并 要求他们或者将其粘贴
那么好吧或出现。
>> 但我只是提到了一个错误。
这是一个局部的退步， 因为如果我们看在header.php中，
那种我剪了一个角落。
我才给什么功能了，为了 获得这一有争议的更好的设计？
是吗？
听众：[听不清]
DAVID马兰：是啊，我种 切一个平凡的角落。
你指出什么改变 是标题，在标题的数量，
并在H1的数目。
所以我的解决办法是，OK， 让我们只重命名页面，
并没有涉及这 遇到任何问题。
所以这是一个局部 倒退是肯定的。
>> 但是，这里值得注意的是 是，我做了什么
另有因素 所有常见的东西。
而在footer.php，通知我分解 出了这一切，尽管较小，
常见的东西。
所以，我需要以某种方式现在能 走又前进了一步，并修复
该标题的问题。
因此，让我们做到这一点。
>> 让我进入我的第二个版本 这里，这又具有相同的文件
除了一个新的补充。
它是一个多一点 详细，但我们如果我们看看
可以梳理出哪些是怎么回事。
因此，而不是要求 的header.php和footer.php，
我似乎只需要一个 file--叫，当然，helpers.php。
让我现在的规定， 什么是helpers.php内
只是一堆功能 我写的，就像以前一样。
但我把它叫做helpers.php。
>> 现在很明显，在 三线和10，我
调用两个functions-- 渲染页眉，页脚渲染。
那些不来 PHP的，我写这些我自己。
我把它们放在helpers.php。
>> 现在，我们只看到此语法 一次，它是超级简单。
但是，这显然是一个参数 渲染报头，该函数。
为什么我知道？
那么这里有一个密切的括号， 这里是一个开放的括号。
当然，就像在C， 这些括号内的任何
是input--或 函数的参数。
>> 这是什么参数的数据类型， 根据我所强调？
什么做的那些方括号 表示，根据上周？
是的，这是一个array-- 特别是关联数组。
而这个语法诚然 有点时髦，
但这只是路过 在一个键值对。
最关键的是，报价引文结束 标题，并且该值是CS50。
>> 如果我们做到了这一点 在C中，它可能会改为
看起来更像这样， 只是报价引文结束CS50--
或者实际上这将是卷曲 括号，或者类似的东西在C，
其中键是零， 和的值是CS50。
但同样，在PHP，即使 语法是，再次，这一点都不奇怪，
它可以让你传递 字来代替的数
将密钥与值关联。
>> 那么，这意味着什么？
如果我进入helpers.php， 让我们来看看这个功能。
renderHeader.php，而 renderHeader是我的功能，
我知道，因为我看到 这里function关键字。
这是显然C--它新 采用所谓的数据 - 一个参数
但我可以把这种现象称之为 任何事情，但我把它叫做数据，
仅仅是一个小clean--和 只是采取一种猜测，尤其是
如果您在其他一些已设定 高级语言之前，东西
上述C，概念上。
>> 这是什么平等的开放式支架 括号大概是什么意思？
或者什么可能它是什么意思？
我们还没有看到这一点C.呀？
>> 空数组。
具体而言，这意味着，如果 用户不调用renderHeader
有一个参数，我仍然会 有所谓的数据参数，
但它的默认值是 将是一个空数组。
所以这是一个不错的便利性。
我没有要骂的用户， 或者说，你用我的功能失常。
我可以给用户一个默认 值，如果我没有特别在意。
现在这个功能，我 要挥挥手的。
但是，这种提取物功能允许 我们通过数据这些变量
入的header.php以下列方式。
这是最后一块， 我想时髦的语法。
这里是我的新版本 的header.php--它
常说，从字面上看，开 支架标题CS50，仅此而已。
而同样的事，H1。
>> 现在它显然说 一些漂亮时髦。
让我简化 一会儿如下。
这就是我 改变了我的标题是。
但是，它变得有点难看 不断开放的支架用PHP，
然后使用打印功能。
事实证明，PHP有一个速记 符号对于这一点，这仅仅是
一个等号，这在​​技术上是一个 函数调用呼应，而不是打印，
但它同样的事情，有效。
>> 这只是看起来更好。
这只是一个语法 糖，如果你愿意，
这使得我的代码看起来更好一点。
但事实证明，和 我们将再次看到这
没多久，我们必须把这种 烦人称为长功能
在HTML特殊字符 PHP的，因为事实证明
有一定的投入 用户可能给我们，
或者说用户可能给我们， 这是要打破我们的网站。
但是，我们会看到下一个 一周使用JavaScript。
但现在，只知道 这个文件，headers.php，只需
取的标题， 我通过了，这让
确保它的安全，可以注入到网络 页面，它吐出它作为我的标题
和我的H1。
所以，如果我进入现在这个版本， 注意听课有它的标题后面，
零星期都有它的标题后面， 事实上，HTML我生成
是相同的就是我的第一个版本 was--除了我的空白，
因为我已经开始格式化 我的代码有点不同。
但我所产生的所有 我在乎的代码。
因此，让我停下来 只是一瞬间，看看
如果有任何问题， 或混乱，我创建的。
好吧，让我们扭转 稍微用力在这里
看看是否有一个 机会改善。
Helpers.php也有过这种 函数，称为renderFooter。
这有什么值得一提的约 renderHeader和renderFooter？
再次，对于今天的目的，知道 该提取物的功能仅仅是
我传递参数的方法 成的header.php和footer.php。
>> 对不起？
>> 听众：[听不清]
DAVID马兰：是啊，我只 改变需要对线路。
所以从字面上看，我犯了罪 复制和粘贴，再次。
这不是一个巨大的数字 行不过来on--
如果我复制和粘贴的一切 只是改变一个小小的字，
而一个小小的字艾伦点 出在这里躯，与头在这里。
否则，一切都是 相同的，除了为，
当然，该功能的名称。
那么，我们能否做得更好？
>> 那么，让我开了这个版本 这里，由此helpers.php，
为什么不让我只是得到一个 小聪明这件事？
写稍微复杂 代码，但把它渲染？
所以，我有什么根本性的变化？
>> 它需要一个参数now-- 两个参数，数据依旧。
然后，什么是第一 名称可能被用于，
基于你在这里阅读什么？
即使有些语法仍然是新的。
什么是美元符号的模板？
>> 对不起？
>> 听众：页眉或页脚。
>> DAVID马兰：页眉或页脚。
所以很明显，我决定，如果 唯一的事情正在发生变化
是我想要的模板 以print--和模板
我的意思是，这是蓝图 我想输出代码，
但我想在一些堵塞 values​​--因此，如果这只是头
或页脚，我为什么不参数 这和调用的参数美元符号
模板？
然后，这个时髦的语法，让我 在一个变量在这里营造出路径。
>> 所以美元符号路径是一个变量。
这是什么语法 这样做，如果你熟悉吗？
是吗？
>> 听众：[听不清]
DAVID马兰：没错。
如果模板，报价引文结束， 头，或者如果模板是，
报价引文结束，页脚，该行有 我已经强调，八线，
是简单地把这个名字，像头， 和连接用点PHP。
因此，我们没有这个操作符 在C这点运算符
一个了不起的事情在PHP--如果你 熟悉JavaScript或Java，
您可以使用加 签字做串联。
>> 在C中，它是在一个neck--疼痛 我很抱歉，在对组六，
你将不得不做 this--它是在颈部疼痛
连接字符串。
为什么呢？
好了，因为如果你有 一个字符串，它是此长，
而另一个字符串是这个漫长的， 你不能只是插在一起。
你是什​​么，而不是必须做在C中？
是吗？
>> 听众：[听不清]
>> DAVID马兰：你对malloc 存储器，或在堆栈上使用的阵列。
而你确实有 使该数组足够大
以适应这种加这个， 再加上反斜线零。
然后用它们串联在一起 搅拌猫或手动与一个for循环，
或任何数量的技术。
我们向您展示一对夫妇在对组六。
>> 这是在颈部疼痛。
这是真正的我是什么意思约 这与this--像C与PHP。
你只要能获得更多 免费的功能，
这样您就可以集中精力， 理想情况下，就开心
编码的一部分，该 你想解决的项目，
而不是低电平细节。
>> 因此，这只是产生的header.php或 基于哪一个我称之为footer.php。
事实上，如果我去 到index.php，通知
所有这一切changed--代替 调用呈现页眉或页脚渲染，
我打电话渲染，其次是 我想要做的模板名称。
你会看到这一点，也是如此， 在问题设置七，
因此我们允许您使用 同样的功能，使串
与不同的网页束。
>> 因此，而不是纠缠太多 这些details--更多
你会再次看到 习题集seven--让我们来看看
在溶液的现在的开始 一个更有趣的问题。
到目前为止，没有什么我们已经 做有保存的数据。
事实上，唯一的一次，我们曾经保存 这是我们已经在这个类进行
当我们有一个非常简单的演示一段时间 回来，因此我们使用的文件IO在C，
我认为我输入我的名字， 汉娜的名字，和玛丽亚的名字，
或者是安迪的名字， 那么，我们节省了CSV file--
逗号分隔值文件。
>> 我们用fopen--我想 我们使用fprintf中我记得，
我们保存的文件。
现在，这是最简单的 形式的数据库。
如果你想为一个网站 Frosh即时消息程序，即新生
可以注册一个运动，你理想 想要做的事与该数据。
上周，我们什么也没做 与数据 - 我们刚才说的，
您已注册，不是真的。
或者，也许我给的 监考官，那就是它。
>> 但是，如果，如​​果我能很好 给那个监考CSV文件，
就像一个Excel文件。
或者更好的是，它会 如果我能很好
把这些用户的名称和 宿舍名称和所有的
成的数据库 只是住在永远，
直到我选择要删除的数据。
数据库允许 我要查询的信息。
事实上，这是一个数据库是什么。
>> 我们今天介绍，和 下周也是如此，一个技术
所谓SQL--结构化查询 语言，这是另一种语言。
它本质上是一种编程 语言，但对于数据库。
而对于现在的数据库，只是 认为作为一个超级花哨版本
Microsoft Excel或谷歌的 电子表格，或Apple数字。
这通常是一个程序，允许 您存储一大堆数据
以行和列，相当 就像你可能在Excel中。
>> 但是，什么是好的，特别是当 我们不是超级熟悉的Excel，
什么SQL允许你做的是查询本 通过编写代码行信息
在那里你可以，即使你的 数据库有一百万行吧，
你可以找到的东西超级快。
事实上，Excel是特别 坏的大型数据集。
而事实上，高达几 年前，横空出世
Excel中只允许你存储 最多65,535行其数据 - 的
听起来很多，但在 那时候我是个研究生，
我记得绊倒 这是因为我正在生成
CSV文件，我的研究，我 想快速分析它们
由刚刚开放在Excel中。
当然，我的电脑正好死机， 因为我有超过65,000行。
>> 但做了65,535来自哪里？
什么是微软在做，大概？
如果你是好与你的两个大国？
是的，他们使用的是16位 值来表示的行号。
而二至16 65,536-- 上下一心，因为如果你
零指数意味着是 大部分的行数，我可以有。
而这只是一个设计决策。
通过保存16位，他们限制我 16000行不是4十亿，
我可以有理想的。
但现在，我们要 介绍这个更在网络环境。
什么是好的关于SQL的是，即使 虽然它是非常强大的，漂亮
复杂的，它真的沸腾 下降到四键操作，四
关键的功能，如果你will--选择， 用于检索数据，搜索
数据;删除或删除数据; 插入的行添加到数据库;
和更新。
所以，如果你曾经使用过谷歌 电子表格，苹果的数字，微软
Excel，您已经执行， 最有可能的，所有的
这些操作作为一个人受 只是用你的键盘和mouse--
插入数据，用你的眼睛 选择或搜索的数据，
或更新数据或删除数据。
>> 所以，这是什么意思？
那么，预先安装在CS50 IDE是一个名为mysql程序。
这是一个自由的，开放源码 数据库是超人气。
实，例如，使用它来此 天，其中，它们使用其他工具。
而很多非常受欢迎的网站使用 这在很大程度上是因为它的快速，
因为它是免费的。
虽然的确存在替代品。
而有些人可能有玩水 替代品的最终项目。
>> 这是一个屏幕截图，同时， 一个基于Web的工具，称为phpMyAdmin的。
这是一个巧合， 这个基于Web的工具也是
写在一个语言，PHP， 但它的意思做
是给我们一个基于Web的 接口到数据库。
由于MySQL通常是 东西，从历史上看，你
也只有互动 使用命令行。
这将是超 讨厌和奥术有
键入文本命令来选择 数据，插入数据和删除数据。
所以有些人在互联网上 写了一个基于Web的程序
这只是让我们管理 在我们的数据库中的数据。
这就像双击Excel和 其运行的基于网络的版本。
>> 你要怎么使用它进行 最终在下周，而不是在对组六，
但要建立的东西 所谓的CS50融资，这
将有一个数据库 用户，与用户名和密码，
美元数额，他们 在他们的银行账户。
这将是 是你用它来存储
的符号和数量 个股用户
已经使用虚拟购买 美元，你就会给他们。
而这将允许用户 注册为您的网站，
所以，即使你的朋友 可以调整到您的网站
而实际注册， 登录，和玩
并试图找到故障代码， 并试图找到您的网站的错误。
他们会简单地注册通过 加入自己，有效，
通过代码编写到数据库。
>> 例如，这是一个快速截图 一个什么样的数据库可能是什么样子。
这是从一个 去年solutions--
这就像一个小型的Excel 文件，存储在数据库中，
存储在该软件名为MySQL的。
在左边，我已经很明显 给出的每个用户的唯一编号。
在第二列中，我已经给 人人用户name--我自己
其中。
和在右手侧， 我已经给了他们一个哈希值。
>> 现在，这实际上是一个密码， 但它不是一个纯文本的密码。
这是一个加密的密码，如果 你愿意，或哈希密码。
我们将回来不久。
>> 但是，如果你读过 有关如何文章
您的密码在某个银行或者一些 网站可能受到了侵害，
它一般意味着两件事情之一。
因此，这是六个用户只是摘录。
在座的各位，现在自己看着办 出通过黑客或破解
就是我们六个人的密码。
但是，如果你收到 警报或道歉
从公司或网站上说， 对不起，黑客闯入我们的数据库，
你或许应该改变你 密码，可能是什么意思？
>> 嗯，一，可能意味着 公司一直比较鲁钝，
并已存储你的密码 在这样的专栏，未加密的。
这意味着对手， 谁偷了数据库，
从字面上知道您 用户名和密码。
这是最差的情况。
正如你会在P-集看 七，所以容易避免。
绝对没有任何借口了 愚蠢的在今天的网络形式。
Two--，我们会发现一些文章 作证的事实，这仍然
情况发生，nonetheless-- 二，也许是对手
偷了这个版本的数据库。
这仍然是有种不好的，因为现在 他们知道，我有六个客户，
我知道用户名 这六个客户，
我知道的加密 版本，或散列版本，
的那六个客户的密码。
但是，任何你谁可能 完成了 [？黑客2？]
在那里你破解密码，或把 一看那个版本的问题
集，为什么还是有点令人担忧 如果攻击者知道你的哈希
密码？
>> 听众：因为他们可以 进入整个字典
入散列函数。
如果你的密码是一个字典 一句话，[？他们可以match--？]
>> DAVID马兰：没错，对手 可以只写代码，就像你们中的一些
没有为[？黑客？] 2， 因此你遍历
所有的在字典中的词语， A或所有可能的组合
到Z和一个通过nine-- 这听起来好像很多，它是。
但对于一台电脑， 这是相当不错的快。
而事实上，这是 点[吗？黑客2，η]为
取东西， 从字面上看起来像这样，
和反向工程 它实际上是什么。
>> 因此，我们将看看我们如何能够 更有效地存储这一点。
事实证明，幸运的是在MySQL中， 那里将是数据类型。
而有趣的部分约一个 数据库设计，说实话，
实际上是决定自己 你应该如何表示数据？
如果您代表电话号码 一个int，像一个巨大的数字，或长？
或者你真正做到这一点 作为一个字符序列？
并且可以有很 这种非平凡的影响。
>> 事实上，人们的 最早的，好玩的锗的故事
是当马克·扎克伯格正在建设 Facebook的，它最初写成，
仍然主要是用PHP写的。
而其中最大的挑战之一 他们早早就被缩放面对。
当他们不停地之后加入学校 学校放学后，据我所知，
原始的解决方案之一 基本上是复制和粘贴
一些数据库的 和一些代码，
使哈佛 其自己的服务器上运行，
麻省理工学院在自己的服务器上运行。
这就是为什么，对于一些 你们谁可能还记得，
你可以没有朋友 在其它网络。
>> 你可能根本不具备的朋友 麻省理工学院或哈佛10年前左右，
但你不能跨越网络 对于部分的原因。
而对的最大挑战之一 马克和Facebook这样的公司
实际上是处理数百 和千千万万
每秒请求。
所以这个事情我们将开始 说起这个星期
真的会是有密切关系的 编写好的软件和普遍
成功的工具， 能够处理大量的用户。
>> 因此，我们将讨论有关事项 像索引和搜索，
但它是今天。
我们会看到你更多的周三。
>> [MUSIC - “宋飞正传”的主题]
DAVID马兰：你可以 它，并减去它。
你不必坚持 一些预定量的存储器。
那么，什么是将要叫什么？
>> 扬声器1：哦，这是怎么回事？
扬声器2：你是什么意思？
他给一个讲座。
DAVID马兰：我们可以用一个 函数调用的malloc到memory--
>> 扬声器1：为什么不是他的怀里动？
>> 扬声器2：嗯that's-- 你知道，这是正常的。
这就像他刚才 大香肠挂在那里。
>> 扬声器1：这是正常的？
>> 扬声器2：是的，我想我们 只是假设他意外
取代他的除臭剂与强力胶。