[音乐播放] 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:是的,我想我们 只是假设他意外 取代他的除臭剂与强力胶。