[Powered by Google Translate] [第8条] [舒适] 内特 - 哈迪森] [哈佛大学] 这是CS50。[CS50.TV] 欢迎来到我们的第二个到最后一节。 在这一周中,我们将谈论PHP,然后下周 我们会做一个小小的回顾测验1。 我们要开始第3页的问题设置包, 我们将继续努力通过部分的问题相当迅速。 第3页,我们开始谈论C和PHP之间的这种差别 在这个意义上,PHP是一种动态类型的语言, 而C是静态类型的, 有没有人真的很快做任​​何编码的东西像PHP 或Python或Ruby之前,JavaScript的? 全新的吗?好吧。 我刚才提到的所有这些语言 有很大的不同的语言,如C和C + +和Java 在这个意义上,当你声明一个变量时,你没有申报 它是什么类型的变量,所以在C我们不得不总是说 这将是一个int变量,这将是一个char *变量, 而与PHP,Python和Ruby的, 这些更现代的语言有很多,你没有这样做,在所有。 你只申报的变量,而在PHP的情况下, 你声明一个变量前面加上一个$符号, 然后变量的类型确定的由持有任何值, 这是一种很酷。 要玩这个一点点,我们在这里有PHP代码示例 之间的开始和结束标记。 我们使用的是在这个意义上,这有点像HTML 我们已经得到了这些尖括号这里打开和关闭。 你会看到这一点HTML。 你会看到相同的语法与XML。 这说明一个PHP代码块的开始。 这PHP是特定的PHP。 我们关闭了?以及一切。 让我们打开一个文件可以使用任何你想在我们的设备。 在这个包中,它说叫dynamic.php的。 事实上,你可以把它无论你想要什么,但文件名会 是重要的,所以后来只记得无论你怎么称呼它。 我要切换的设备, 我要创建一个目录 第9条,我相信我们在现在。 我们将进入第9, 我将用gedit。 让我们来看看,gedit的,我现在就打电话给我的dynamic.php。 轰。 在dynamic.php内,因为这是一个PHP文件 我想通过PHP解释器来运行这个 我需要一切重新开始关闭与打开的标签, 所以我要马上启动这些, 给自己一点空间在标签之间的, 这个练习是玩弄 这个函数调用的getType,这样的getType,这个功能在这里。 请注意,有没有下划线或空格或连字符或类似的东西 分离的2个字,然后键入,只有一个词完全。 但是,这是什么做的是,如果我通过在一个变量中的getType, 说是$ var $ X, 这会告诉我在调试格式 该类型的名称是什么。 我们将在这里进行试验。 特别是,如果你回头看看在pset规范 我们这里有几个不同的代码行。 我们在第一行代码初始化这个变量,$ var的, 等于7,然后我们有这个printf线 说哎,printf的变种是空白。 printf是一个在许多方面我们可以打印的东西在PHP。 通常,你会看到的回声代替了printf函数, 但输出,我们都熟悉的已编码在C一段时间。 你其实可以做的是,让我们来看看,如果复制和粘贴工程。 我要试试这个。 我们会回去的设备。 好了,我们走吧。 间距是有点古怪,但在这里,我们走了。 在这里,我们已经得到这个代码。 [学生]:它没有良好的作风选项卡中吗? 你说什么? [学生]:常规选项卡中吗? 对,所以山姆问,如果是公约的选项卡或不。 通常情况下是肯定的。 在这种情况下,我选择了不。 老实说,你会看到不同的东西,不同的程序员。 通常经常使用的PHP与HTML相结合 和其他语言,所以有时印刷看起来有点时髦 如果你在PHP开始和结束标记的缩进。 这真的视情况而定。 在这种情况下,复制和粘贴没贴的标签,对我来说, 但它绝对不会像你说的,使更清晰。 好吧,如果你这段代码保存在dynamic.php 然后你可以做什么,回落到终端窗口,我就在这里 在gedit中,相当于做编译 使用make,然后运行你的代码,在C 所有你必须​​做的PHP文件是启动PHP解释器, 这是一个小程序调用PHP, 你给的解释,争论的焦点是你想要的文件解释。 在这种情况下,dynamic.php。 哎呀,我把它放在了吗? 哦,我把它在第9,和我在这里。这就是为什么。 如果我现在,再次运行 我们看到,在我的第一个GetType函数调用 var是一个整数。 在接下来的一个var是一个字符串,然后在第三个变种是一个布尔值。 有什么有趣的,如果我们向后滚动,我们看到, 这些都是类似的,我们已经在C.类型 我们有整数在C 我们有字符串在C, 所以字符串是不是在这个意义上的完全合法的类型 我们的CS50的字符串是真的什么? 你说什么?大小姐吗? [大小姐] CHAR *。 是啊,是我们的char *。 在学期开始的时候,我们使用的字符串类型, 但这确实是一个char *引擎盖下。 我们刚刚定义的类型,而在PHP中,这些字符串是一个实际的类型。 有没有更多的这char *类型的东西。 你会看到,我们可以做更多的事情与字符串 更容易在PHP比我们在C, 然后终于,我们有这样的布尔类型,与这里最大的区别是, 如果我们滚动回落,我们看到,这些类型的名称 是整数,字符串和布尔值的,而不是整型和bool 你拿起不同的编程语言, 假设在一些点在你的生命中,你会接触到 不同的人,你会发现像这样的小怪癖 其中,C调用整数int类型。 有人称之为整数。 还有其他的条件,你会碰到。 大整数,我们今天看到的SQL。 也有号码,然后布尔型,布尔型, 所有各种差异有。 这是非常有趣的,但是现在,我去给你一点点的时间, 如果我们放大的工作,通过这个练习在第3页的底部 在要求什么类型对应于这些值在底部。 我们有3.50。 我们有这样的事情就在这里,这是有趣的。 我们还没有看到过,但如果你一直跟着在讲座 你可能已经知道那是什么。 然后,我们有这样的,这是一种时髦的。 您承认这一点。 在C这是什么吗? 山姆?这给你在C? 这将打开一个称为dynamic.php的文件,并使其可读。 是啊,会是什么类型的变量,我们将分配?明星>>文件。 没错,我们会分配到一个文件中的明星。 这是合法的PHP。 运行。看看会发生什么时,其传递到的getType。 然后还要检查null是什么,是什么可能是在PHP。 我给你一两分钟。 你可以从字面上复制和粘贴这些值, 然后我们会做一个小的随机呼叫您 看你得到了什么。 [学生]:我有一个问题。“是啊。 在一次演讲的大卫说有什么东西,你可以把你的文件的顶部 所以,你不必每次输入PHP。 那是什么? 他可能是在谈论磅砰,哈希爆炸。 这是一个指令,如果你标记你的文件,可执行文件 那么它的作用是当你执行该文件时, 它会告诉shell程序 使用PHP解释器来解释该文件的内容。 问题是,这个特殊的线是什么 我们可以纳入我们的PHP文件的顶部没有包括 这个PHP线或本的PHP命令时,我们要执行的文件吗? 实际上,你可以做到这一点了一堆不同的文件。 我认为这取决于PHP二进制文件存储在哪里, 但往往usr / bin中/ PHP是一个良好的开端。 您可以明白这一点正是由会回落到您的设备 输入PHP。 哪个命令时,你正在执行的二进制 相应的文件或命令。 这告诉我,PHP是真的走样二进制文件 是存储在usr / bin中,这是那里有很多的系统的二进制文件的安装。 例如,如果我滚动到顶部,现在我已经把这个#!在这里 我可以向下滚动,我可以尝试运行 的dynamic.php,但我得到这个错误被拒绝的权限, 是什么意思的是,该文件目前尚未提供可执行权限。 它未标记为一个文件,有人可以运行。 当你运行make或铿锵,你有一个可执行文件 编译器足够聪明,知道,嘿,我建立一个可执行文件。 您可能要执行的,所以它会自动配置 你的权限。 虽然,这是没有的情况下,当你从头开始创建一个正常的文件, 原因通常你不希望有任何文件在您的系统上的可执行文件, 所以你确实有去和手动做到这一点。 做到这一点最简单的方法是使用chmod命令, 使用chmod + x表示添加的可执行位 因为有读位,写入位的可执行位, R,w,和x, 并说使用chmod + x打开的可执行位 为然后文件我们指定在这种情况下,这将是dynamic.php。 [学生]:是,转身就为大家吗? 让我们检查了这一点,因此,如何将我检查的权限吗? 你知不知道我怎么会检查,以查看权限的文件吗? [听不见的学生反应] 你说什么?>> [学生]:XSD。 XSD为我们提供了黑客中的文件。 列出所有的文件,L,会告诉我我的目录中的所有文件 种在长期,详细列表,所以在这里我们可以看到, 这dynamic.php文件 11月5日的最后修订在4:21 PM。 这个文件的所有者是jharvard。 这是用户登录 这是我工作的用户, 如果你在家电,你也工作用户jharvard。 你在学生群体中, 这些事情,你会经常看到。 我们可以在这里投入了大量的细节, 但在大多数情况下,你想看看什么当你想看看 不是一个文件是否是可执行的主要是 谁拥有该文件的用户,所有者, 所以这的jharvard,然后我们有 在这里在左边的权限位, 的方式来阅读,这是最后一位 通常被用于标记是否未至少在这种情况下 这最后一点往往会被设置为广告显示 该文件是一个目录,而不是只是一个普通的文件。 以下3位在这里 确定文件所有者的权限, 所以在这种情况jharvard,作为该文件的所有者,可以读取和写入这个文件, 但有一个破折号说,jharvard无法执行此文件。 接下来的3位组,所以这是学生群体, 因此,如果有多个用户我的产品, 我们有多个用户的学生组的一部分, 他们都可以读取这个文件,但不能写, 同样,任何人都,世界 只能读取这个文件。 关于这是一个良好的,长期的书面记录, 这样你就可以在线阅读。 问题集规格,我们进入更详细。 [学生] 218指的是世界吗? 218,我忘了,离我的头顶部 但没有。 让我们来看看。我消隐上是正确的。 回到我们做这个使用chmod + x 在这里我们想,给dynamic.php的可执行权限, 问题是,这是否会给可执行文件的权限,每个人都 或只是jharvard,我们可以看到这一点 执行上面的命令,并输入ls-l, 现在我们看到它标记为可执行。 你可以看到,有颜色的变化。 现在dynamic.php被列为绿色, 它看起来像这个问题的答案是什么,夏洛特? 夏洛特] jharvard。>> jharvard,是的。 如果我们想为大家打开可执行位 我们是如何做到这一点呢? 有什么想法?>> A + X? 是的,没错。 夏洛特说,我们所能做的属性A + X的dynamic.php, 现在如果我们运行ls-l我们可以看到,可执行位 确实就为大家打开。 实际上,你可以做反向,所以你可以把它关掉为大家 使用负。 现在,它的关闭,现在我们可以把它为jharvard 所以,我们实际上可以运行它,现在, 现在你看到的,当我们运行这个特殊的代码#!的顶行, #!线,告诉外壳, 告诉我们的终端哎,这个文件运行时, 使用/ usr / bin中/ PHP来解释这个文件 然后打印输出。 [听不见的学生问题] 当然,让我向后滚动。就这样。 你会看到所有的这些指令开始的这一磅,然后惊叹号, 有时也被称为一个家当,哈希爆炸。 [学生]:我们可以运行它与PHP dynamic.php前,我们把它变成可执行? 问题是我们如何可以运行使用PHP二进制 ,而dynamic.php是不可执行文件? 这是超级重要的,因为这正是 它在工作的时候你写的习题集7。 大部分的时间PHP文件不是直接执行的。 可行的方式,是因为它是PHP二进制文件的可执行文件。 翻译是正在执行的东西, 所以它在做什么是真正的slurping是在整个内容 我们dynamic.php文件,一行行 执行这些命令,所以它的使用我们的PHP文件 作为指令的列表。 它不直接执行它。 这就是我们说,这些文件在运行时解释。 这是一个运行时的语言,而不是在编译时确定的东西是, 不是编译性语言比如C。 是否有一种方式来获得运行时语言,行动,如果它是一个编译时语言, 就像如果你把所有的运行在服务器上完成 ,而不是你知道我的意思吗? 是的,所以问题是, 有一种方式来获得运行时的语言更像编译时类型的语言吗? 还有,我的意思是,这是一个活跃的研究领域,这些公司的很多。 我相信,Facebook已经做了很多工作,PHP 并编译它,使其速度更快,优化 因为他们的网站是建立在PHP。 如果你已经node.js的一切, 这是一种一个JavaScript解释器 能够运行JavaScript的浏览器之外,您的Web浏览器之外, 因为传统JavaScript的只是内部运行的Firefox或Chrome浏览器, ,而且将被用来使很酷的动画在网页上发生 使你的网页动态。 这是谷歌做了很多工作,是建立在 让JavaScript和C + + 结合在一起,所以有很多活跃的研究领域,以 这些语言交互,并对其进行优化, 主要是因为这么多的人可以在PHP和JavaScript代码 因为它是一个非常容易。 这是一个非常和蔼。你没有指针。 您不必四处飘荡的类型。 他们希望获得的好处,这些编译时语言 与所有类型检查的速度和更低的内存使用率和所有的 同时仍然保持使用这些新的灵活性和易用性。 回到我们原来的计划的攻击。 我们已经获得了一些对这些问题,在这里我们的问题集规格。 让我们通过他们真的很快,我们会在房间里。 夏洛特,是什么类型的3.50? [夏洛特]这是一个双重的。>>这是一个双。 吉米,什么是下一个吗?>>阵列。 一个数组,真棒,和Jared的fopen是什么? [贾里德这是一个资源。>>这是一个资源。 这是一种新的,而不是一个文件明星,而不是一个文件。 这是一个资源类型是在PHP, 对不起,ELLA,最后空是什么? 空。 空,它是如何拼写的PHP?>>用同样的方法。 用同样的方法,资金吗?>>呀。 是啊,所有的权利。 在这里,我们走了,我们已经得到了一个双重的,我们已经有了一个阵列, 我们已经有了一个资源,然后我们已经得到了空。 现在让我们来看看你见过 让我们来看看,所以现在我想,我也希望做的是拉 此网页在这里,php.net /手动, 所以,如果你们复制,打开Web浏览器。 我要拉了Chrome浏览器,,在。 我想告诉你这不仅仅是因为 我们可以谈论所有天左右,类型和所有有趣的东西 而是因为这是PHP手册, 有很多PHP程序员在那里。 在那里有很多的PHP网站, ,因此,有大量的文档,PHP, 和手册,这php.net,是一个很好的地方去 每当你遇到的问题,什么是最好的方式在PHP做X 什么是一个功能是什么样子? 只是一种熟悉,这看起来像什么,因为 你会来到这里的时候,一个位问题7。 如果你最终做最后的项目,使用PHP 这将是一个地方,你会变得非常熟悉。 通常情况下,人们能做到这一点的是,他们使用谷歌搜索的网站, 他们不使用的搜索框,在这里的右上角,这是一种微小的。 如果你在谷歌搜索周围用PHP做的东西,你会看到 本手册的链接弹出,通常可以依靠 作为一个相当不错的资源。 真棒,做出来的这些类型,只是出于好奇, 哪些我们没有见过? 我们还没有看到这里的内容吗? [学生]:资源。我们看到了资源与fopen的调用。 [学生]:对象。对象是肯定的,我们还没有看到。 回调我们还没有看到。 有一些这些伪类型。 我们确实只看到了整数和双。 我们没有看到一些其他的,所以如果我们点击整数 我们可以看到的是,他们在这里有任何其他的整数? 难道他们全都是这样的整数,整数,整数。 有些语言有更大的整数类型, 就像我们今天在MySQL中看到的是int,然后大整数。 酷。 所以,PHP手册。 让我们回到我们的问题的一套规范,我们现在将向下滚动到第4页。 发生的事情,当你收到这些语言之一 没有这个静态类型的语言,所以这些,你必须声明 类型的一个变量了前面 你的情况下,你可能会开始有不同类型的变量 彼此相互作用, 和PHP做这件事情的,它试图做 它认为是最明智的事情 当你有2种不同类型彼此交互的。 例如,如果我们看一下这几行代码在这里 你看,我们已经得到了时会发生什么 我们尝试添加串1的整数2。 会发生什么,如果我们尝试添加一个字符串,它是不是一个数值 而是实际的字符数50,CS吗? 然后我们会看到有不同的情况出现 而不是添加一个字符串到数字,我们要添加一个数字到字符串, 等等等等的地步,我们要 某种奇怪的东西,在这里我们已经得到了7 +真实。 这到底是什么意思呢? 如果你们去一些代码并粘贴到您的设备。 您保持在dynamic.php。 我们将看看会发生什么。 [学生]:只要使用打印,不是printf? 是啊,所以你会发现,也是一个有效的打印功能打印PHP。 有许多不同的方法做这件事。 以后,一旦我们开始谈论我们会看到一对夫妇的例子 唯一的问题是我们要编写的 然后将浓度问题,我们要编写 即使我们有FOPEN和fclose 往往不读取一个文件的内容的最简单的方法。 PHP有很多这些C-遗留下来的。 [学生]:当我把所有的那些东西,我只得到一个数字作为输出。 内特H.]当你把所有这些东西。 让我们来看看它,因为它可能 有一件事是在新的生产线,这些打印调用不会终止。 有没有新的生产线分离每个这些打印电话, 所以,也许你得到一个大的数量, 它实际上只是汞合金的新行字符。 [学生]:好了,怎么我确保 那么,有一堆不同的方式。 你可以手动将在一个新行字符打印, 新行字符的回声, 打印新的生产线。 [学生]:所以回声如printf是一样的东西吗? printf是像C的printf 您要打印的格式化字符串。 你提供的格式字符串,然后所有的占位符变量。 这是经常不使用的东西, 让我们来看看,作为一个声明, 我不太熟悉PHP比我其他的网络语言, 当我在PHP编程,我通常不使用printf 因为我发现它使用的字符串插值功能,它有更快, 我们将去,我会告诉你,在短短一秒钟, 而在C中,我们有做到这一点哈克的事情,得到它的正确打印。 实际上,你可以直接把变量转换成字符串在PHP。 printf是过于长,我通常做的那种。是的,艾拉。 [云裳]一般来说,如果你得到分析错误是什么意思, 像在C,它不会告诉你确切的错误是什么,它​​是, 这是否意味着看看通过整个代码和数字呢? 这是典型的比这更有针对性。 在这种情况下,我认为这是一个有点偏离, 所以,我认为,在这种情况下,我们缺少一个分号。 它试图让一切的感觉, 这样的解释型语言,解释是要尝试 尽最大努力使一切工作适当。 你会看到,例如,在JavaScript中 你会经常行语句结尾的分号,就像他们在PHP中, 就像他们在C. 在JavaScript中的JavaScript解释器 在很多的浏览器会把你在分号 如果你碰巧缺少。 他们会尝试和适应上的一些疏漏。 这可能尝试和努力,并试图把事情的工作, ,然后最后会得到一个点,它说没关系, 我不能让工作想逃,这就是你会得到一个行号 这可能似乎有点偏离的确切地点。 好吧,让我们通过这个真的很快。 我们与Ella,让我们去大小姐, 大小姐,是什么打印的串1加数字2给你吗? [大小姐] 3。>> 3。 这是否有意义吗?排序的? 它给你一个数字?它给你一个字符串? [大小姐]一个数字。这是一个数字。 但它的印刷,所以它给你一些字符串排序。 有一件事我们可以做检查了这一点 如果我们这样做是$ var = 1 + 2 那么我们说的getType回声, 因此,我们使用的是第三类印刷在这里。 现在,我们可以看到这里发生的一切。 在这里,我们得到的是我们得到了整数。 即使我们添加字符串到数字, 我们没有得到一个字符串,它只是像大小姐说。 我们得到一个整数。 好吧,让我们来看看,第二天起来,凯文。 CS + 50?>> [凯文] 50。 [内特H.] 50。这是否有意义吗? [凯文]是啊。 [内特H.]为什么呢?为什么对你有意义吗? [凯文,因为它只是字符串的数值为零。 是啊,太好了。 这种模棱两可的情况下,但它的好,知道会发生什么。 斯特拉,1 +字符串2号接下来会发生什么? [斯特拉] 3。>> 3。 在这种情况下,我们得到了一个字符串或数字? 让我们试试这个。 任何人比我更快得到答案?夏洛特? 哦,我没说好了,让我们来看看,我们将做同样的事情 在这里我们已经得到了一个号码加一个字符串,并且我们要响应的类型, 看看我们。 我们还得到一个整数。 不要紧,哪一个是,哪一个是数量的字符串。 我们仍然要得到一个整数。 它仍然会做什么,我们所期望的。 所有的权利,所以Sam,90 + 9瓶啤酒在墙壁上? [三] 99。>> 99。 没有啤酒瓶在墙上,虽然。 它为我们提供了一些信息发生了什么事。 [三]如果你写的信中 那么你将有90吧? [内特H.]是啊。 现在的问题是,如果我们写N-I-N-E 我们已经获得了99或90? 我们会得到90。 它实际上只是寻找数字字符。 这是不足够的智慧认识数目字的东西。是。 [学生]:是有这样的事情在PHP中类型强制转换? 目前,它是完全相同的方式,你会做的C. 什么关于10/7,夏洛特? [夏洛特1.4285。 内特H.]是啊,所以可能是什么奇怪呢? 会发生什么,如果你这样做同样的事情,在C, 如果你做了10/7在C? 夏洛特]只会给你,取决于你如何typecasted我想 它会给你只有有限数量的小数点后的位数。 是啊,所以数量有限的小数点后的位数。 还有什么可能将它给你任何小数点后的数字吗? 通常,如此反复,这取决于你如何映射 它可能会或可能不会将它转换到一个浮点数。 在这里,它是一种不错的,它没有。 如果我们你回来的时候我们就开始做这种东西在C 它可能会作出一些更有意义 它不只是去1。 最后,杰米,然后约7 +真实吗? [杰米] 8。>> 8。 这是什么意思呢? 我猜它只是提供了真正的值为1。 是啊。如果我们改变为false,会发生什么情况呢? [学生]:7。 是啊,所以请记住,我们谈论这些二进制值, 1,0是关闭? 现在我们有真正的值为1,0是假的, ,你可能没有看到这在C的例子,我们已经做到了这一点过去的学期, bool类型在C,但在历史上,还没有一个真正的类型, 所以人们用0和1的真假。 这是一个体现的是。 好了,所以这一切的一个重要组成部分 是,我们有这些不同的类型。 它们可以彼此交互。 他们往往可以互相交流的方式很不错的,因为我们在这里看到。 真的很高兴能有串1和2号,加在一起,得到3。 这是有道理的。 然而,当你写的网站,尤其是当你正在处理 用户输入的,所以说你写了一个Web表单 收集来自用户的信息,然后进入处理它 在后端,在你的PHP代码在服务器端 如果你期待值,用户输入并提交 形式是一个整数或浮点数的或类似的东西 你需要明确地将它转换 ,然后做一些类型检查。 你不想仅仅依靠这种类型戏法的系统,以使事情成功, 尤其是出于安全考虑,只为您的网站的鲁棒性。 只是要记住,只要你处理表单数据, 任何东西来后或GET和superglobals 请确保您始终验证它,并把它转换和强制转换。 就像我们谈论了一会儿前,类型转换 在PHP是完全一样的,在C,你必须在括号 然后该类型。 记住这一点。 一个功能,将派上用场,当你这样做 我们已经使用,这是一种顺便说一句, 我们一直在使用这个GetType函数在这里 找出一个变量的类型, ,而这是非常方便的进行调试,并看到一个变量的类型是什么 你不希望使用这一点,例如,在一个条件 你检查,看是否是$ var =整数的getType的做一些事情。 这是一个坏,坏,坏。 取而代之的是这些调用的函数是整数,字符串, 是数组,你要使用,所以在这种情况下, 我想这样做,而不是这家伙在这里 是使用的是整数的变种。 他们通常被称为是IS_ *在这个意义上,你可以更换*整数, 字符串,等等,只是非常快的,以确保 这是诠释PHP。 看起来像你可以做的是int或有整数以及? 是的,别名,所以int整数的别名。 酷。 我们要怎么做呢? 让我们加快脚步一点点。 现在,我们要谈谈数组,所以你可以看到 在我们谈论如何在PHP数组的下一个部分的规范 略有不同,它们是在C 事实上,他们的汞合金 你已经认识到,爱在C的阵列 那里的一切是相同的类型的 连续和连续存储在内存中, 你有这些数字指标。 您有索引,索引1,索引2 0, 存储在这些指标的值。 您还可以在C,你写的拼写时,有不少人 做了哈希表的做法,你看到我们在那里有 不同类型的存储,我们映射 一个键的值,所以当你试图存储在哈希表中的东西 你必须指定你想存储与特定键, 和确定该键的位置的值,并在将被存储。 您已经种了这些概念都发生在同一时间在一个PHP数组, ,因此,我们常说这些关联数组 当我们一个键关联的值。 在接下来的部分,我们讲一个简单的PHP数组 在那里我们有键a,b,和c, 所有字符串,映射到整数1,2,和3。 你可以有不同类型的键。 你可以有一些键是字符串,有些键是整数。 你可以有不同类型的值。 你可以有一个值,该值是一个字符串,这是一个整数的值, 值,这个值是一个对象或另一个数组,例如, 在相同的数组对象,这是一种奇怪的。 您不必有一个数组,只是得到了一个类型的元素。 你可以有许多不同的东西在那里。 另外要注意的是,当你看到这样的事情在你的代码, 这是合法的PHP宣布就这样,阵列0,1,2,3,4,5, 将宣布这个数组的初始化改编。 但你实际上得到的引擎盖下是这种隐 键,我们已经得到了0至0,1对1,2 2,3 3代。 而事实证明,即使你做了这样的家伙在这里有一个数组 在那里你有A,B和C的钥匙 然后你开始使用数组push方法开始使用这个数组就像一个堆栈, 所以你可以看到这个数组,这个数组对象,实在是过载。 我们可以使用它作为一个数组。我们可以使用它作为一个哈希表。 我们可以使用它作为一个堆栈。 当你开始推动的事情到这个阵列 你的第一件事情推到这个索引为0,然后索引1索引2。 你可以得到这样的隐式密钥的生成的 除非你明确指定。 你明确指定键的方式,当然,使用这种支架符号, 这是类似于数组除外,而不是只允许 在这里的整数索引,现在我们允许任何东西。 如果你想你的关键,是一个字符串,你会像这样指定。 如果你希望它是一个int,您指定的诠释您要使用的。 的问题上,迄今为止吗? 关于这个想法的好东西之一 是,你永远只能有一个值存储与特定的关键。 如果我们回到我们的设备让我删除了一些这方面的东西。 比方说,我初始化为0,1,2,做一个阵列。 如果我现在知道,例如,如果我echo $到达[0] 我要打印出来的值为0, 因为永远只能是一个值存储为一个特定的键 如果我储存的东西在$改编[0],说, 后来我才知道,当我echo $改编[0]再次 我不打算打印出来前得到0。 我只是要得到一个。 因此,这基本上是说,我可以没有到达[0]存储2个不同的值。 它不能存储0和字符串a,像这样从字面上取代 什么是在$ ARR [0]以前。 我之所以提起这件事时,它会看看会发生什么。 看到这里,我得到了0打印出来,然后在这里。 有没有新的生产线,因为我是个懒人,并没有把它英寸 什么是酷的是,我们可以用这样的一种方式 捕捉到了这个念头一组 我们不能在一个阵列中有多个密钥。 我们不能有相同的键,在一个阵列。 我不能让键0和值1和0键和值一 或0键和值true。 这些键都只有1数组中的键。 即使你可以有相同的值存储 阵列中的不同的密钥下多次 在你的PHP数组具有相同的键多次,这是不可能的。 如果我们看一下在这个未来的问题,unique.php, 我们要打开一个PHP文件 包含一个字符串列表,每行一个字符串, 我们要在该文件中找到的唯一的字符串 我们要做的是使用这些PHP数组 和在文件中使用的字符串到这个数组中的键 并不断更新我们的数组,因为我们这些新的密钥存储。 当我们读出来的文件的每一行,我们可以将其存储在数组中, 并在年底,我们将有我们的钥匙在我们的数组 所有在文件中唯一的字符串。 这是否有意义吗? 让我们来看看它是如何工作的。 我们去开拓,根据该规范,创建一个新文件unique.php。 打开。哎呀,对不起,新的文件。 我们要开始了相同的开始和结束标记。 我们将它保存在第9,和我们要调用它unique.php的。 好了,现在放大。 这里的想法是打开一个文件, 读取文件中的行由行。 对于文件中的每一行 我们将有一个数组,其中有  作为我们的主要线路。 然后,当我们到这里就结束了 $改编的键是独特的线条 从文件,因为我们知道,如果我把这个数组的行 多次将只保留覆盖旧值, ,我们实际上可以把阵列产品线,本身只是喜欢。 这是一种奇怪的。 我们相同的键值对存储一遍又一遍,一遍, 但是因为我们保证将只有1键称为行 因此,如果我们有一个文件说,动物的声音的文件,汪,汪, 喵,喵,哞,哞,每一次我们读的动物噪声在 像纬,将其存储在数组中,我们得到纬,然后第二次 我们存储纬它会覆盖第一次,我们把它保存。 最后,我们将只有一个数组中的条目 在我们的动物的声音文件中的每个动物的声音。 你们是否有信心,你可以解决的开幕PHP中的文件吗? 做到这一点的方法之一,让我们在这个快速的一种方式做到这一点 是用fopen,就像我们在前面看到的。 您可以的FOPEN some_file.txt。 你可以打开阅读模式,就像在C 这是一个非常好的办法做到这一点。 您还可以读取文件中的行由行 有相同的功能,他们中的很多,你在C. 你有FGETS。 你有FEOF,虽然我们不喜欢使用, 因为,要记住,这不是伟大的C. 你可以做同样的方式, 但这里是一个非常酷的事情。 对不起,我不希望做文件,但有一个函数在PHP调用文件, 此功能在这里是冷静,因为它的全部内容读 您指定的文件,所以some_file.txt的, 到一个数组中读出的文件的全部内容 然后让你遍历它,这是非常漂亮的。 如果我们走了,例如,我们的Web浏览器 我们来看看谷歌的PHP文件 在这里,你可以看到我们的说明书上说,文件读取整个文件到一个数组, 我们可以file_get_contents返回一个文件的内容作为一个字符串, 但通常只是作为一个数组是非常好的,因为它做什么 它打破它,以便每个元素 在阵列中的文件是一行, 因此,如果我们看一下文件0,这是该文件的第一行。 文件1,第二行,文件2,第三行,等等,等等。 那岂不是很好,如果这是你必须做在C? 相当漂亮的。 大卫表明这在演讲中,他表现出的成语是 在除了环PHP我们的标准,我们有这样的 ($ I = 0; I <10; i + +), ,你可以做到这一点在PHP中,同样的事情也 我们也有这个很酷的结构,名为foreach的。 foreach是非常方便的遍历数组或数据结构时, 因为它可以让你拉出来的每个元素的数组 而无需手动做自己的索引, 而不必手动创建一个索引变量,增加它, 拉出值在数组中的这一点,因为这是一个非常普遍的事情。 您可能已经这样做的时候,你在做C语言的吨 在这学期,所以这个foreach 我们可以在这个文件数组循环, 和语法的是,我们想现在这一大堆的循环 并指定该变量,我们将用它来存储 本地这个阵列的元素,这个foreach循环的范围的局部, 我们把它称为线。 如果它是一个文件,只是有一个字行 我们可以把它称为字为好,其实只是你给这个名称, 无论你怎么称呼它, 内循环,然后,你可以做任何你想做的这个变线。 如果没有足够的值的数组,你也希望得到 随着它的索引,你可以指定名称的索引 以及价值,现在你有2个变量的访问。 你有$ i和行 其中,$ i是索引数组中, 线是从文件中检索的行。 例如,如果我们想打印出来的文件,因为这回声线0, 就这样,我们能做到这一点,“行我的文件$行” 这里是我们也没有见过的东西 我只是完全跳过了整个%S%D业务 我们不得不处理在C,相反,我已经走了直 写在我的字符串中的变量线。 这就是所谓的变量插值,串插 您在何处馅的变量,和PHP解释器 是足够聪明,当它通过一个字符串,用双引号开始阅读 而不是单引号,单引号字符串,你不能做到这一点, 但与双引号字符串,因为它读取的变量,通过它的。 它的狩猎下来,如果它认为变量将变量的值 并把它的字符串,如果它可以将其转换成一个字符串表示, 这是非常漂亮的。 现在,让我们注释掉其余的一切, 保存这一点,我们现在可以做的是,我们可以打开一个文件 我们可以称之为some_file.txt让我们创建一个新的文件 我们可以把一堆废话的东西,在这里只是为了测试所有的东西, 保存它,把它some_file.txt,我做在顶部, 现在,如果我缩小只是为了确保一切都在同一个目录 它看起来像我有unique.php some_file.txt在同一个目录。 如果我运行PHP unique.php的 如何打印我的文件中的每一行和该行是什么呢? 这是非常强大的,对不对? 瞧,这花了3行代码就可以打开一个文件。 好了,4行代码。我不能指望今天,清楚。 但真的只有2有趣的代码行,因为其他的花括号, 但在这么多的代码中,我们可以打开一个文件,遍历它, 拉出来的行号和该行本身 并打印出来。 很酷的东西。夏洛特。 [夏洛特]我有一个问题关于语法。 所以你打开的文件的每一行的foreach处理, 然后当你想要做的事情的每一行,你只是做它作为 然后关联的值。 [内特H.]你可以做什么在这里的问题是 在fo​​reach做的阵列,所以foreach语法 真的是foreach和通知,有没有空间 之间的和每一个或任何东西。 他们去旁边对方, 然后它在一个数组中, 然后你有这被称为是有其他的关键字, ,然后后,作为你可以把一个变量名, 在这种情况下,你会被拉出数组元素的值, 不是索引,或者如果你这样做,因为我们已经写在下面 你得到的键和值。 您有forEach元素的数组或对数组的键价值 或为正义价值。 根据你所需要的,如果你不需要的钥匙, 那么你可以去的值。 如果你想要的键,你可以和他们一起去了。 [夏洛特]我也意识到,我们从未宣布过我或线。 它是如何知道它们是什么? 内特H.]你是什么意思的声明? [夏洛特]我们从来没有告诉他们我还是行的手段。 [内特H.]我们从来没有告诉计算机什么,我行表示在 [夏洛特,他们是索引,当当 [内特H.]我们从来没有告诉它,这是应该的索引或键和值, 这是因为这是PHP解释器。 作为声明说,没关系,关键是要 一个变量叫我存储在一个名为i的变量。 该值将被存储在一个变量称为线 所以作为这些变量的声明 说$我是一个关键,$线的值。 是啊,艾拉。 [云裳]如果没有这样做的关键数字 它是如何决定什么样的顺序要打印的一切吗? 这是不是就是它被输入的顺序吗? [内特H.]让我们给它一个尝试。 让我们创建一个变量称为改编, 我们可以做一个“7。 比方说,0到另一个阵列,1,2,或苹果。 比方说,7变为1,B 2, 和3〜4。 这是一个疯狂的寻找例子,因为我们是混合 字符串和整数的地方。 这个数组有没有真正的订单。 我的意思是,我们可以责令一切都在按字母顺序排列的键。 我们可以责令一切按字母顺序排列的值。 我们可以尝试,并考虑到有些字符串,有些是整数, ,我们可以尝试将它们转换为相同的类型,看看会发生什么, 或者我们可以认为他们的价值,我们已经进入他们 我们把这个家伙在第一,第二,这家伙这家伙在第三, 这家伙在第四位,等等。 让我们来看看运行此代码时会发生什么。 如果我们向下滚动,并做了同样的事情, 这里没有打印出新的生产线。 当它读出来的文件,它的价值观,包括新的生产线, 这就是为什么它打印出来很好,而这里没有, 所以这就是为什么的一切都smushed一起。 让我们添加新的行只是为了让这件事情。 让我们重新运行它,所以在这里 看看发生了什么事。 打印中,我们把它放入数组中的顺序。 它保持秩序,在这个意义上。 让我们回到这个问题的唯一 我们希望能够遍历一个文件, 我们会给它some_file.txt, 我们要遍历这样的。 我们说,我们要使用一个数组,以确保我们得到了所有的 独特的线,我们能做到这一点真的很容易 仅通过存储在一个数组,我们当然声明一个循环的范围之外, 和我们说,如果我们使用的是文件中的行的钥匙在我们的数组 如果我们输入了重复的行,我们会覆盖掉原来的值。 这是以往任何时候都可能有2个按键在同一阵列中是相同的。 我们可以做到这一点。 我们可以摆脱这个echo语句就在这里。 在这里,我们文件中的行存储在数组中 使用的关键。 没有它,事实证明,我们并不需要这个关键。 我们不需要变量i。 在这一点上,如果我们做的另一个foreach循环 我们循环在每个改编 和线路,如果现在我们ECHO-哎呀,对不起。 我们不能用逗号。我们必须使用此关键字。 现在,如果我们回声线,我们应该得到所有在该文件中的唯一的话。 如果我们去了到some_file.txt, 让我们说,我们做的苹果,香蕉,苹果,苹果,香蕉, 如果我们打印出所有的独特的话,在这个文件中,我们应该只得到 苹果和香蕉打印出来。 如果我们现在在这里,我们将放大, PHP unique.php,和ta-DA。 我们已经成功地uniqued的文件。 这个问题的最后一部分是问你这个数组进行排序,然后再打印出来 因为在这个简单的例子中,我们刚刚做 在这个意义上,我们很幸运的文件 我们这样做是人为的例子,苹果和香蕉。 它已经排序。 但是,使用简单的排序功能,您可以排序的数组,这是相当漂亮的。 最后一点我想谈谈你们真的很快 是这样的PHP是一切都很好,这是超级方便 知道该怎么办,如果你需要编程做小,见效快的事情。 例如,如果我需要写一个程序,说, 使大家我不打算去,并把它写在C段 这将是长期的。 这将是一种痛苦,特别是如果有涉及的文件, 正如你们所看到的。 它是如此漂亮,只是这么多的代码,在这里 我们能够通过的文件中抓取音轨,使出浑身的独特价值 和打印他们退了出去。 然而,对于分配给你的,你的项目, 如果你建立的网站,PHP的力量是 我们正在运行的PHP文件,通过这个解释, 解释器处理的PHP标签内的所有内容, 一切原封未动,吐出的结果。 建立HTML编程方式,我们可以做到这一点。 现在,如果我们回去的规范,最后一个问题,在规范中 谈到这个想法的浓度 并创建一个下拉菜单, 您可能会或可能不希望这样做,这取决于您的最终项目正在做什么, ,它允许用户选择从一个列表中的所有可能的浓度 他们的浓度。 现在,这是一种痛苦的键入此 做这一切手动,特别是当你以确保 你有所有的尖括号在正确的地方,所有的报价在正确的地方, 与PHP中,你可以做到这一点编程,你可以做到这一点真的很快。 让我们来看看如何做到这一点。 我们要去打开一个新的文件。 我们打​​算把我们的PHP标签。 我们将把它称为concentrations.php, ,现在当你这样做的一件好事种思考 当你想你的PHP和HTML混合和匹配 搞清楚,什么是好了,我想以编程方式生成的部分吗? 的一部分,我可以通过编程生成是什么? 这是真的,你可以做你的HTML 里面的PHP块。 您可以重复所有的HTML作为字符串。 例如,如果我要开始做选择的PHP标签里面 我能说的回声,说选择名字浓度, 然后向下跌破,我可以有另一种回声标签 或其他回声称为近的选择。 这是一个办法做到这一点,因为这是真正的做 打印出该字符串通过PHP解释器时,它的运行, 这样的结果将是HTML。 如果我保存这个文件,因为它是现在 和运行PHP concentrations.php的 看看我得到了什么。 我得到这个开放的关闭选择标签。 如果我要做到这一点,我是这样的结果保存到一个文件中, 说,等待concentrations.html,它看起来像已经到另一侧的L- 现在,如果我在这里开了concentrations.html你看,我有一个有效的HTML文件。 那是一种奇怪的呢? 我们正在使用PHP创建HTML,创建有效的HTML。 我们正在做的是,我们的PHP打印 我们希望它打印的HTML。 这简直是​​PHP网站如何工作的。 当你访问一个网站,把你喜欢的东西 什么,什么,什么点com斜线的index.php 该计算机是真正的调用index.php文件, 执行它通过PHP解释器,以及任何垃圾出来 它发回给浏览器,说哎,浏览器,将此解释为HTML。 这种做法的好处是,它可以是一个痛苦的不断谱写回声,回声,回声,回声 在这样的引号括一切,所以如果你想要写 HTML,将是静态的,你可以像这样做, 把它放到外面,关闭它, 然后在这里你只把里面的PHP标签,你知道 你想以编程方式生成,在这种情况下,这些选项标签 是一个痛苦的产生。 例如,我们可以产生一千个选项标签 做这样的事情,我<1000,+ + 说echo参数值= $哎呦,我不能这样做。 好了,让我们给它一个尝试,看看会发生什么。 $ i,然后说我