[Powered by Google Translate] [8]周
[DAVID J马兰] [哈佛大学]
这是CS50。[CS50.TV]
>> 欢迎回来。
这是CS50，这是开始的第8周。
本周一对夫妇的机会，
他们在这里说，在一些食品供应。
欲了解更多详细信息，检查出在线的幻灯片。
也由自己的托马斯Carriero的另一个事件本周。
他是一个CS50的前负责教学研究员谁现在是在Dropbox的，
他的家伙迷上了，你也知道什么，
因此，如果您想了解更多的到他们的谈话，头今天下午Dropbox和更多。
CS50午餐是这个星期五。
你加入我们，如果你有能力，1:15，像往常一样，在火与冰。
>> 现在，我们深入到一些所谓的研讨会。
我们的CS50研讨会，召回，这些选修课程的教学研究员领导
和课程助理和朋友的过程中，
从一组在校园里的人，这是一组被称为ABCD
技术爱好者，在校园里，以及一组名为HCS，
哈佛大学计算机协会，本科生同样感兴趣计算的。
今年的研讨会名册，包括研讨会上Android和iOS和JavaScript
和PHP，UNIX，Vim的多，所以认识到，这些研讨会都上来了。
如果你想RSVP，他们前往该网址那里。
然后，我们将发布在本课程的网站，一旦他们确定的时间和地点。
但是要知道前研讨会的有5年的价值可在网上，
其中有许多是非常大的电流的技术，你可能
要玩你的最后的项目，所以头上有一些影片。
>> CSS，你已经熟悉CSS，
什么是它概括？
什么是CSS？
它的级联样式表，这是什么意思呢？
这是什么做对我们来说，CSS？
好吧，让的热身一个简单的，HTML超文本标记语言。
为我们做什么？
任何人在吗？
它变得非常尴尬的问这些问题。
HTML超文本标记语言。
是吗？不是吗？
[听不见的学生反应]
好了，好了，让我们来标记文本显示在Web浏览器。
这是不是一种编程语言。
的确，这是一种标记语言，这意味着它指示浏览器如何显示
信息，所以最简单的化身，因为我们已经看到了
是一些超级简单的像加粗，开放式支架B右括号说
使这个文本加粗，而这实际上只是许多方法之一
中，我们可以做到这一点，确实，这些天来一个更好的办法
风格化您的网页，使事情粗体和斜体
中心和合理的，不这样做仅仅通过HTML标签
而是用了一种叫做CSS，层叠样式表。
这是对自己的语言。
它也不是一个编程语言，但
大家好，这是丹，参加我们今天的。
一些技术上的困难。不是一个问题。
>> 让我们的样式CSS的页面
通过设置被称为属性，所以让我们来看看这个
由一些基本的实施例的方式。
让我进入今天的家电。
我在这里源周一目录的，
我会去到一个目录中称为CSS，我们有一大堆
在这里等待着我们的文件，
在该文件夹中，我们有，例如，search0.html从最后一次。
现在，回想与搜索0，我们留在本附注
通过排序的实施谷歌还是真的只是它的前端，前一个星期左右，
注意到，我们有一些新的标签。
我们有一个大的，大胆的标题H1，
形式，这使得我们有一个HTML表单的用户输入。
行动的action属性，究竟是什么含义
在HTML表单标签？
这一点，行动的意义是什么？
我就这样做。
行动的目标是到哪里的形式将被提交。
事实上，说“google.com /搜索”
意味着，当用户单击提交按钮或等效
任何形式的字段填写的将被发送到我们​​的服务器
我们的设备，但在谷歌，而该特定URL。
要使用它的方法被称为，
而得到的，就目前而言，仅仅是一个技术传递到Web服务器的信息，以及
通过URL的方式，让我们快速浏览一下这是如何工作的。
>> 请注意，有一个输入其名称为q
其类型是文本，然后类型提交的第二输入端
它的值是CS50的搜索，而事实上，如果我们打开这个文件，在这里，
sea​​rch0.html，这是一个超级简单的形式，
如果我搜索的东西，如计算机科学
然后按下回车键或点击CS50搜索
注意，会发生什么情况超出去谷歌
我特意结束了在这个URL在顶部，
google.com /搜索Q =电脑+科学，
计算机科学显然是我所输入的字词。
+只是意味着一个空格字符，
它的浏览器，以确保公正，有没有
在实际的URL的混乱和空白。
那么q，当然是参数名称。
我们还没有看到我们如何，程​​序员，实际上可以进入Q还。
我们可以假设，谷歌知道该怎么做在这里，
但我们会在适当的时候。
>> 但是，让我看看，而不是在search1.html，
看起来有点不同，因为我决定，这种形式在这里只是有点跛。
我的意思是，这是在左上角。
真的没有美学，所以我想的样式
有点像谷歌的网页，召回，
即使你可能经常不能访问，今天看起来是这样的万圣节。
而如果我们打开这个文件的第1版，搜索1.HTML，我中心。
不过很丑陋，但至少现在我已经开始控制此页的美学，
不只是标记物。
让我们来看看在搜索，而且也真的只有一个区别就在这里，
这可能跳出你，也许不是，
但什么是一条线或片段的差异呢？
>> 这种风格的属性，所以，在HTML
大部分元素，大部分标签上的样式属性，
在该样式属性是带引号的字符串，
而且引号的字符串是CSS。
在那里，你可以把级联样式表
通过指定它作为属性名
其次由一个冒号后面的值。
几年前，这是一个不幸的设计决策
CSS是你们自己的语言，
但是从HTML语法上是非常不同的。
在这种情况下，我们可以看到，我的网页上的内部，这是写在HTML中，
我有CSS里面的这些报价，并约定CSS
是，你有什么所谓的财产，其次，再次，一个冒号，
其次，物业的价值，所以也没有等号。
有没有额外的报价。
只是这个冒号分隔的键值对，
文本行不正是它说。
它在体内的页对齐文本，这是真正的胆量的页面，
在中心。
>> 好了，那么，最终的结果是明确的，是这样的。
不是所有的性感，但至少它为中心，有点像真正的谷歌。
但是，如果我不是打开第2版
并指出在这里完全一个新的标签？
现在，在我的网页的头，这在以前只有标签
在所有先前的例子吗？
它只是有这个称号。
刚才的head标签是这样的。
现在，而不是它有它的style标签内，
这也太，我很抱歉，语法看起来非常不同的（HTML）
但你习惯了它，据此，里面的风格标签
我现在可以分解出是刚才
一个属性，样式属性，我可以把它在我的网页的最顶端。
>> 为什么呢？
那么，这是一步步走向清洁的东西，就像在写C代码
我们有时会写功能分解出常见的功能。
这只是一个小的清洁剂开始分解出的东西，如美学
到一个中央位置，而不是它的所有点缀在你的HTML。
这也没有说什么，即使有一点新的语法。
我们在这里可以看到，这是一个选择，身体只是意味着选择body元素
适用于下列属性。
好了，财产是完全一样的。
良好的措施，我添加了一个分号结束，
这往往是惯例，我已经包装全部财产
在大括号中，因为我其实可以有不同的东西在这里。
我其实可以说的东西喜欢的颜色：蓝色;
>> 现在，这也不会是一步步走向任何事情都漂亮，
但如果我现在回去版本2我至少现在我的身体
页的文本蓝色的。
保持不变，因为这是一个输入的按钮。这不是纯文本。
但一切是文本，像CS50搜索往上顶，其实是蓝色的。
同样，我们现在所做的是删除从body标签，通知，
的样式属性，我们已经考虑在这里。
这是不是一个巨大的进步，但是如果我们采取这一步
注意这里，我们可以在这第三个版本。
>> ，在search3.html的网页几乎是相同的
除非有什么新的标签，现在呢？
链接，所以这个人是不是很恰当地命名为
因为你不是在这个意义上的可点击的超链接连接起来。
相反，你排序，这样做相当于在C＃
其中的链接标签的href属性
rel属性说，继续
和复制的内容粘贴的文件名为的search3.css在这里，基本上。
它不这样做，但它的精神。
它说，去打开这个文件，search3.css，
和对待它，就好像用户输入了正确的在页面头部的
就像我在前面的例子。
同时，Search3.css，是非常简单的。
它实际上只是包含正是刚才
标签的风格，但我已经考虑它在这里它自己的文件。
>> 即使我们没有花太多的时间在所有的HTML或Web编程
只是凭直觉是什么动机，也许，以剔除
这个小片段，甚至CSS到自己的文件
然后包括它这个链接标签吗？
[听不见的学生反应]
好吧，这是在这个意义上，你有你的CSS CSS文件中的更容易阅读。
你有你的HTML在HTML文件中，所以在这个意义上，它更具可读性。
什么是吸引力？是啊。
[听不见的学生反应]
是啊，所以你就可以包括了很多次，所以现在我们正在做的这些
基本与单个文件的例子，但假设你实际上
pset的7或您的项目最终也许像你这样的一个真正的网站，
你想有多个网页，肯定是常见的
现实世界的资讯网络，这将是一种跛脚
复制和粘贴相同的蓝色
和相同的文本对齐的中心，每一个这些网页。
相反，它更有意义的因素，就像我们已经在C
h文件，把它放在一个集中的地方，
在这种情况下search3.css，然后允许任何文件
在您的网站，其实这个标签在第16行中包含该文件。
通常情况下，我们开始与版本0，哪种类型的作品
但不一定是最好的，和每一个步骤，
搜索1，搜索2，搜索我们已经采取了这些婴儿的步骤
向设计，是一个小更清洁，更准备
更复杂的页面，我们可以做的道路上。
>> 让我打开最后一个例子，在这里只是为了说明
更风格化的页面，但首先让我们来看看在HTML。
这是search4.html，并注意在结构上几乎相同
除了引入一个新的标签，DIV。
Div是一个标签，引入了一个师的页面。
你可以认为这是一种无形的矩形。
它的创建在网页中一大片区域
您可以设置样式的一次。
我在这里做了如下。
内我的身体标记，它一直在那里，一直以来，
我说在这里创建一个分区的页面通过线45到47，
这意味着，基本上是沿着页面顶部给我一种无形的矩形。
然后给了我第二次​​的矩形，但无形的，下面，
，并确定它的名字的内容，最后，
给我一个第三师的页面底部
叫ID。
我们将看到为什么我在短短的时刻已经做到了这一点，
但在概念上，我有一个头部门。
我有一个内容划分，和我有一个页脚的页面划分
即使这些都只是标记。
用户不会看到3个矩形，
但形式的结构有幕后
他们是实际存在的。
>> 现在，谁在乎呢？为什么要真正做到这一点呢？
一切在页面上是一样的，因为我们之前已经看到了。
这里是我的形式。下面是我的输入，我输入了一个换行符等等。
不过，这里有一个图像，所以我们会看到这个来自一会儿就好了。
这里有一个页脚，这是新的，只是因为我想介绍
一些更多的内容。
如果我们向上滚动注意到，这个div的ID是头。
这个div的ID是内容​​，和这一个的ID是页脚。
而作为顾名思义，当你有一个ID属性
在HTML中，根据定义，它必须唯一地标识
的元素之一，在您的网页的标签之一。
完全是你要记住，你已经有一个头ID的负担。
你有一个页脚。你已经有一个内容ID。
电脑是不会找出一个可用的ID是你的，
所以，你可能会意外地给2标签的ID的头，
这将是错误的。
>> 你必须记住，你已经创建了，
但一旦你这样做，我们可以在这里做什么通知。
我现在可以指定我的风格标签的顶部
或等价的，如果我在我的CSS文件中仍然使用该版本，
我可以说＃头，这是什么意思的是，任何标签
在这个网页上有一个ID的头
＃中，只需通过人的惯例，代表ID。
井号或井号代表ID。
头是我给它的名称。
这意味着应用此CSS属性
在此页面中的任何标记承担ID的头。
同样的交易在这里。
应用此属性的任何元素，而这恰好是相同的，
其ID是内容​​，然后在这里
请注意，我有一个小票友页脚。
任何元素的ID是页脚，其中可以有一个定义，
继续前进，其字体大小较小，
其字体粗细大胆的，其保证金20像素。
>> 这是什么意思呢？
它只是一个缘的顶部，底部，左侧和右侧上。
这意味着，给我一个20像素的无形的边缘时
一切只是推离它一点点，像你可能在Word中，
Microsoft Word或页面等。
然后文本居中对齐。
让我们来看看最终的结果，那么我们就回去了，这是剩下的CSS片段。
这是第4版，我们的搜索的例子，和它的多，更性感。
现在，为公平起见，我只是谷歌搜索“谷歌字体标识生成器”。
这让我创建一​​个GIF图像格式，它看起来像有。
事实上，你可以做到这一点。
我们有“谷歌字体标发生器”。
>> 让我们来看看，如果我们能做到这一点。
好吧，我觉得这是我所使用的网站。
例如，我们可以说，EC 10，和他们自己的。
你可以玩这个整天长，然后用鼠标右键单击它
然后下载实际的GIF，这是我做的这一切。
事实上，这就是为什么在我的HTML，回想一下，在这里
我有一个形象的标签，这是我们上周看到的
其来源是logo.gif的。
什么又是有这个alt属性的动机，
这种替代属性呢？
是啊。
[听不见的学生反应]
好，所以有2个原因真的，如果浏览器不能拉的形象
因为你有一个缓慢的网络连接或图像已损坏
或类似的东西，至少在人类可以看到“CS50搜索”，
然后还访问性的原因。
如果你有一个谁是盲目的，并使用屏幕阅读器的用户
，因此，显然不能看到图像，他们至少可以
如果他们的电脑说给他们听文本。
>> 在一般情况下，这是最好的练习，当它涉及到网页的可访问性
所以在这种情况下，即使用户可以听到或看到的，可以这么说，
它是什么，您的网页上。
还有一个其他的事情，我在这里做
这是一个有点有趣，我们会看到更多关于这个问题，设置为7
通过的教学研究员领导的短裤之一。
但＃的内容是指该标记
其ID是内容​​，但是有一个空格字符，然后有字的输入。
那么，什么是有趣的CSS，你可以
标签页面中的类的层次结构，
这是什么代码片段的CSS的手段是找到标签
其ID是内容​​，然后采用下列属性
的所有内容的后代的输入标签，
那就是它内部的缩进。
再次，压痕，唯一重要的计算机，不以人的，
但按照惯例，我们缩进的事情，因为我们去深入到一个页面，
因此，这意味着申请保证金的5个像素任何输入元素
这是某处内部或嵌套在
元素的ID是内容​​。
>> 谁不适用？
好了，其实只是这两个家伙在这里。
请注意，内侧的形式有2个输入，
因为可用于所有这些实施例的。
但是请注意，这2个输入发生嵌套在
虽然有点深，一对夫妇的缩进层次，
里面的标签的ID是内容​​。
这是什么意思呢？
如果我们去到浏览器，在这里你可以看到非常轻微
让我放大在按钮之间，有一个填充位
之间的文本字段。
>> 让我暂时把它们关掉。
让我走我的CSS，并让我继续前进，只是
改变这种保证金从5个像素为0像素。
让我走前面，然后保存文件，返回的搜索引擎
并重新加载，并观看页面中间的。
一切都压缩在一起了，当我第一次鞭打这个例子
我想，看起来愚蠢的文本字段，然后它下面的按钮。
我要垫那么一点点的，所以我介绍的利润。
我们不会做的是通过在课堂上的几十个
CSS属性存在，因为，有一些事情，如字体大小，
字体粗细，保证金，文字对齐，和几十个其他，
和问题，我们将请您在7到各种在线教程
和参考，让您选择这些东西。
但什么是真正重要的，在一天结束的时候
>> 了解如何应用这些东西。
同样，如果我们有style标签内的
可以去选择器的标识符指定
向谁你想应用这些属性，
然后你把键值对的属性
由冒号分隔，然后用一个分号结束，
或者您可以复制出来，并把它放在一个单独的CSS文件
你们自己。
所有的权利，任何问题的概念
或大图片的CSS？
你会再次看到更多的内容在pset中7，
但我们会保持它通常是非常简单的。
不是吗？好的。
这是一个实际的编程语言，
而我们再回过头来一点点的CSS中的一个例子。
PHP实际上是一个奇妙的易懂的语言
在于它是语法上几乎等同于下
换句话说，如果你知道，你知道的大部分PHP，
至少在语法上，即使有一些新的特点
一些新的概念，我们将不得不看。
>> 但在大多数情况下，现在我们从C过渡到PHP
最新的东西，是真正的大画面，
如何程序在网络上使用的语言，而不是
在命令行或在闪烁提示，我们已经做了迄今为止。
作为参考，特别是与pset的7和最终的项目开始，
不利用这个URL，在这里，如果你想读的PHP手续。
它实际上是喜欢一个免费的在线教材有效，
你还会发现，什么是真正好的关于PHP
是有数百功能，用它来，
而在C中，你并不一定有机会获得
更多的功能比的数学函数库，的CS50库。
在PHP和大量的现代语言，Python和Ruby，其中，
您可以访问那么多的功能，这意味着你写
少了很多的代码，因为你可以站在别人的肩膀上
已经写了一些你的东西。
>> 让我们快速浏览PHP的语法，然后写了几个例子。
什么是好的关于PHP的第一个和最重要的
有没有没有主函数。
如果你想在PHP编写一个程序，你刚开始写代码，
你不必担心主。
有没有诠释。有没有回报。
有没有ARGV ARGC，当你写的程序。
相反，您就可以开始编写代码，这是部分
因为PHP是一种解释型语言。
C的编译，它被编译在这个意义上，你开始
源代码，运行它通过铛，这是一个编译器，
并最终一些数量的步骤后，您可以在对象的代码，0s和1s。
PHP，Python和Ruby和珠江三角洲及其他
不同类型的语言，你不要把它们编译。
你不要去从源代码到0和1。
您只需运行的源代码，并且运行的源代码
写在一个普通的文本文件，在这种情况下，PHP结束
而不是C，该程序的功能在您的计算机上
从字面上解释是由一行行的代码行。
>> 换句话说，而不是写一个程序并运行程序
直接，你来写一个程序，PHP结尾的文件。
然后运行实际的程序中，名为php.exe的，如果你使用的是Windows，
或只是PHP的，如果你在Mac OS或Linux，
您提供的输入到PHP程序自己的源代码，
在生活中，其目的是阅读你的代码从上到下，从左到右，
，做任何你已经告诉它做的事。
>> 让我们来看看这是什么将意味着语法。
在PHP中，我们具备的条件。
这张幻灯片是你所看到的，在第1周
因为语法的条件下，如果和其他人如果和其他PHP
看起来正是这样。
当布尔表达式他们要去看看正是这样的。
当涉及到安定为布尔值，它会完全一样的东西放在一起。
开关看起来是一样的，你会得到额外的好处在PHP
在C，交换机只能打开一个char或int。
你可以打开一个字符串值。
在PHP中，你其实可以有一个表达
这是一个变量，其内容是一个字符串，
实际上，你可以做字符串比较在现实直观的方式，
没有指针的比较，以决定是否做的情况下，i或j或别的东西。
不久，我们将看到潜在的。
>> 循环过奇妙的是相同的。
For循环的初始化，条件，和一定数量的更新。
while循环，也存在于PHP。
DO WHILE循环也存在于PHP，
和数组存在于PHP，但这里的语法开始有一点不同的地方，
但其概念是相同的，和概念真的是相同的
因为他们是在第0周与划伤。
首先是$符号。
这是一个设计决定，PHP，任何变量
在PHP的设计从$符号。
有没有更多的X，Y，Z $ X $ Y $ Z只是因为。
这件事情要记住，现在的右手边
这看起来类似于数组，
但我们在这里使用方括号。
在PHP和JavaScript，因为我们最终会看到，
声明一个数组，你做开括号和闭方括号，
那么你有一个逗号分隔的值列表，无论是int型
或字符串或字符，你想要什么，里面的表达有。
>> 现在，怎么我们做这样的事情在C？
已知的数字静态声明一个数组的语法是什么？
这是大括号，这样微小的差别，但在PHP
并最终器的，它只是使用方括号，所以真的
唯一有趣的细节是$符号的变量名
方括号中，也有一个很奇怪的事情
被省略的，以及在左边的等号（=）。
缺少了什么，我们已经要求了好几个星期呢？是啊。
[听不见的学生反应]
的大小，所以这里没有提到的数组的大小。
坦率地说，这里没有提到的方括号的左侧
等号（=），还有什么缺少的行吗？
是啊。>> [听不见的学生反应]
的类型，有什么有趣的，特别是关于PHP
是，它是不是一个强类型语言，C是
强类型的字符在这个意义上，你必须说，
你必须说int，你必须说浮动。
>> 任何时候你想要一个变量，其类型是什么，你要告诉铛。
PHP是一个有点懒惰。
在这个意义上它是松散类型的，
你可以有花车和字符和字符串
和整型等等，但语言本身
并不真正关心什么，你把里面的变量。
您没有提前告知什么样的数据类型
在变量中。
这完全取决于你，所以这是很好的
，你不必担心，因为很多数据输入
和担心你的论点是什么，等等。
这也意味着最终PHP中的函数能够返回
无论是一个int的时候，也许曾经在一段时间内
例如，他们将返回一个布尔值，布尔值false，表示出事了。
这给了我们一些不相上下，但它也将使我们的设计
有点懒，当涉及到数据类型。
>> 还有什么在这里要记住的？
变量看起来很喜欢这一点，所以$ S =“你好，世界”。
这也许能推理从前面的例子中，
我们有另一种类型的循环。
这一次，我们将真正看到曾经在一段时间内，因为它是非常方便的，
foreach构造。
在这种情况下，foreach循环需要其括号中的3个字的内侧通常情况下，
美元的东西，这是你想要什么样的阵列遍历成员，
然后字面上的关键字，然后最后，
另一个变量的名称，你可以选择。
它可以是富，酒吧，或元素，
这是什么结构并
如果阵列包含10个元素
在每次迭代这个数组对不起，这个循环在每次迭代
变量称为元素将被更新
成为第一个数组中的元素，那么第二个数组中的元素，
然后第三个元素的数组，从而无需
做的有点恼人的方括号和
$我为了到一个数组中的索引。
PHP做所有的工作，并在每次迭代
只是手从数组中的下一个元素
没有你不必知道或关心它的数字索引位置。
>> 最后，就目前而言，还有另外一个功能的PHP
这将是巨大的，特别是当我们在网络上开始编程，
而这被称为关联数组。
因此，我们知道的阵列为20秒前
在过去8周的数字索引数组，
传统的阵列类型的指数是整数，
0，1，2，所有的方式上升。
关联数组功能更强大。
他们让你有任意键，
任意指数和任意值。
而在传统的阵列，它是0，1，2，
在一个关联数组，你可以有一个指数
foo的一个关键，它的值是酒吧。
然后，您可以有另外一个关键的名字是巴兹，其值QUX的。
>> 同样的，愚蠢的计算机科学通用的变量名，
但问题是，这个数组没有支架0或支架1。
相反，它会，有支架foo和支架巴兹。
这是一个很大的通用性，我们将能够联想到的
与其他词的话，完全任意键的值，
我们将是能够得到这些值在固定的时间
因为引擎盖下的一个关联数组
真的是一个哈希表。
回想一下，一个哈希表，可以让你把一些输入
喜欢把中的单词大卫，如果你要插入到某种字典大卫，
然后你会得到一定的价值一般。
拼写检查的情况下，真或假。
大卫的字在字典中没有的。
一个关联数组，其实只是一个哈希表，
但它是一个更加用户友好的化身。
正如我们将要看到的，这将允许我们做一些事情
非常，非常容易。
>> 让我们来看看一些基本的PHP
例子，看看我们能做些什么这门语言。
让我去进取，不断开拓今天在我们的源代码目录
一个名为hello1.php。
这个文件是更多的评论比它实际的代码，
因此，让我真正从文件中删除所有的评论
和现在的你也许是最简单的PHP程序在这里。
5条线，并且其中一些是白色的空间，
所以在这里发现一些关键的差别。
该文件称为hello1.php。
不过，第一行，<？PHP。
类似的精神，HTML，
该序列的字符告诉计算机
“嘿，计算机，来我们在PHP程序。”
它可以确保它不会混淆，它的一些其他语言。
2号线是一个有趣的空白。
printf的第3行是我们的老朋友，
这时候在PHP的背景下。
PHP有它自己的版本的printf的行为完全一样的，
因此，这只是要打印“你好，世界”。
然后此相反的标记在这里，>，这意味着这是我的PHP代码。
>> 让我们来看看如何运行。
我要回到我的终端窗口。
我要进入​​我的PHP目录。
请注意，我们有一大堆的文件，其中第一个是hello.php的。
让我继续运行，hello1.php，进入。
权限被拒绝。好吧。
我们是如何固定的像这样的事情在过去的？
那是什么？>> [听不见的学生反应]
我们需要读取和写入，但让我做的ls-l。
记住这个有点神秘的输出，此处为Hello1
似乎是可读和可写的我
但其他人可读的。
事实证明，这实际上是不正确的方向前进的一个步骤。
一种解释型语言差异，再次与
你不要直接运行程序。
你，而不是一个翻译，把它的代码
你写的，所以它可以解释一行行。
在这种情况下，解释器或程序，其实我是想运行
是真正的PHP。
>> 这个设备的硬盘驱动器上的某个地方有一个程序
别人写PHP，或在Windows下的php.exe。
我要在这里做什么是我要实际运行PHP
但将它作为命令行参数，我写的代码，
，然后我会放大并按下回车键。
对我来说，它运行我的程序，从上到下，从左到右。
让我去进取，不断开拓一个略有差异。
在hello2.php通知，这太
主要是注释，所以让我摆脱这些作为一种消遣，
什么明显的不同有关此文件吗？
这种新的生产线，在顶部略带神秘的。
在第1行是＃！/ bin中/ PHP。
斌是一个约定，Linux和Mac OS二进制文件，
/ bin中表示这是一个文件夹，其中包含了一堆二进制文件
被编程的，其中之一是PHP。
＃！绰号家当，
这是说，它的快捷方式，这是什么意思
是，当你运行这个程序，现在有一个提示，在该文件的顶部
告诉计算机使用什么样的解释。
>> 它变得有点讨厌，如果你要告诉你的用户和您的客户
“嘿，我们写了这的程序称为hello1.php。”
所有你所要做的是永远运行PHP，然后这个程序的名称。
坦率地说，它只是更好的运行hello1.php，
而事实上，我们可以的，如果我们做以下。
让我继续做ls-l的通知hello2它仍然只是读写
，然后看了看了，所以我也还没有做到这一点，hello2.php。
但是，我们推出了这款非常简要地最后一次，chmod命令。
如果我不改变存取权限chmod a + x，这意味着所有的加可执行，
然后hello2.php，然后执行ls-l的再次注意到有什么改变。
一，Linux是显示我的文件名绿色传达的理念
，它的可执行文件，但更重要的是，在左手侧
注意到位代表x为可执行文件现在已经被设置。
这意味着现在是我可以运行./hello2.php的像往常一样，
点击进入，因为在最高层的文件的家当
这是一个提示，再次，Linux的说
使用这个解释器来运行这个文件。
不要担心迫使用户输入。
>> 什么是好的，现在是它的一种不相关的我的客户还是我的朋友
什么语言，我写了这个程序，这样我就可以继续使用mv
hello2，例如重命名这件事情。
现在，如果我做./hello2
放大了我的程序继续运行。
这些文件的扩展名是一个人的约定，这是必要的
为类似铛，寻找他们的。
但对于PHP，我可以打电话给这个文件扩展名我想要的任何东西。
我想，我真的很不错，在红宝石欺骗世界，
我可以写hello2.rb，然后运行它，
瞧，现在我的Ruby版本，这是一个彻头彻尾的谎言。
但是，文件扩展名是没有意义的
如果该文件是可执行文件，并在该文件的顶部，有这样的特别提示。
>> 现在，顺便说一句，让我告诉你很快第3版，
这是一个有用的技巧，知道排序。
，在hello3我做了一些错误
我会在线更新的源代码。
在第3版事实证明，在大多数的Linux电脑
有一个程序叫环境对环境，
你可以在这里做的是，如果你不知道PHP
安装在本地硬盘驱动器，因为它的确可以在电脑上根据
有人正在使用，ENV只是说运行环境，
这是在大多数系统上，并找出其中PHP是。
只是一个普通的伎俩，以便找出其中一个方案是，你不必担心。
但是，如果你做护理，找出程序是，你不关心迄今
你可以使用命令。
>> 让我放大和类型，也就是PHP，
并注意到它告诉我，它实际上是在usr / bin中/ PHP。
这是一个谎言。这也是在垃圾桶。
这只是我的第一击。
如果你想知道在Clang的是，这，这是在usr / bin中/铛铛，
使usr / bin中/，而这一切是什么意思
你可能会被输入usr / bin中/铛铛进入运行，
但它是一种单调乏味的做到这一点，所以一些文件夹
像usr / bin和垃圾桶都被假定为默认值
这样，计算机就知道给你看。
写一个超级，超级简单的Hello World程序的任何问题
在PHP中，然后运行它呢？
因为现在我们将开始推出更具吸引力的语法。
好吧，我们开始吧。
这些计划中，我们实际上已经看到了，所有的人前。
>> 如果我打开了，例如，让我们做beer1.php，
我们不会去通过几个版本的，但我做了什么
我坐了下来浇或转换
我的C代码PHP代码。
大部分的顶部的文件是留下在这里。
原来，有一个新的功能，我们需要调用的ReadLine。
GetString的，回想一下，从0周开始，一个CS50事情。
PHP中有其自己的用户友好的功能的ReadLine
需要1个参数，该参数指定的提示
要显示给用户，和什么的readline
它返回任何用户键入的
在这种情况下，我声明了一个变量名为$ N。
我存储在它的返回值的ReadLine
后提示用户使用此字符串。
只要备份，以实际运行这件事情，让我继续前进
并运行php beer1.php。
会有多少瓶？让我们只是做这一次。
输入。这就是全部。
>> 从数周前的C版本的程序在功能上是相同的。
但语法让我们来看看有什么不同。
之后，我得到一个int从用户的通知，我做了一些错误检查，
如果n小于1，我退出，我打印出来
一个遗憾的消息给用户，并在退出时1。
这也是有一点不同。
在C语言中我们做了什么？在C语言中，我们返回1。
在PHP中退出，1，坦率地说，我认为一个更直观一点
因为你从字面上退出程序。
好吧，然后在这里讨厌的歌曲是相同的语法
除了变量，这样下来在这里24日起
注意到我的for循环几乎是相同的，
但我在前面的i和n，
什么也缺少从第26行，我们已经在过去
声明变量时我吗？
有没有类型。
这是不正确的PHP说诠释。
你根本不需要做到这一点。
计算机，解释PHP是明智地意识到
如果你把一些在我会把它
你的号。
再往下这里我们插在我，我，我 - 1。
所有这一切都是一样的，然后在这里做了一个“哇，这是恼人的”printf
然后退出（0）。
>> 同样，这里的外卖是，即使我们要花费比较
PHP的一点时间，肯定对我们所做的对C，
这几乎是一样的，所以我们要做的今天和下周
超越是真正关注一些新的想法。
刚才看到另一件事情并翻译从C，
这是一个超级简单的程序，我们在第1周
或2的立方的值。
但是，什么是这个程序的时间大约是有趣的，它
介绍了一个自定义的函数的概念，我们自己写的。
PHP中的语法几乎是相同的。
下面是我的程序往上顶。
请再次缺席是主任何概念。
我开始编写代码，这是要被执行的解释。
我打印出x为2，据推测。
然后，我要求刺...
然后，我所说的多维数据集函数，并通过在$ X
的返回值分配给$ x。
然后，我要求它的立方，然后我这样说，它希望
会说x是8。
PHP中的函数的语法是以往任何时候都略有不同。
再次失踪的返回类型。
再次失踪的返回类型，还缺少什么其他类型吗？
[听不见的学生反应]
好吧，好吧，这是很好的。让我们回到在第二。
>> 我们不具备的，例如int在这里。
例如，我们不有int，又因为在这里，在PHP
你根本就没有必要，不应该这样做，
而是有一个新的关键字调用的函数。
在PHP中，它几乎是一个更清楚一点，因为当你想要一个函数
你从字面上说功能时，你给它一个名字，然后以逗号分隔的列表
如果它的任何参数。
不用说无效或类似的东西，然后返回是一样的，
$ * $ * $。
什么也没有？森指出这一点在这里。
在完全没有在PHP文件的顶部是一个原型。
这也是设计。
PHP等语言和口译更聪明比C是
像铿锵的编译器。
>> 回想一下，铛，如果你不告诉它的立方体存在，
如果你不告诉它输出的原型存在
或使用的＃include，好了，这是要骂你的，而不是编译你的代码。
PHP和更现代的语言有很多聪明的，当它涉及到这一点。
他们将承担起自己阅读你的代码
然后骂你的，只有当它发现立方体无处。
它并不重要，如果立方体是在底部或顶部，或什至在一些单独的文件中。
PHP和类似的语言足够聪明，现在，放眼未来
在之前的所有字句认为你犯了一个错误。
在什么地方离开我们吗？
>> 让我们做最后一个例子，这里的条件下，
如果我打开了conditions2.php通知
语法在这里几乎是相同的。
我使用readline，而不是GetString的，但该行是一样的，
“我想请一个整数。”
然后，我有一个if条件，否则的话，然后一个else，
但在功能上，这个程序也是相同的，我们所做的几个星期前，
所以，如果我遇到这件事情，php的conditions2，
我给它一些像23 -
我选了个正数。如果我给它-1我挑了负数。
如果我给它0我确实拿起0。
那么，谁在乎这一切吗？
好了，其中一个在这里练习的乐趣排序
至少对我来说是回去看看的速度有多快，我可以实现的pset 5，
拼写错误pset中。
回想一下，有这称为speller.c的文件，
有一个名为dictionary.c。
我所做的是我种的花了几分钟，我的C代码转换
PHP代码，我们不会花太多时间在拼写检查
因为就像在pset中，你也没有真正需要
拼写检查器本身上花太多的时间，因为你的注意力都集中在词典。
>> 我只想说，如果你读通过的拼写，
这个文件在这里，这几乎是等价的C代码
我们给你的pset 5。
我只是增加了一些的地方。
我已经改变了某些函数名，如果他们不存在于PHP。
这里还有一个额外的东西，preg_match，
这是一个小票友的做事方式，但我们会回来的，最终。
但在短期，拼写检查器是几乎相同的，如果你看的最下方
它最终吐出的是，在这里，
拼写错误的词，词语的词典，词汇文本。
好了，现在有什么有趣的是下面的。
在我的文件顶部的，我要求dictionary.php。
正如C＃PHP有一个特殊的函数调用需要
这几乎做同样的事情，需要一个名为dictionary.php。
我该如何去实施的pset 5？
让我继续前进，在这里打开了一个文件。
让我在这里需要一点参考。
让我创建一​​个新的文件，并开始调用此dictionary.php。
让我把它放在另一个文件夹，所以我们可以做这个活。
我现在就放大。
我要开始我的PHP文件，开放式支架PHP关闭支架。
然后在这里有几个功能，我需要实现的pset 5，
所以让我开始实施其中的一些，
功能检查，其中有一个字作为参数。
我们将做到这一点，它在某一时刻回来。
>> 函数作为参数，负载了什么？
字典，所以，我其实是想加载的文件。
有功能的大小，但不带任何参数
有功能是什么其他的吗？
卸载，不带任何参数。
这是4，我需要的功能，现在在PHP中实现，
我什么都做的是继续这样做。
很多你使用一个哈希表中的pset 5，
所以，让我继续前进，在PHP中创建一个哈希表。
完成。
这给了我一个哈希表。好了，为什么呢？
一，变量名为$表，只是想起了一个哈希表的想法。
不过，方括号，记得，代表什么？
一个数组，但是在PHP数组不具有数字索引。
它们也可以是关联数组，
这意味着你可以有任意键和值。
>> 就像在pset的，那些你谁做到了哈希表的实现
你可能插入的字，然后将其插入链表链，
或者你存储的价值，真正的某个地方或东西的效果。
你莫名其妙地想起了事实，这个词是有。
就目前而言，那将是我的哈希表，
所以现在去实施检查功能，
我只需要看看里面的那个哈希表
如果有一个字是有。
我要的是我说的话，
让我们使用isset，这是一个PHP函数，从字面上的意思只是说是关键的设置，
所以使用isset（$ [$字]
如果是的话返回true。
就是这样。这是pset的PHP 5中。
那么，在公平，好吧。
否则返回false，所以它不存在。
到底发生了什么吗？
好了，如果表或哈希表一般
是一个关联数组，这意味着你可以索引
用一个词像“字，”你要回去一定的价值。
>> 我们是种让自己领先一步。
这将是一种不错的，如果我们实际加载的文件的第一个，
所以负载是不是很简单，但让我继续前进，掀起
一个真正快速实现负载。
让我继续前进，说的话获取文件字典。
在PHP中打开一个文件，该文件的功能
并返回给你一个数组在该文件中的所有的话，
只是手给你。
这是一个很大的痛苦，不是吗？
现在的foreach，这是我们的新的结构时，foreach（$美元的字的话）。
要开始这个循环遍历数组的话
并分配给变量$字在文件中的每个字
从第一到第二至第三到第四的所有方式
所以我没有做恼人的[]符号等。
我简单地做了这些字
是我的表，它存储在索引到表
，然后做真实的，因为要记住
一个字是在我的字典里，所有我真正要做的
种翻转了一下，说这个词在我的哈希表是存在的，真实的。
如果它不存在，我没有明确地把假，
否则，在宇宙中所有可能的话，我不得不把假。
>> 总之，对我来说只是设置了索引值
如果有一个字实际上是在我的哈希表。
现在，我切割的角落，在这里，我要挥挥手，现在，
但现在负载的功能就完成了。
我到一个数组中，从文件中加载所有的话。
我遍历超过该阵列，阵列中的每个单词
我将它插入我的哈希表的一行代码。
这很有趣。你知道我们现在可以实现规模吗？
，大小总是很容易的，公平的。
在这里，我们就可以返回计数表。
这是很容易的事情，数一数，在表中。
这实际上是一种不是最有效的。
我也许应该有一个变量的大小，因此，我们可以做到这一点
在固定的时间，但是这是很容易的。
哦，然后卸载，如果我们真正想要的是肛门
我们可以说，这就是你如何卸载的东西。
你刚才设置的变量等于一个空数组，
和摆脱一切有。
无需拨打免费。
>> 同样，我已经削减了一些角落，和我道歉分配问题集
也许在C，但如果我们现在去继续运行，
我要以实际运行的版本，我写了提前
只是让我没有做任何任何语法错误。
让我继续运行拼写检查器。的使用是相同的。
这是一本字典文件，该文件只包含单词富。
这里是一个文本文件，其中只包含foo的酒吧。
让我们这一点，所以拼写检查拼写检查，使用这本字典文件，这个文本文件。
有拼写错误的单词，酒吧，和瞧。
完成的pset 5。
在这里，让我们有5分钟的休息时间，我们会回来更多的PHP。
好了，我们又回来了。
让我们不恨我了一会儿。
现在让我们来看看这是不是一个积极的
这件事在实际执行PHP。
当然，它花了45秒来实现。
>> 但是，让我们继续和运行的东西。
让我继续运行的C版本
拼写检查，和我们将上运行它的一个最大的文件，
这是国王詹姆斯圣经。
这里是在让我们进入我们的C文件夹，
国王詹姆斯第5的拼写上。
很多拼写错误的单词。
好的，那么你很可能得了即使有一点不同的输出，
如果你把一切都正常工作，所以总的时间进行拼写检查
在国王詹姆斯圣经“是0.38秒，相当不错的，所以使用该实现。
现在让我到PHP版本，这是我们刚写。
让我跑的拼写国王詹姆斯。
哎呀，忽略这个错误。我在错误的目录。
国王詹姆斯第5的拼写上。
差不多完成了。
>> 好了，精明的观察者会意识到这是3秒以上，有。
这是真实的运行时间。
事实证明，它需要时间来吐了大量的文字
由于缓冲的问题，但长话短说，
的加工时间为3.15秒，CPU时间，
与刚才又是什么呢？
像0.3。
我的意思是，这是一个数量级的速度较慢，所以在哪里
可笑的放缓从哪里来的呢？
好了，因为一直的情况下，几乎所有的设计决定，我们已经取得了
在过去9周中的类几乎总是权衡。
有时候之间，有时只是空间之间的空间和时间，
空间，时间和开发工作，并确实在这里，即使
我们节省了大量的时间，可能有潜在10-20-30小时
实施拼写检查器的开发时间
通过鞭打，这种语言在短短45秒
我们付出的代价是，它是慢了一个数量级，
这是一般的情况下与大多数任何解释语言，
PHP，Python和红宝石，珍珠或其他人据此
如果你要运行它通过翻译和阅读你的代码
一行行，从上到下，从左到右，
，中间人会采取一些自己的时间，
和你的感受是什么在3秒到0.3秒，而不是
是的事实，这是中间人，从字面上理解我们的代码
一行行，但愿，如果你是内循环
一个巨大的文件，其中包含数十万字。
>> 的开销加起来，加起来，加起来，并添加了。
对于这样一个工具，它可能不是最好的语言，使用的实施
如果直接是一个拼写检查您的用户和你的兴趣。
但我们在某一时刻的奢侈品是，如果你
使用的语言，如PHP或有很多解释型语言
在网络的背景下，对于这个问题，你有益处
互联网是比大多数的电脑慢了很多。
您有在您的计算机上，2 GHz时，甚至更多，这些天GHz的CPU。
但现实情况是，在互联网上有一个高的延迟量
由此，对于浏览器到服务器，即使我们看到上周
这是相当快的，一毫秒的一半左右，
也增加了，而如果你下载的东西，如图像
或Facebook的照片或即时消息，Facebook的喋喋不休，
的Gchat或类似，所有的往返时间
之间的浏览器和服务器开始增加，
这使得在许多情况下，您的特定选择的语言
不是所有的相关的，因此你使用一个稍微慢的语言
如PHP或Python或Ruby
但有巨大的积极给您和您的同事
和你的朋友，因为你可以实现的事情，所以，如此之快。
此外，你有一定的安全缺陷的风险要少得多。
在PHP中有没有指针。
段有没有故障，你可以很容易地诱发
以同样的方式，你可以在C.
C，你是超级的硬件。
使用PHP和类似的语言，你是那种水平的提高，可以这么说，
你和什么之间有很多的防御实际上是怎么回事
在机器内部，它只是一个折衷。
>> 我们已经得到的地步，这些更现代化的，高层次的语言
像PHP，因为吸取的经验教训的语言，如PHP C.
但是，如果你不明白什么已经持续引擎盖下的所有时间
你肯定不能做出正确的设计决策，
当然，当它涉及到像Facebook或谷歌在一个地方工作
这些地方是越来越大的数据集
即使你回去做医学预科，并正与一些MD
在一些大的数据集，涉及患者和医生
如使用正确的工具是巨大的令人信服的
，否则你分析一些数据集可能需要几秒钟，
或者它可能从字面上需要几个小时。
这仅仅是一个例子，而不是阻挠你多少的努力，
这是在C，但帮助您了解，当你实现的东西在C
你真的理解，或在理论上，真正了解
如何一切都应该工作，你几乎完全控制
这是怎么回事引擎盖下的，并与这些高层次的语言
你必须放弃更多的控制权的人，是谁发明的
，并受到他们的设计决策比你。
但是，如果我们想当然地认为表现
是不是很重要的，因为这些问题在网络上，
只是网络速度比CPU的速度慢一点，无论如何，
所以我们可以排序，用得起一个稍微慢的语言
如果有利的一面是，我们可以开发的东西10倍的速度或什至更多。
>> 让我们来看看如何，我们就可以开始使用。
让我去到一个文件夹
在今天的例子称为frosh.ims，
这实际上是亲自动机的第一件事的事实，即
我写的Web年前后，CS50和CS51
是一个网站的大一IMS程序，大一学生校内运动，
这在当时，这是足以年前，当时
有没有网站的程序，即使是一个网络，
取而代之的是一个值日生威格尔斯沃据此，如果你想
注册排球或足球或任何你填写一张纸。
然后，您可以步行穿过院子。
在他们的门或监考官的手，然后，你会敲他们的门和幻灯片
在一张纸上，你的名字就可以了，你是否想成为一个球队的队长，
你你想要做什么运动，什么宿舍英寸
这是一个老同学的做事方式，这是一个主要
自动化这个过程中有很多的机会。
你刚才去的网站。您键入的东西英寸
您会收到一封电子邮件，确认和繁荣，就大功告成了。
>> 这是我做的第一件事，虽然在语言，称为珍珠，
但它是比较容易做的PHP，这是形式的代表
的问题，你就可以开始解决时，你可以表达自己的
编程和没有依靠的东西，如谷歌网站
或Excel或工具，就交给你了。
你们现在有能力做这样的事情。
这是一个超级丑陋的版本的一种形式，
但让我们只用它的谈话，这是开始
大概什么形式看起来就像几年前，我们
使人们在网站上注册为大一IMS。
我们要求一个名字，一个复选框，他们是否想当队长，
男或女的，然后他们在什么宿舍，
然后，他们将提交本表格。
让我们先来看看下面的罩在表示这个网页的HTML。
让我进入froshims0，
顺便说一句，pset中7，我考虑是理所当然的
我把事情英寸的目录和文件夹
我们将引导您完成的确切位置飘然而至，在家电，
国防部的命令，你必须运行的，所以不要担心所有的
愚蠢的详细信息同步，从一开始就在这里。
>> 好吧，这里的froshims0.php的。
让我向下滚动，有什么好奇的，
这是一个PHP文件，但它里面是什么，清楚吗？
这是一个很多的HTML，PHP的起源
真的是一个以网络为中心的语言。
刚才我们用它来实现啤酒的例子，
的条件，例如，你好例如，这很好。
您可以使用PHP作为一种脚本语言
脚本是真的只是一个快速和肮脏的程序给出的术语
什么，你写的脚本或更普遍的一种解释型语言。
PHP是超级有用的，因为你已经看到如何迅速
比较我们可以掀起的PHP程序。
但它真正目的是用于Web，
和设计为Web在某种意义上说，注意到在这里的文件的顶部
我开始<？PHP。
然后，我有一堆无用的意见，授予，但后来我关闭PHP模式。
但后来我下降到HTML模式。
>> 关于PHP有什么有趣的是，即使文件结束。PHP
它通常意味着要与HTML混在一起，
一些PHP代码，一些HTML。
我们最终会看到，我们就可以开始挑逗那些除了
，使我们的HTML独立于我们的PHP完全，
但PHP的起源真的是给你这样的灵活性，
如果你想一些HTML只写它，将是
吐出相同的浏览器。
但是，如果你需要一些编程技术，
一些编程的代码，你也可以把它变成完全相同的文件，我们很快就会看到。
这里是我的HTML。
我有一个标题为大一IMS。
我有一个body标签谁得到了它一些CSS中心在中间的一切，
然后在这里我有一个形式，这显然是将要提交
到一个新的称为register0.php的文件，所以我们会看到，在一个时刻。
它的使用方法后，我们会回来的，以及。
然后，我有某种形式的输入，一个所谓的名称，其类型是文本，
他的名字是队长，其类型是“复选框，
这一点，我们没有看到它之前，但它到底是什么说的。
你会得到一个复选框，而不是一个文本框。
在这里，你有一个单选按钮，这是那些圆形按钮
你可以选择这一个或那一个。
>> 请注意，这是故意的，我给了两个单选按钮的名称，性别。
这是你如何相互排斥，你必须按一下
无论是这一个或那一个，并点击
取消选中，所以你必须给他们同样的名称
如果你想它们是相互排斥的那样。
然后宿舍，我不认为我们已经看到了这一点，但它是一个选择菜单，下拉菜单中。
因为这是选择的标签。
然后，您可以在下拉菜单的名称，
然后你有一大堆的这些选项。
第一个，只是为了美观，是一个空字符串。
我只是想下拉列表中，默认情况下是空白的，
，然后有Apley，卡纳迪，灰色，等等。
注意到这里的二分法。
在下拉式菜单中的选项下有一个值，
但然后它有一个人类友好的名称，在该示例中
是相同的，但如果我们真正想要的是肛门，我们可以有
这一下降的价值下降只是短期的版本，
灰色，但我们真的可以说，人类的灰色厅实际看到的，
但不是所有的有趣，所以我只是保持简单和他们相同。
接着下来的底部，我们有一个提交按钮
这是我们见过的，但是请注意我只是给它一个不同的字。
而不是我给CS50搜索标签“注册”。
>> 最终的结果是这样的网页，并再次，
这得到提交？
它被提交一些文件，这个值的action属性，
这是register0.php。
让我们来看看到底发生了什么在这里。
让我继续前进，填写此表，说大卫，
男，马修斯，然后我会说注册。
让我放大，然后点击注册。
好了，这样一种无用的，但让我们来看看什么回事。
请注意，URL更改为register0.php。
奇怪的是不存在的URL，不过，即使我们只是提出的一种形式吗？
[听不见的学生反应]
好吧，这只是Chrome浏览器是用户友好的，这些天。
这是实际存在的。他们只是将其隐藏以节省空间。
但是，好的想法，好的想法。
朝另一端的URL，虽然缺少了什么？是啊。
[学生]的查询字符串。
查询字符串，所以记得从简单的谷歌搜索的例子。
当我点击提交按钮时，URL
带我去谷歌，但再有就是Q =计算机科学或什么的，我已经输入
这是因为我们的搜索示例使用GET方法。
>> 这一次，我们使用的是什么方法，而不是？
发布，并立即区别之一
GET和POST之间是后并没有把用户的输入的URL。
它隐藏它。它仍然将其发送。
事实上，我们所看到的在这里在浏览器中，我们将揭示在某一时刻
在寄存器，我只是看到的内容
的阵列，从浏览器向服务器提交。
但URL没有？，没有任何关键字
或在它的值，这是为什么呢？
好了，后允许您从形式到服务器提交数据，
但它并没有把它的URL，所以什么样的信息后
特别适合于也许当你问用户
输入输入的一种形式吗？
像密码一样的东西，像什么呢？
信用卡号码。
凡是轻度敏感的你可能不希望结束的URL
如果只是因为它意味着你的室友或家庭成员都可以只是吓吓
您的互联网历史记录，然后从字面上看您的密码，
从字面上看您的信用卡号码，因为大多数浏览器
记得在历史上的任何网址，你已经在
因此，如果仅仅是因为这将是一个糟糕的主意。
使用后隐藏，详细的用户。
>> 此外，如何上传到Facebook的照片吗？
好了，你真的可以使用的只有2个机制，
尽管有其他一些更神秘的​​，是GET和POST。
你怎么可能通过一个URL上传照片吗？
实际上，你可以做到这一点。
你可以把一个JPEG或位图或GIF，你可以代表它在十六进制
或一些所谓的基地64。
而不是基地16使用基本64，基本上看起来像
ASCII字符，实际上，你可以通过一个URL上传照片
后一个问号，但也有一般大小的限制。
大多数浏览器强制不超过1000个字符的URL，
也许2000个字符或类似的，所以你不能上传
10 MB Facebook的照片。
对，你使用后，现在得到了参数中的URL，
这是很好的，有用的，有时，但对于任何敏感或大
后是要走的路。
什么是寄存器实际上是在这里做什么？
好吧，如果我打开寄存器的注意，这是一个超级简单的页面，
但它证明了的事实，我可以混合，或好或坏，
HTML与PHP。
这整个文件，除了在顶部的意见，HTML
除了这家伙在这里。
>> 请注意，在我的PHP代码中，
在我的HTML中，我暂时有几分
进入PHP模式。
我调用一个特殊的称为印记R的函数。
这意味着打印递归的，它的作用是递归打印
任何变量，你把它分号，退出PHP模式。
和PRE标记为您提供了预先格式化的文本，
单空间的文字，使每一个空间，你真正看到它。
它并没有消失。是什么职位？
那么，什么是有趣的和引人注目的PHP
是当你提交一个表单使用GET或POST
任何提交您的浏览器
PHP本身计算出这些键值对，
数字，如果有相等的符号，数字，如果有一个问号。
它为你做所有的辛勤工作，然后将它交给你一个关联数组
含有用户输入到表单中的一切。
那么，哪些领域没有这种形式有哪些？
>> 它有4个领域。
一个是文本字段名为name的。
一个是称为队长的复选框。
一个是被称为性别的单选按钮，
，还有一个是叫宿舍的下拉菜单中，
所以注意到，当我打印递归
这个特殊变量的内容。
这是一个特殊的全局变量从字面上$ _POST，全部大写。
这是一个特殊的全局变量，PHP只是为你创造
和手给你，让你可以访问一切
由用户通过表单提交。
，调用print r上，你就不会这样做在一个正常的应用程序。
我们这样做是为了看到这个变量的内，
，什么是它的内部，以及，4个按键，
4 HTTP参数，可以这么说，
名，队长，性别，宿舍，然后用户的值
中键入一个例外。
我做了D-à-V-I-D型。
我检查了箱子，虽然，男性，这显然提交了一份价值
只是m为简洁。
>> 当我选择了马修斯的价值，进行了选择，
这个人是有点愚蠢，但它的惯例。
当我检查的框，值上，“，”得到提交的复选框。
如果我没有检查，没有任何价值将被送往任何责任。
这只是让我们深入了解这个特殊的全局变量里面有什么，
它是如此特别，它被称为超全局变量。
它的存在在你的代码中到处找你，所以，你其实可以访问它。
这是不令人满意的，让我们实际使用超全局
，实际尝试注册的人。
在froshims1我要做出一个改变。
我改变的行动是register1.php的，
和我做一件事。
我是通过我的网页上有质量的一种尴尬。
说实话，这是非常可怕的，所以它原来
在网络上，你可以很容易地使用
其他人的JavaScript代码，其他人的CSS
他们编写并开放了源代码，并提供图书馆，
可以这么说，例如，我在这里使用免费提供的库，
一堆别人写的代码。
>> Twitter的事写这段代码，这就是所谓的引导程序库，
它只是一个CSS样式表，一堆一堆的。css文件
别人写的，并计算出如何让一切都很好，漂亮
像我们这样的人可以少担心一点美学，重点更
在逻辑和实际的编程。
通过将包含该标签的，这是我用相同的标记记住的styles3.css早期，
我现在有一个称为bootstrap.min.css的文件的访问。
只是意味着，他们已经精缩最小，他们已经摆脱所有的白色空间等等
只是，以确保他们没有向我发送的字节数比我的实际需要。
但在有一大堆的CSS，所以如果我现在开的大一IMS版本1
请注意我的文件肯定是漂亮。
现在，它仍然只是黑色和白色，但是请注意，只是使用的样式表
使用某些功能，这是我的形式不惊人，
但它肯定比以前清洁，并在投影机不这样做正义。
周围的按钮和文本字段周围有小灰线就在这里，
但它肯定比以前更干净。
>> 现在，为公平起见，我没有改变我的标记位。
这是第1版，请注意，我已经使用了一些新的标签，
说实话，我不知道该怎么办，直到我读的文档
Twitter的引导库，他们告诉我，如果你想使用我们的图书馆
使用fieldset元素在你的形式，
把你要显示的字旁边一个领域内的一个标签，标签，
然后给你输入一个名字，就像之前，
的复选框，不仅你把它包在一个标签元素，
你使用一类的东西，所以我们还没有看到这之前，
但是你会看到在一个的pset中7的短裤。
CSS中的类可以让你做的东西非常相似的ID，
但在此之前，当我们有一个ID以＃符号
这是一个只有一个元素。
什么是一类很好多个元素具有相同的类
或相同的CSS的东西应用到它。
>> 但同样，对那些在短期内，剩下的这仅仅是复制和粘贴
从他们的文件，我添加了一个标签，在这里和那里。
在最后，因为我已经包含在上面的链接标签，
一切看起来更漂亮自动
通过简单的标记的方式，在我的网页
Twitter的预期，有这么多不同的方式
做到这一点，这确实是非常合适的。
在本学期在这一点上，你会看到在pset中7的规格，
谷歌搜索，阅读库，用别人的CSS
和JavaScript来解决配套问题
组本身的问题，肯定是鼓励和方式
网络是建立这些天来，站在别人的肩膀上
所以，你可以真正着眼于新的和有趣的问题。
但是，让我们现在的重点，再次，逻辑。
>> 这是一个快速迂回美学只是为了显示你的方向，你可以去。
我要恢复的丑陋，现在仅仅是因为
有与Twitter的东西，心无杂念，让我去进取，不断开拓
froshims2，再强调一下，只有在不同的动作，register2.php，
让我们来看看什么样的影响是在这里。
让我继续前进，输入大卫。
我不会队长这个时候。
我会说男性，马修斯，寄存器。
该死的。好吧，这是一个搞砸了我的一部分。
待机。
寄存器2，第22行，如果为空或遗憾。
让我们重新加载。
好了，在提交这种形式刚刚发生了什么？
我在大卫的输入，检查男马修斯，注册，点击。
您的注册。 （当然，不是真的。）
这显然​​是一个超越刚刚打印出来的一些变量的内容，
但是这是什么文件，实际上是在做什么？
在register2.php
请注意，我有一些新的代码。
我的身体标记内，我基本上是一个if else结构，
但是，因为我共同交融与一些HTML
我来回的进入和退出PHP模式，让我们看看我在做什么。
>> 在这里的第一线，我说如果是的情况下
后超全局的关键名称是空的，
换句话说，如果用户没有给我一个值名称的形式，
然后空返回true，因为值是空的。
或注意到的竖线如果性别是空的，
内部的这个特殊的超全局，其中，再次，表示内容的形式，
或在宿舍里是空的，然后我会继续前进，大声嚷嚷的用户。
怎么样？那么，请注意，我说，你必须提供您的姓名，性别，和宿舍。
让实际导致这样的错误。
让我回到我的形式。让我重新加载，以清除它。
，我只是给他们大卫，他们并不需要知道我住的地方。
注册。很显然，我需要告诉他们我住的地方。
您必须提供您的姓名，性别和宿舍。回去。
>> 我可以点击回到这种形式，但是这是为什么呢？
那么，在这种情况下，名称是空的，但性别的，和宿舍，
所以整个表达式的计算结果为true，即使是一点点新的语法，
再次，我们进入PHP if语句模式，熟悉，
但新的部分是冒号，我搞砸了，省略了括号
偶然的，而是注意冒号，这意味着
即使我们退出PHP模式一切
应吐出一字不漏的浏览器
直到你看到一个else块中，因为我们在这里做的，
在这种情况下，你应该吐了这一点
直到你看到的ENDIF，所以微微有些新的语法
，让我HTML和PHP之间的切换。
最终，我们可以清理它，但现在，
它是一种形式的错误检查一个令人信服的方式。
>> 现在，我说你不是真的，因为很明显，我们什么也没做，但数据注册，
让我们真正尝试做一些很酷的东西。
在froshims3唯一的区别是，我会向寄存器3，
所以HTML是相同的。
在寄存器3注意到这一点。
这是一种性感。
我顶使用require语句中的，所以这是如＃include。
这一次，它不是stdio.h中或类似的东西。
这是一个PHP库，以及一个被称为PHPMailer的。
我怎么知道正是这包括引号的字符串？
我读了它在文件中，所以当他们告诉我把这个顶部的文件
如果你想使用一个特殊的库称为PHPMailer的，做什么，它说。
它可以让你通过发送电子邮件的PHP。
现在，让我们继续向下滚动。
>> 请注意，开始我在PHP模式，
所以，现在发现在这里导入该库后，
可以这么说，我做了一些合理性检查。
如果它是这个名字不为空的情况下，
和性别是不为空，注意感叹号
宿舍是不是空的，那么用户已在逻辑上填写的表格，至少要有足够。
我不在乎，如果他们的队长或没有。我只需要他们的姓名，性别，和宿舍。
如果他们填补这些了，没有这些字段是空的
这是稍微新的语法。
顺便说一句，PHP，是一个面向对象的编程语言
你们可能还记得从APCS或类似。
现在，如果不熟悉，只知道使用这个库
你必须写一行代码，像这样使用一个新的关键字，
从字面上一个新的关键字称为新的。
但除此之外，我们有一些熟悉的语法。
这是一个箭头操作符，我们使用的指针的上下文中的结构是类似的。
今天，PHP没有指针，
但现在知道这里面的邮件变量
本质上是善良的指针一个特殊的库
别人说，如果我想访问特定的功能
该库里面我做什么，和C一样，使用箭头操作符，
即使这些实际上不是指针。
这是PHP自己的版本。
这意味着，去图书馆，和调用的IsSMTP的功能。
从我们的战士的净SMTP，召回，是指到电子邮件，
这只是意味着使用这个大一IMS注册的电子邮件服务器。
>> 我要使用什么主机？
那么，哈佛，如果你谷歌周围，有的邮件服务器smtp.fas.harvard.edu。
如果你在家里打你住在一个Comcast网络
它可能类似smtp.comcast.net。
这完全取决于你住在哪里，你的ISP。
之后，我要我的地址任意jharvard@cs50.net。
然后，我打算设置解决jharvard@cs50.net的。
只有这样，我知道，这些功能被称为SetFrom和AddAddress
是，我再次阅读文档。
这是不样的神奇的所有程序员。
然后，我定下了一个主题为“登记”。
现在有点难看，因为这条线是什么点运算符的意思是在PHP？
任何人都知道吗？
串联。
在C语言中，这是一个痛苦在脖子上连接两个字符串。
你必须处理malloc或realloc或所有的东西
只是延长其长度的字符串。
在PHP，JavaScript和其他语言
通常，你可以做一个单一的字符。
在这种情况下，点是指字符串
并追加到这个字符串。
>> 哦，顺便说一下，追加到该字符串，
这恰好是，超全局变量里面的。
然后附加到一个新的生产线，因此所有的这些点仅仅意味着
继续作出越来越大，大字符串，
你不必关心在所有的malloc或类似这样的语言，
有其他的方法来做到这一点，但是这是一个最快的
的方式展示出来。
这是什么做的吗？
它创建一个电子邮件正文中，要说出名字：船长：性别：宿舍：
在单独的行，然后最后，
一行代码，而我现在将忽略此。
如果== FALSE意味着，如果出事了，
但魔术在这里发生的。
邮件发送方式发送这封电子邮件。
让我们来看看最终的结果是什么。
在该文件的底部，发现它会说你真的是注册
如果我走到这一步。
不过，如果用户螺丝，请注意，我们开始了这个
如果条件在这里，如果它不是空的，而不是空
，而不是空的，我们发送的邮件。
否则，我们将发送下面这行代码，
这是有效果，你会看到在pset中7，将用户重定向
回到他们原来的地方，froshims3.php。
>> 手指交叉，否则，这将是今天最令人失望的演示。
在这里，我们走了。
让我打开我的邮箱在Gmail的收件箱jharvard。
现在没有电子邮件。好的。
现在让我开了froshims3，这是第三个也是最后一个例子，我们来看看在这里。
好了，在这里，我们走了。
内特，他会是队长，男，说，Apley。
注册。好吧，你真的注册。
如果我现在滚动到我的邮箱，哦，我的上帝。
我刚才动态在网络上发送了一封电子邮件。
>> 让我们留在那笔记。
一个视频是即将到来的演讲中，我们错过了。下周见。
[CS50.TV]