道格·劳埃德:所以我们 在C中做了很多工作, C是一个非常酷 语言,因为它给你 潜水真正的能力 低电平到你的程序。 我们可以做的事情为 真分钟为操纵 内存单个字节。 回想一下,真正的指针 让我们的灵活性。 但是,我们总是需要有 这细粒度的详细程度 在我们的计划? 或许不会,对不对? 如果我们将有 作为之间的权衡 能够做到真的,真的 分钟的事情,真的,真的 我们没有想到大事情 约,我们没有实现 这些真正的大想法,如果 他们已经内置了对我们来说, 通常用于构建大 方案或大项目, 我们可能会犯错就在身边 具有多语言的东西建 对于我们,而不是有 低层次的东西。 而这也正是PHP真正的用武之地。 现在,其原因之一 我们教CS50 PHP 是它所辖严重的启发 C.而事实上,在我看来, 这里实际有 祖种语言, 是非常普遍的今天。 C和LISP。 而且他们祖先的语言 因为所有其他现代编程 已经开发语言 自那时以来,受到启发 由一个或其他语法上。 PHP是非常相似的语法 到C,而像Scheme语言, 例如,其 你可能听说过, 在很大程度上受语言的启发 叫LISP,这是一个较旧的语言。 因此,我们当教师的原因 PHP在CS50的是, 通过了解c以从根本上 因为你在这一点上, 拿起PHP,它给你的 有能力做更高层次的东西 比C呢,是不是 这么多的一道坎的, 因为你已经有了 的语法的基本思想。 C'S出现了将近 45年在这一点上。 PHP的存在了大约20年。 而在这25年 在程序员之间 确定,他们将多 而有更高层次的能力, 和错误和斗争 在20年间的 导致PHP和其他现代语言。 PHP的一个很好的选择 软件语言 这allow--的 软件that--在那里你 需要做的事情,在 C是实际上是复杂的。 因此,例如,工作 在C字符串 是非常复杂的,因为 因为我们知道,在C字符串 真的字符只是阵列。 这不是一个内建的数据类型。 或许更重要的是, 这是我们甚至没有覆盖C, 如果你需要做什么 一些计算机网络? 好吧? C有这样做的能力,但它是如此 晦涩难懂,因此很难真正做到。 那岂不是很好,如果 语言有一个内置的,简单的方法 实现联网? 和PHP是一种语言,使的是, 或便利的是,相当多的。 正如我所说的,PHP是非常沉重的启发 由C.语法是非常相似的。 所以它应该有希望使 过渡从一个到另一个 比一些稍微有点软 其他语言可能。 开始写PHP,只需打开 文件以.php文件扩展名。 从技术上讲,这不是 实际需要, 但如果你想要像语法 突出了IDE,因此该类型 名,或变量名,函数, 你知道,语言的关键字 在突出显示 特定的颜色,你一般 要使用命名您的文件 一个特定的文件扩展名。 因此,我们已经命名我们的文件以.php 扩展名,但后来也用PHP, 所有我们写的PHP代码 文件必须包含在这些PHP 分隔符,我们看到 这里在屏幕上。 尖括号?PHP的开始。 然后我们写我们所有的PHP 我们要在两者之间的代码。 接着 ? 尖括号关闭。 如果我们不这样做,那么 什么会发生? 它不会崩溃。 它不会 真的毁了我们的计划。 但它不会有 我们想要的效果。 这是怎么回事发生,真的, 当我们尝试并运行这个程序, 一切不是那些分隔符之间 将要被逐字打印出来。 它不会 实际执行的代码, 这将只 逐字打印出来。 现在为什么是这样? 所以C是什么知 作为一种编译语言。 你可能熟悉 使你的程序的步骤, 打开.c文件和.h文件 与使一个单一的可执行文件, 特别是使用 铛为我们的编译器。 PHP,不过,不 有此等价的。 PHP是所谓的 解释语言。 什么意思呢? 嗯,这意味着我们不必转换 我们的源代码,以零和一 预先。 相反,有一个程序, 其也被称为 PHP是一种理解PHP和 那种可以把它的飞行。 这并不是真正的完全准确, 但是这是一个非常好的比喻 发生的事情。 它解释这些 零和一的飞行。 因此,如果它不知道 如何处理事情, 如果它不知道如何 过程PHP,你可能 希望把该文本在那里,对不对? 你可能希望把代码 还有,即使它不是PHP--之间 PHP的分隔符。 但是 - 所以它不会 要删除帐户, 它只是将基本放弃它。 因此,这将打印 它输出到屏幕。 这似乎是这是一个坏 的事情,但实际上它是 要成为一个真正的 一件好事,因为我们将 看看当我们谈论 PHP网站开发, 因为这意味着我们可以 点缀PHP和HTML。 我们可以共同使用这些技术 创建一个更加动态的Web页面。 但更多的,在 视频PHP的Web开发。 那么,什么是PHP语法? 这就是这部影片的全部意义所在。 让我们来谈谈吧。 所以,展开,取出,变量。 PHP变量存在。 只是有两个大 从C差异 第一是,有 没有类型说明符。 我们没有说INT, char和float,所有的东西。 我们没有做到这一点了。 PHP是一种现代语言。 它可以计算出你在做什么 试图做或做一个最好的 想为你想要做的事。 所以,这是相当不错的。 另一件事是,所有变量 名称必须以一个美元符号。 这只是一些习惯。 这是一个有点古怪,因为 它使PHP可以理解 什么是可变的,什么不是。 所以,每一个变量名 始于一个美元符号。 因此,在C中,我们可能会说 这样,INT X = 54。 我们不必这样做了在PHP。 我们只能说$ X = 54。 我们可以说,例如,在C, 如果我们磅包括CS50 .H 头文件中,我们可以说 串词=“这是CS50。” 我们没有做,在PHP中,虽然。 我们只能说$短语 =“这是CS50。” 而事实上,串现 在PHP一个内置数据类型, 或者更确切地说,PHP懂得 什么是字符串。 它是独立于阵列 字符的像它是在C 所有您最喜爱的 从C条件语句 仍然可以供您使用。 所以没有什么大的转变存在。 我们可以say--我们可以有 如果这样的语句。 如果$ Y 43,或$ Z = 15。 所以这是非常简单的。 我们可以有,如果和其他人。 我们可以有if和else if。 而发现一些 相当不错的位置,而这 是那种那些之一 PHP的优势与C,通知 我们没有使用什么功能吗? 我们使用==来比较 变量$名称,为字符串。 我们不能这样做,在C,对不对? 我们不得不使用调用的函数 STRCOMP或StrEndComp或任何 其相关的表兄弟。 所以,我们已经看到这些优势。 我们并没有做什么 愚蠢或者不直观 作为调用一个调用的函数 STRCOMP如果我只是想测试 是否一个值等于一个字符串。 我可以只使用等于等号, 就像我可以做任何事情。 因此,有一个优势。 有时,顺便说一句,你可能 看到否则,如果为一个字,ELSEIF。 而这在PHP中确定为好。 所以,有时你可能会看到这一点。 这不是一个错字。 PHP实际上理解ELSEIF。 我不知道他们为什么 决定实施的, 但正如我们已经见过很多次 在我们的影片到目前为止, 我们程序员喜欢它,如果 我们可以做的事情迅速, 因此摆脱了空间 显然是一个很大的优势。 这就是,如果和ELSEIF。 我们也有三元运算符, 召回问号冒号, 对于非常短的形式,如果其他人 或有条件的分支。 而且显然,在此, 我们想在这里做什么 被分配变量 $信真或假, 这取决于是否是$ var 为英文字母。 因此,这是非常相似,因而isalpha 我们很熟悉的C. 这有点相当于在PHP中。 的功能是很明显 叫而ctype_alpha, 但是这就是我们如何做到这一点在PHP。 所以,这一切都将是是,如果 $ var是一个字母,$封信是真实的。 如果是$ var是不是一个字母, $信是假的。 我们也仍然有switch语句。 我们还记得由C为好。 在最高层那里,那我们怎么办 像GET int或得到字符串。 因此,PHP有一个内置的。 我们不需要CS50库了。 我们可以只使用该功能的ReadLine。 什么是会做的是打印 出消息,“你的状态, 请“,然后闪烁提示 等待用户输入 一些信息。 现在注意什么 我们可以用开关做。 如果你以前使用过它, 你可能还记得,开关 仅限几乎为整数,并 人物,但现在我们可以使用字符串。 而事实上,switch语句 在PHP是相当多的灵活 比C.其表弟 循环。 就像条件句,所有的 你的老歌依然存在。 我们有while循环的计算 从1到在这种情况下,100。 我们已经做while循环 表示,计数从1到100, 我们有for循环 表示,计数从1到100。 所以没有什么大的飞跃那里。 语法是相当 多完全一样, 除了现在我们使用 美元符号变量,而不是 声明整数变量或 这样的事情对我们的专柜。 这就是事情得到一个 很多优于C,虽然。 阵列。 所以,记得当时我们 谈到C,以 为我们成长和收缩 信息集, 我们需要进行排序默认 这一想法的一个链表, 因为C数组是固定大小。 我们不能缩小它们。 我们不能生长他们。 我们不得不重新分配内存 做这一切疯狂 或使用链表,这 占用相当多的空间。 但在PHP中,阵列 大小不是固定的了。 他们可以成长,他们可以收缩。 如此反复,这20年间所存在 C的第一个版本之间 并首次发布PHP, 我们决定,你知道, 这将是非常巨大的 如果我们能做到这一点。 因此,我们实现这一点。 所以PHP数组是不固定的 大小,因为PHP并没有真正 有程序员朝前 类型的概念, 我们可以混合数据类型 在我们的阵列了。 因此,我们甚至没有使用所有 整数或全部飘点, 我们可以拥有所有的混合 不同种在一个阵列。 声明数组是 很简单。 这就像任何其他变量。 $ NUMS =阵列(1,2,3, 4),阵列是一个功能 这是内置到PHP的 将创建一个数组为您服务。 这产生四个值的阵列, 在这种情况下的数字,称为$ NUMS。 而且也做一个以上的方式。 而且我们要 看到这个有很多,在PHP。 PHP已经开发了许多不同的 人的发展和增长和增长。 有平时不只是两个或 三种方式做一些事情在PHP中, 通常有像10或20。 这只是另一种常见的 方法来声明数组。 $ NUMS =正方形支架1,2,3,4。 因此,这是有点类似C的角度 br--大括号标记,而。 $ - 否则会是int NUMS方 括号等于大括号1,2,3,4。 在PHP是$ NUMS =方 支架1,2,3,4。 但是,这两个例子在这里给我 四个在这种情况下,整数的数组。 如果我想钉东西呢? 嗯,我只能说$ NUMS 4,这 再次,我们仍然从0这里计数 在PHP中,将第五 数组的元素。 我只能这么说。 我不会遭受SEG 故障,因为我的数组只是 要增长以容纳。 这是相当不错的,对不对? 而事实上,我甚至都不需要 指定我想要把它。 我只能说这个,只是 钉正确坚持到最后, 或者,我可以甚至只是 说$ NUMS 20或1000。 这其实并不重要。 它仍然只是去 对上钉到年底。 因此,我可以成长,as--我们 不会掩盖它在这里, 但我可以拼接或条状 元素从数组中为好, 和数组将收​​缩以适应 现在缺失或空白区域。 还有另一种方式来钉 东西上的阵列, 这是一种称为array_push函数。 如此反复,只是这种想法是 能够做到的事情很多不同的方式。 因此,我们已经看到了三种不同的方式,现在 到粘性另一元件上的阵列。 因此,这又增加了一个元素 到$ NUMS数组的末尾。 我们可以混淆了我们的数据类型。 所以,我有不是一个数组 1,2,3,4,但1,真实,3,4, 其中true是一个布尔值,然后 如果我想钉在另一个元素 该阵列,也许是一个字符串, 字符串“五,”我能做到这一点。 现在我的数组会 是1,真实的,3,4,5。 这个词五,而不是整数5。 因此,具有很大的灵活性存在。 灵活性得到 更妙的是,虽然, 因为PHP拥有的东西支持 称为关联数组。 而我们那种隐约谈到 在C中有关关联数组 在哈希表的情况下,因为 有什么关联数组是真正的所有 关于正在关键 值对映射。 而且在这种情况下,如果keys-- 我们熟悉的C数组, 键是索引编号。 0,1,2,3。 和值是什么,我们发现, 阵列0,阵列1,阵列2,依此类推。 所以,键是索引, 和的值是 什么是该数组中的位置, 通过该索引指定。 但在PHP中,我们没有做到这一点 概念阵列0,阵列1,阵列2 了。 我们现在可以用实际的话 以键映射到值。 所以我可以说这样的事情。 我可以用创建数组 方括号的语法如下。 $比萨饼=括号 “奶酪”,然后 这种双箭头符号, 8.99,“辣”,箭头10.99-- 9.99, 等等。 所以,这是怎么回事吗? 什么是我真正在做什么? 我创建键值对映射。 因此,而不是说,例如, 比萨饼0,1片,比萨饼2, 我现在可以说的比萨饼 奶酪,香肠比萨饼, 并参考值 与之相关联。 因此,这里有我们的钥匙为绿色。 奶酪,香肠, 蔬菜,水牛鸡。 这里是使箭头 该键值对的映射。 然后这里的值 在该阵列的位置。 因此,这等于是说阵列0等于8.99。 最关键的是0。 该值是8.99。 我现在可以说阵列奶酪,或在此 案例比萨奶酪,奶酪是关键, 而且我发现在 比萨奶酪是8.99。 这就是我发现那里的价值。 因此,我可以说这样的话。 $比萨奶酪= 7.99。 说我有一个转让。 我想dis--我要降 奶酪比萨饼的价格。 或者,我可以用蔬菜 比萨饼的条件的一部分, 或者我可以添加新的元素,我 阵列,就像我可以做以前。 我可以添加新的元素,这 关联数组键“腊肉” 和值13.49。 但这种引入了一个问题, 如果你想想看一秒钟。 我们如何在这个数组中循环? 对? 在C语言中,我们只是有一个 for循环,典型地,该 在从0运行至 减1的阵列的大小。 阵列具有在n个元件,所述 有效的索引是0到n减去1。 因此,我们可以使用一个for循环 逐步完成每一个元素。 但是,这不是真的 一样了,对不对? 现在,我们有键值对 映射,其中键是的话, 我们如何遍历所有的话吗? 好了,幸运的是,PHP有 一个方法来处理这​​件事, 所以我们会跳回 以循环为第二 引入第四种循环的 存在于PHP称为foreach循环。 什么foreach循环的作用是 它基本上是同样的想法。 你可以用它为任何类型的数组。 但它基本上是 同样的想法作为一个for循环, 只是,而不是使用 索引号,你只要 有这样的语法怪异在哪里 你叫的每一个元素 一个名称这个循环的目的。 因此,在这种情况下, 的foreach($数组$键)。 基本上,该评论指出, 这foreach循环内, 它会走了过来每一个 $阵列,其通常的元件 将是一个关联数组, 但真正能成为任何类型的数组 要在PHP。 而每一次,在 一个for循环你可能 说$数组方括号 $我,你可以只说$键。 这样$键变成一个别名为每 你的PHP关联数组的索引, 所以你可以使用它这样。 因此,例如,我们已经 现在得到我们的比萨饼阵列。 那种我塞到 到角落里有 所以我们可以用它做一个简单的例子。 如果我说的foreach($比萨饼 $比萨饼),好了,发生了什么? 好吧,我会遍历每个 数组$比萨饼的单个元素, 并在这样做,我会打电话给 每一个元素,当我里面 对身体的循环,$比萨饼。 所以这是形式的 替身,回忆,那$比萨饼 是替身的说法 $比萨饼方括号$ I 如果我们用一个for循环,在那里我们 可以去从$ i = 0到,在这种情况下, $ I = 3。 如果我们没有键值对 这里,这将是元件0,1,2,3, 我们会用一个for循环去 $比萨饼0,$比萨饼1​​,$比萨饼2, $比萨饼3。 所以,现在只需$比萨饼代 该专用密钥。 那么,这是怎么回事打印出来? 我打印出$比萨饼。 我该怎么找at-- 如果我打印出$比萨饼,$ I? 对? 如果我要打印出来 比萨饼的第i个元素, 我该怎么打印? 我要打印出来的 在该位置值,对不对? 就像如果我们这样做 这在C的范围内, 我们通常不会使用我们的迭代器 变量,INT I = 0,i为小于3, 我+ +,打印出0,1,2,3。 我们打​​印出数组0, 阵列1,阵列2,阵列3。 所以这是什么打印出来是这样的。 它的价格列表。 8.99,9.99,10.99,11.99。 现在,快速注意到这里。 foreach循环并不一定 为了打印出的东西。 它不能保证。 它通常不会。 它通常设在顺序 该元素被添加到阵列中, 因此只需牢记这一点。 它可能不是为了。 但foreach循环将遍历 横跨每一个元件 所讨论的阵列。 在这种情况下,再次, 该数组是$比萨饼。 如果我可以改变语法,不过, 我想同时得到键和值。 与其说$比萨饼 为$比萨饼,我可以这样说。 如果你看一下我所 这里以绿色突出显示, 它看起来像一个键值对映射。 所以,如果你 - 即使你是不是 完全知道它要干什么, 你可能已经猜到 即$馅料是怎么回事 要在这种情况下,键和 $价格将是价值。 所以我现在替换的每一个元素 的$比萨作为一个键值对, 现在我可以参考的关键和 值,这可能会派上用场, 例如,如下所述。 “一个整体” - 这是一个很大的 印刷回事这里 - “一个整体” 一流“比萨饼成本$”的价格,然后 我打印出一个句点和一个反斜杠ñ。 所以,现在,通知我再一次有机会获得 一个键,$摘心,和一个值,$价格。 所以,你能猜出这是什么 将要打印出来? 有很多打印报表, 但只有一个反斜杠N, 所以它要打印的东西 在一个单一的代码行的entire--。 如果我可以参阅键 和的值,则现在, 而不是仅仅能够 打印出来的价格, 我可以打印出这样的事情。 “整整一个奶酪比萨售价$ 8,99。” 而现在,我使用所有的keys--的 奶酪,香肠,蔬菜, 水牛chicken--和的值。 8.99,9.99,10.99,11.99于是 这只是一种不同的方式 做一个foreach循环,而不是 只是给你访问到的值, 它只是给你 - 它给你 访问的键和值。 因此打印出的信息。 我已经做了几个 不同的方式,你可能已经注意到。 这两个函数,我们已经主要 看到的都是打印和回声。 而对于几乎所有意图和 目的,他们是完全一样的。 They're--有一个非常微妙 区别这不值得 进入,但基本上无处不在 您可以使用打印你大概可以使用 回声也是如此。 而这还不是只有两个。 PHP有很多不同 方法来打印东西出来, 它也有方法来整合 变量到字符串中间。 因此,从C回想一下,你 记得有什么功能 我们可以用它来替代变量 成的事情,我们要打印出来? 你可能使用此 功能相当多。 printf的,对不对? 因此,这是我们以前里面有 我们foreach循环的上下文中。 我们有这五个 单独的打印报表, 因为这是唯一的 这样,我真的知道的时候 如何打印出消息。 我不知道如何整合 变量$摘心到我的PHP代码。 好吧,如果我只是采取了胡乱猜测, printf的,它实际上会起作用。 printf的是,我可以用一个函数 在PHP中,就像我可以在C使用 所以这样的事情,printf的, 再次,我们很熟悉。 第一个%s被替换 与$摘心的价值。 第二个%s被替换 与$价格的价值。 所以我interpellating, 这仅仅是一个奇特的方式 对他说,我坚持了 变量到该位置。 所以我堵在$摘心地方 红色%s是和$的价格,其中蓝色%S 是,然后我就得到消息, “整整一个奶酪比萨售价$ 8,99。” 不是我能做到这一点,但唯一的办法。 也许我会想使用此方法。 其实,这是什么是最常见的 所谓可变质询。 我可以用一个回音。 我可以使用打印也一样,我们拭目以待。 但是,这里发生了什么? 首先,我要 逃离美元符号。 因为还记得,当我们实际上 打印出的比萨饼的价格, 实际上,我是他们的格式为 货币数字与一个美元符号。 但是,我们使用的是美元符号也 代表在PHP中的变量名, 特别是当我 使用卷曲的这种方法 梅开二度变 质询方法,我需要 逃离我的美元符号,因此不 以为我说的是一个变量。 这将实际上, 从字面上打印一个美元符号。 排序所以类推到 你的尽头有看到。 它实际上并不 打印反斜杠N,对不对? 它打印出一个新行字符。 这is--它不会 打印反斜线美元符号, 它会打印出刚 一个美元符号字符。 同样的想法。 转义序列是什么 这些东西被调用。 但是请注意,我没有做 任何形式的%s的替换, 我只是从字面上堵漏 在这些变量。 所以在this--什么会发生在这里 是,$ topping--的价值再次, 只是符合我们一直 谈论这样far--奶酪会得到 插在那里。 而$价格将是任何值 在比萨,方括号,奶酪, 这是8.99。 因此,这也将打印出 “整整一个奶酪比萨售价$ 8,99。” 就像我说的,我可以用 打印取代echo这里, 和功能是 几乎完全一样。 它将打印出同样的事情。 还有另一种方式来做到这一点, 这是另一个优点 PHP工作与字符串。 我们可以做字符串连接。 我们能做到这一点的C,也是如此, 使用称为strcat的函数, 但同样,我们不得不 调用独立的功能。 这是这整个乱七八糟的事情。 我们不得不磅 - 包括string.h中。 这是一家集生产,对不对? 但现在我可以只用这个点运算符 连接字符串在一起。 所以我串联“一个整体”和 那么无论$摘心的价值, 然后又是 字符串,“比萨饼成本$” 然后连接任何 $价格的价值, 然后在最后我 套结上期反斜杠ñ。 所以,这也 打印出“一个整体” - 再次, 如果我们谈论的第一个 这比萨饼array--元素 “整整一个奶酪比萨售价$ 8,99。” 期间,反斜杠N,再次用 在$摘心和$的价格代 对于我们在我们的foreach已明确 环路的键值对映射。 PHP能够处理的功能。 功能进行了排序 整体为C,正如我们所看到的。 像变量,我们并不需要 指定函数的返回类型, 因为它其实并不重要。 我们不指定 的任何参数的数据类型, 因为他们并不真正 的事情,就像我们已经看到了PHP。 每个功能介绍 用函数关键字。 这就是我们指示PHP中 我们正在谈论的是一个函数。 我们不必 应对主所有, 因为解释器,PHP 解释器,工作从上到下, 而不管。 如果它认为你可以 一个函数调用,它会 去寻找函数调用, 即使是后话。 但它会从顶部读 底部,所以我们并不需要指定, 这里就是你开始。 你开始对1号线的 PHP和从那里工作了。 因此,这里是我们如何创造 一个函数调用hard_square。 这显然​​需要一个 参数,我打电话$ X。 此功能是复杂的刚 说明各种东西。 我们仍然有返回值。 我使用一个for循环在这里。 但它基本上只是,这是什么 达只是$ x次$ X。 什么我实际上做的是刚刚加入 x可0 x次或$ X为零$ x次。 但它有效地正是 同乘$ x次$ X。 我仍然可以返回一个值, 在这种情况下$结果, 我已经取得了PHP函数。 下面是如何使用它的上下文中。 所以,也许我的一些PHP文件里。 蓝色有该通知 我用我的PHP的分隔符, 尖括号问号PHP。 在这些之间的所有 我想写的PHP。 所以我显然要get-- 我要提示用户 给我一个数字,商店 变量,存储在变量$ X, 不管他们给了我。 然后,我要呼应 hard_square该值的, 显然打算 要钉在一个新行 还有,再后来我就 定义hard_square因此函数 当我做了 来电hard_square, 它知道我在说什么。 现在,我也可以做 这样的事情。 此略有不同。 这几乎完全 同我们以前看到的, 但不是说只是$ X 有作为参数传递给hard_square, 我说的$ X = 10。 因此,这是一个例子 防御性编程, 守着你的程序 防范恶意用户。 这是做一些错误的一种方式 检查我们并没有真的 有在C.一个选项,我们永远无法 指定的东西的默认值。 我们总是不得不检查 是否,例如, 如果我们打了一个电话给GetString,它是 最合适的,如果立即之后我们 经检查发现,我们检查 是否字符串 用户给了我们 不等于空, 因为我们不希望启动 使用的是空字符串。 这里,这是一种 警惕这一点。 如果用户没有为我们提供什么 不知怎么的,什么是我们该怎么办? 好了,我们只想说什么 他们没有向我们提供, 我们只是在10堵塞代替。 所以,如果他们不给我们一个值, 只需使用10默认情况下。所以在这里, 请注意,我在做 打电话给hard_square, 但没有提示 给用户的,对不对? 我只是做一个空的电话。 但我的功能hard_square 期望的参数。 这是什么打算打印出来? 这将打印出100,对不对? 因为用户没有 给我任何东西。 所以,我只是要承担 即10-- 10是默认值。 所以这将打印 出100在自己的行。 PHP文件不必 只是一个单一的文件。 您可以将多个文件合并在一起, 就像你可以在C.方式 我们这样做,在C是典型的做 #包括让头文件拉到研究。 我们不这样做,在PHP。 我们做一些所谓的require_once。 再有就是这整个 首先,这是什么__DIR__? 这只是一个特殊的 变量或特殊常量, 真的,指定什么 当前目录。 所以它要看看 在当前目录 对于一个名为cs50.php 这里在本例中, 而且它要坚持该文件 在你的PHP程序的顶部, 假设你把需要 一旦在你的PHP文件的第一行。 因此,PHP主要使用, 但不排他使用, 作为基于网络的编程语言。 那它到底是如何走过来的。 但它是一个完整的 语言,因为我们已经看到了。 我们已经看到了几乎所有的东西 它可以做类似于C, 它可以做赫克 很多不止于此。 但由于它是一个完整的语言,我们 可以在里面做的命令行程序。 我们可以运行命令行程序。 所有这一切需要运行一个命令 这是写在PHP行程序 是你有一个PHP解释器。 所以,这有点类似于 有一个编译器在系统上 如果你想编译C代码 把它变成可执行文件。 你需要有一个PHP解释器 存在你的系统上 这样就可以解释PHP文件。 假设你做什么,通常 这个解释被称为PHP, 并且它通常捆绑在最 下载或PHP的安装 你可以上网,而且肯定 PHP解释器的名称 我们在CS50,IDE。 你要做的就是类型的PHP文件。 而你的程序的 要做的是它的 经过运行 解释器,它的 将忽略一切的 没有问题mark--之间 或者,尖括号问号PHP的, PHP的分隔符,并打印出来, 它会解释和执行的 你的PHP定界符内部代码。 因此,让我们跳出交给CS50 IDE和 看看一对夫妇的PHP文件, 跑了几个PHP文件,在 命令行CS50的IDE接口。 所以在这里我们是在CS50的IDE, 我已经采取了自由 中打开一个名为hello1.php文件。 此,显然,其内容 文件只是PHP的分隔符有, 而在,回声之间(“你好,世界”)。 这是一个非常简单的PHP程序。 我只是要向下滚动 我的终端窗口在这里, 我要去键入PHP hello1.php,按下回车键。 你好,世界。 这大概就是我们 希望它做的,对不对? 让我们去,并采取 另外看一个节目。 hello2.php。 几乎是同样的事情, 不是有很多事情在这里。 这一次,虽然,我要提示 用户给我自己的名字。 我再次使用了readline的功能。 $名称= readline的。 这提示,“你叫什么名字?” 显然,我打印 它在自己的行。 然后,下面这样的线 这将是提示 用户可以在其中输入他们的名字。 然后,我使用了一点点 可变置疑这里第3行 打印出“你好”和 无论用户类型。 因此,这是在说,你好, 逗号,%S如果我们在C.用printf 因此,让我们去解释这个计划。 所以,再一次,我会向下滚动 我的终端窗口。 PHP hello2.php。 你叫什么? 道格。 您好,道格。 我也有另一种 所谓的文件hello3.php。 我要清楚我 屏幕控制L, 我要去执行的。 你叫什么? 道格。 您好,道格。 所以该行为是相同 hello2.php,但为什么它hello3.php? 那么,这里的区别。 在这种情况下,通知 上这里1号线, 我有东西是不是 在PHP分隔符之间。 我只是打印out--还是我 刚键入,“你叫什么名字?” 当PHP解释器看到这一点, 已经不知道该怎么解释为PHP, 等等,而不是失败, 它只是要吐了出来。 因此,第3行注意到,现在,我的呼吁 readline的,没有任何提示了。 我只是真的要用于:当 PHP解释器看到这一点, 它会打印出 “你叫什么?” 然后,它认为,哦,好吧,here's-- 一切将是 解释为PHP的,所以 这就是为什么这个工程。 我不必一定提示 的readline内的用户用于:, 我可以把它外面 PHP的分隔符 并允许解释器 刚刚打印出来给我。 所以,你实际上并不只 有一组PHP的分隔符 在你的程序。 实际上,你可以有几个人, 开,并根据需要关闭它们。 因此,让我们一起来看看 在几个方案 在CS50 IDE我们 说明这个道理具有 多组分隔的PHP。 好了,我已经打开的文件 这里所谓的add1.php。 同时注意这里发生了什么。 与以前一样,我有一个 单一的PHP设置分隔符。 我要打印出来的 消息,“请给我一个数字。” 然后我会读线 其存储在变量$ NUM1。 然后,我要打印出来了。 给我第二个数字。 阅读从用户,存储一行 无论他们输入在$ NUM2。 添加在一起并存储 导致一个名为$总和变量, 然后打印出“的 这两个数字的总和 是“,然后interpellate 有变量$总和。 因此,让我们只需要运行这个 通过翻译 要确认这是我们所期望的。 PHP add1.php。 请给我一个数字,3。 请给我第二个数字,4。 这两个数字的总和是7。 这就是3加4。 好不好? 所以没有什么可怕看中那里。 现在,让我们打开了add2.php。 在这里,我有一对夫妇的PHP 分隔套在那里,对不对? 线路1,3--线1和 3没有PHP的分隔符。 所以当翻译 看到他们,这只是 要吐了出来正好 我所输入那里。 所以这就是我 做所有我的提示。 上线2和4中,我们看到了非常 熟悉的$?的PHP类分隔符, 所以这两个行是 将作为PHP执行。 然后在第5行,我有这样的 奇怪的事情就在这里,对不对? 这个角度支架 问号等号。 我甚至会放大得远一点。 你可以看到这就是我 说起在那里,这$?=。 事实证明,这是很常见的, 我们开辟了一套PHP的原因 定界符是打印出的值。 这就是我们要做的。 但是,甚至还有速记的。 $?=是PHP简写说 类似$?PHP的echo总和 的NUM1与NUM2。 因此,这只是另一种 速记的。 所以,如果我运行这个程序,PHP add2.php。 我会放大下跌一点点。 请给我一个数字,4。 请给我第二个数字。 而且因为我真的不关心 在PHP中的数据类型,我可以说4.8。 这两个数字的总和是8.8。 这个函数的行为非常 就如我们所期望的一样, 为好。 我有一个更加开放 在这里所谓的dice.php。 再试试这个。 我有一个更这里所说的 dice1.php,这也见, 有一个尖括号问题 在那里庆祝等号符号, 但是请注意,在这种情况下,我 调用函数兰特,你这 可能期望产生一个随机数。 “你滚了,”并且这将 计算一些随机数,模6 + 1。 所以这会给我一些 为1〜6的范围内。 请记住,国防部6会给我 一个数为0〜5的范围内, 但如果我在模拟掷骰, 这就是我在这里做, 我不希望这些骰子从0去 至5,我想骰子从1至6。 所以这是一种方式来获得 我在1至6的范围内。 我这样做两次。 因此很明显,我压延 两个骰子此计划。 所以,我清楚我的屏幕, 我会做的PHP dice1.php。 您掷出4和2。 如果我运行的程序 再次,你滚5和5。 所以,我每次运行程序时, 我得到不同的号码, 因为每次我这样做 所以,它开始了。 这将生成一个新的 设置随机数我的。 因此,如果我们已经习惯了 从C运行的程序, 我们已经习惯了打字./的 一个程序的名字吧? 这就是我们如何做的一切 我们在C程序为止。 我们可以在PHP中做到这一点,以及 通过添加一种叫 一个家当我们的PHP文件的顶部。 我知道这是一种愚蠢的词。 这是短期的哈希爆炸。 这是前两个字符出现。 还记得我们称之为感叹号 经常一声巨响计算机科学。 这也可能是尖锐的爆炸。 有一对夫妇的方式来解释它。 但它基本上是一种特殊的 命令的PHP解释器 理解为,哦,我想 您可以执行该程序, 这显然​​是/用户/斌/ PHP的,这 实际上,其中的PHP解释器 特别是住在我们的系统。 所以it's--这里发生的事情是 解释明白,哦, 我显然应该使用 这一计划运行此文件。 所以,它可以让你 跳过步骤 不必去说PHP something.php。 还有另一个抓 在这里,这是,如果我们 希望我们的节目 达到预期效果,我们 需要做一些所谓的 文件权限的改变。 我们将go--和我们谈一点 更多的有关文件权限更改 在我们的视频MVC的,但我只想 说这就是你需要做的 为了使您的 .php文件的可执行文件。 因此,让我们来看看本作 我们在CS50 IDE最后的例子了。 所以在这里的IDE我在这两个文件 这似乎不是PHP目录 所谓的.php。 我有一个称为函数add-- 我有一个名为ADD3 并要求文件dice2。 因此,让我们快速浏览 外观和开拓ADD3。 正如你所看到的,在开始 我的文件我有这个家当,对不对? 该散列标记感叹号。 现在,你也可能 注意到,由于某种原因, 我没有任何语法 突出了, 这就是我前面提到, 这是说,如果我没有名字我的文件 .PHP,我没有好处 语法高亮了。 这个文件就被称为ADD3。 所以,我可以在以后运行 以./ ADD3,而不是./ add3.php。 所以reason--它仍然 很好,它仍然是有效的PHP, 但它没有语法高亮,因为 该文件不叫something.php。 这是唯一的真正的区别 这里,加上家当。 因此,让我们看看会发生什么时, 我尝试运行此程序。 ./ ADD3,就像我会与C猛砸。 ./ ADD3权限被拒绝。 这是你将成为怎样 就看你忘了 使用chmod命令更改 该文件的权限。 事实证明,常规PHP 文件不能只是执行。 他们可以理解,但我们 做的东西在这里有点不同。 我们正在执行它。 所以我需要添加权限 执行,文件模式一+ X到ADD3。 那么我可以说./ ADD3。 请给我一个号码。 5,6。 这两个数字的总和为11。 同样的,我已经chmoded dice2,这样我就可以只输入./ dice2, 你推出一个1和一个1,你 轧制一个5和4,等等。 所以这是相当多的 一个PHP语法的想法,对吧? 有很多打通,我知道了。 但希望你现在已经看到PHP 是不是真的那么从C不同 真是给了我们的能力 拿东西了一个或两个档次。 我们真的不担心 太多about--我们真的不 不得不过分担心 低级别的细节,我们 不用担心用C,对不对? 我们可以专注于更高 级别的东西,PHP 使我们能够做的,并采取了 想当然地认为它会为我们工作。 所以,它给了我们的能力,现在, 从C过渡到PHP, 使该是多了很多方案 复杂,或许很多更稳健。 所以,我希望你有乐趣的工作 用PHP,我是道格·劳埃德。 这是CS50。