1 00:00:00,000 --> 00:00:02,610 [Powered by Google Translate] [Phần 8 thoải mái hơn] 2 00:00:02,610 --> 00:00:04,910 [Rob Bowden - Đại học Harvard] 3 00:00:04,910 --> 00:00:07,070 [Đây là CS50. - CS50.TV] 4 00:00:11,520 --> 00:00:14,160 >> Những phần ghi chú tuần này sẽ là khá ngắn, 5 00:00:14,160 --> 00:00:19,070 vì vậy tôi chỉ cần đi để tiếp tục nói chuyện, các bạn sẽ tiếp tục đặt câu hỏi, 6 00:00:19,070 --> 00:00:22,720 và chúng tôi sẽ cố gắng để điền vào càng nhiều càng tốt. 7 00:00:22,720 --> 00:00:31,950 Rất nhiều người nghĩ rằng rằng pset này không nhất thiết phải là khó khăn, nhưng nó rất dài. 8 00:00:31,950 --> 00:00:37,070 Các spec pset chính nó có một giờ để đọc. 9 00:00:40,530 --> 00:00:45,730 Chúng tôi cung cấp cho bạn rất nhiều SQL bạn có thể có thể cần phải sử dụng. 10 00:00:45,730 --> 00:00:50,520 Chúng tôi hướng dẫn bạn qua rất nhiều của nó, vì vậy nó không phải là quá xấu. 11 00:00:50,520 --> 00:00:54,560 Có ai bắt đầu hoặc kết thúc? 12 00:00:55,380 --> 00:00:59,710 Đó là pset cuối cùng. Oh, Thiên Chúa của tôi. 13 00:00:59,710 --> 00:01:05,400 Thông thường có JavaScript sau này, nhưng mọi thứ thay đổi lịch 14 00:01:05,400 --> 00:01:09,560 làm cho mọi thứ ngắn hơn 1 tuần, và chúng tôi không còn có một pset JavaScript. 15 00:01:09,560 --> 00:01:12,310 Tôi không biết làm thế nào có ảnh hưởng đến JavaScript là sẽ xuất hiện vào kỳ thi 16 00:01:12,310 --> 00:01:15,510 hoặc quiz 1. 17 00:01:15,510 --> 00:01:22,260 Tôi tưởng tượng nó sẽ là một cái gì đó như bạn cần phải biết những điều cao cấp về JavaScript, 18 00:01:22,260 --> 00:01:26,460 nhưng tôi nghi ngờ chúng tôi chỉ muốn cung cấp cho bạn tiếp mã JavaScript 19 00:01:26,460 --> 00:01:28,720 kể từ khi bạn đã không có một pset trong đó. 20 00:01:28,720 --> 00:01:33,000 Nhưng đó là công cụ cho bài kiểm tra đánh giá vào tuần tới. 21 00:01:33,000 --> 00:01:36,320 >> Phần của câu hỏi. 22 00:01:36,320 --> 00:01:43,870 Rất nhiều các công cụ này là hơi kém worded, nhưng chúng tôi sẽ thảo luận về lý do tại sao. 23 00:01:43,870 --> 00:01:50,220 Không giống như C, PHP là một ngôn ngữ "năng động, đánh máy". Này có nghĩa gì, bạn yêu cầu? 24 00:01:50,220 --> 00:01:53,830 Vâng, nói lời tạm biệt với tất cả những float, char, int, và các từ khoá khác bạn cần phải sử dụng 25 00:01:53,830 --> 00:01:56,190 khi khai báo các biến và chức năng trong C. 26 00:01:56,190 --> 00:02:00,420 Trong PHP, một loại của biến được xác định bởi giá trị mà nó hiện đang nắm giữ. 27 00:02:00,420 --> 00:02:04,990 Vì vậy, trước khi chúng tôi gõ mã này vào một tập tin gọi là dynamic.php, 28 00:02:04,990 --> 00:02:12,670 PHP là tự động gõ. Đó là sự thật. 29 00:02:12,670 --> 00:02:17,590 Tôi không đồng ý với thực tế rằng điều đó có nghĩa là chúng tôi đang nói lời tạm biệt với char, float, int, 30 00:02:17,590 --> 00:02:20,620 và các từ khóa khác. 31 00:02:20,620 --> 00:02:25,510 Sự khác biệt chính xác giữa động gõ và thay thế, 32 00:02:25,510 --> 00:02:32,010 mà là tĩnh đánh máy, đó là tạo kiểu động, tất cả các kiểm tra kiểu và các công cụ của bạn 33 00:02:32,010 --> 00:02:37,350 xảy ra tại thời gian chạy, trong khi tĩnh đánh máy xảy ra tại thời gian biên dịch. 34 00:02:37,350 --> 00:02:43,030 Từ tĩnh nói chung dường như có nghĩa là những thứ thời gian biên dịch. 35 00:02:43,030 --> 00:02:48,170 Tôi đoán có sử dụng khác cho nó, nhưng trong C khi bạn khai báo một biến tĩnh, 36 00:02:48,170 --> 00:02:52,650 lưu trữ của nó được phân bổ tại thời gian biên dịch. 37 00:02:52,650 --> 00:02:59,260 Ở đây, động gõ chỉ có nghĩa là - 38 00:02:59,260 --> 00:03:04,350 Trong C nếu bạn cố gắng thêm một chuỗi và một số nguyên, khi bạn biên dịch nó, 39 00:03:04,350 --> 00:03:11,000 nó sẽ khiếu nại vì nó sẽ nói rằng bạn không thể thêm một int và một con trỏ. 40 00:03:11,000 --> 00:03:14,710 Nó chỉ không phải là một hoạt động hợp lệ. 41 00:03:14,710 --> 00:03:21,170 Đó là một điều mà chúng tôi sẽ nhận được trong một lần thứ hai. 42 00:03:21,170 --> 00:03:24,860 Nhưng đó là loại kiểm tra, thực tế là nó than phiền tại thời gian biên dịch, 43 00:03:24,860 --> 00:03:29,220 là kiểm tra kiểu tĩnh. 44 00:03:29,220 --> 00:03:35,220 Có những ngôn ngữ mà bạn không cần phải nói char, float, int, và tất cả những điều đó, 45 00:03:35,220 --> 00:03:40,940 nhưng ngôn ngữ có thể nói từ bối cảnh của điều gì loại đó là nghĩa vụ phải được, 46 00:03:40,940 --> 00:03:43,980 nhưng nó vẫn tĩnh đánh máy. 47 00:03:43,980 --> 00:03:49,000 Vì vậy, nếu bạn có 51, OCaml, bạn không bao giờ cần phải sử dụng bất kỳ các loại, 48 00:03:49,000 --> 00:03:58,700 nhưng nó vẫn sẽ tại thời gian biên dịch nói rằng bạn không thể làm điều này bởi vì bạn đang trộn một int và một chuỗi. 49 00:03:58,700 --> 00:04:05,650 Động gõ chỉ có nghĩa là đôi khi trong thời gian chạy, bạn sẽ nhận được đơn khiếu nại. 50 00:04:05,650 --> 00:04:13,430 Nếu bạn cũng đã được sử dụng Java trước, nói chung, hầu như bất kỳ ngôn ngữ C 51 00:04:13,430 --> 00:04:20,070 sẽ được tĩnh đánh máy, do đó, C, C + +, Java, tất cả những người thường được tĩnh đánh máy. 52 00:04:20,070 --> 00:04:22,910 Trong Java khi bạn biên dịch một cái gì đó và bạn đang nói 53 00:04:22,910 --> 00:04:26,670 string s bằng một cái gì đó mới mà không phải là một chuỗi, 54 00:04:26,670 --> 00:04:28,950 đó là sẽ phàn nàn vì những loại không phù hợp lên. 55 00:04:28,950 --> 00:04:31,180 Điều đó đang xảy ra khiếu nại tại thời gian biên dịch. 56 00:04:31,180 --> 00:04:36,750 Nhưng nó cũng có một thời gian năng động, những thứ như nếu bạn cố gắng để đúc một cái gì đó 57 00:04:36,750 --> 00:04:40,500 một loại cụ thể hơn so với loại hiện hành của nó, 58 00:04:40,500 --> 00:04:45,610 không có gì nó có thể làm tại thời gian biên dịch để kiểm tra cho dù đó là dàn diễn viên sẽ thành công. 59 00:04:45,610 --> 00:04:51,130 Java cũng có một số loại động kiểm tra rằng ngay sau khi nó được cho rằng dòng mã 60 00:04:51,130 --> 00:04:54,130 khi nó thực sự thực hiện, nó sẽ làm các diễn viên, 61 00:04:54,130 --> 00:04:56,260 kiểm tra xem nếu đó là dàn diễn viên là hợp lệ ở nơi đầu tiên, 62 00:04:56,260 --> 00:04:59,890 và nếu nó không được, sau đó nó sẽ phàn nàn rằng bạn có một loại không hợp lệ. 63 00:04:59,890 --> 00:05:03,200 Năng động, kiểm tra kiểu. 64 00:05:03,200 --> 00:05:07,010 Loại này thành một tập tin gọi là dynamic.php. 65 00:05:10,130 --> 00:05:12,380 Dynamic.php. 66 00:05:14,580 --> 00:05:17,190 Tôi sẽ giải nén định dạng. 67 00:05:18,750 --> 00:05:21,880 Chúng tôi có một biến, chúng tôi đặt nó vào các số nguyên 7, 68 00:05:21,880 --> 00:05:27,930 sau đó chúng ta sẽ in và% s - 69 00:05:27,930 --> 00:05:32,830 Ồ, chúng tôi đang in các loại của nó, do đó, GetType là sẽ trả về kiểu của biến. 70 00:05:32,830 --> 00:05:35,720 Chúng tôi chỉ in các loại hơn và hơn nữa. 71 00:05:35,720 --> 00:05:39,440 Chúng tôi chỉ php.dynamic.php. 72 00:05:39,440 --> 00:05:45,920 Chúng ta sẽ thấy nó thay đổi từ số nguyên để chuỗi Boolean như chúng tôi đi qua. 73 00:05:45,920 --> 00:05:54,590 Trong C không có kiểu dữ liệu Boolean, không có dữ liệu kiểu chuỗi. 74 00:05:54,590 --> 00:06:00,500 Có char * và Boolean chỉ có xu hướng được int hoặc char hoặc một cái gì đó. 75 00:06:00,500 --> 00:06:05,690 Trong PHP các loại tồn tại, và đó là một trong những lợi thế lớn của PHP trên C - 76 00:06:05,690 --> 00:06:13,290 chuỗi hoạt động là vô cùng dễ dàng hơn trong PHP hơn C. Họ chỉ làm việc. 77 00:06:13,290 --> 00:06:18,290 >> Vì vậy, chúng tôi quay lại đây. 78 00:06:18,290 --> 00:06:21,260 Chúng tôi chạy dynamic.php. 79 00:06:21,260 --> 00:06:26,710 Điều này nói với các thông dịch viên PHP, php, để chạy các mã PHP trong dynamic.php. 80 00:06:26,710 --> 00:06:30,250 Nếu bạn có bất kỳ lỗi nào trong tập tin, các thông dịch viên sẽ cho bạn biết! 81 00:06:30,250 --> 00:06:39,110 Phiên dịch, đây là một sự khác biệt lớn giữa PHP và C. 82 00:06:39,110 --> 00:06:48,200 Trong C, bạn phải biên dịch một cái gì đó và sau đó bạn chạy tập tin đó biên soạn. 83 00:06:48,200 --> 00:06:50,490 Trong PHP bạn không bao giờ biên dịch bất cứ điều gì. 84 00:06:50,490 --> 00:06:57,200 Vì vậy, các thông dịch viên PHP cơ bản chỉ đọc dòng này bằng dòng. 85 00:06:57,200 --> 00:07:02,900 Nó cập var = 7 sau đó nó cập printf sau đó nó cập var sau đó nó cập printf và vv. 86 00:07:02,900 --> 00:07:10,910 Có một chút biên dịch nó, và nó lưu trữ kết quả 87 00:07:10,910 --> 00:07:15,510 vì vậy nếu bạn chạy kịch bản sau đó bạn có thể làm một số người, 88 00:07:15,510 --> 00:07:19,280 nhưng về cơ bản nó là một đường bằng cách sắp xếp dòng điều. 89 00:07:19,280 --> 00:07:25,280 Điều đó có nghĩa là rất nhiều tối ưu hóa mà chúng tôi nhận được trong C, 90 00:07:25,280 --> 00:07:31,920 như biên dịch, nó chỉ nói chung trình biên dịch có thể làm rất nhiều thủ đoạn cho bạn. 91 00:07:31,920 --> 00:07:36,110 Nó có thể biến không sử dụng, nó có thể làm tất cả các loại của sự vật, 92 00:07:36,110 --> 00:07:38,660 nó có thể làm đệ quy đuôi. 93 00:07:38,660 --> 00:07:42,550 Trong PHP bạn sẽ không nhận được rằng lợi thế 94 00:07:42,550 --> 00:07:45,690 bởi vì nó sẽ chỉ bắt đầu thực hiện dòng từng dòng, 95 00:07:45,690 --> 00:07:49,950 và nó không thực sự nhận ra những điều này một cách dễ dàng 96 00:07:49,950 --> 00:07:54,440 vì nó không phải 1 pass biên soạn lớn hơn điều này và sau đó thực hiện; 97 00:07:54,440 --> 00:07:56,860 nó chỉ là từng dòng. 98 00:08:00,730 --> 00:08:02,750 Vì vậy, đó là các thông dịch viên. 99 00:08:02,750 --> 00:08:06,840 >> Sao gõ năng động của chúng tôi: đẹp, thoáng mát, eh? 100 00:08:06,840 --> 00:08:08,640 Bạn chắc chắn không thể làm điều đó trong C! 101 00:08:08,640 --> 00:08:11,860 Bây giờ, xem nếu bạn có thể hình dung ra kiểu của mỗi người trong số các giá trị sau. 102 00:08:11,860 --> 00:08:14,760 Xem này để tham khảo. 103 00:08:14,760 --> 00:08:19,420 Vì vậy, 3,50. Loại nào bạn nghĩ rằng đó sẽ là? 104 00:08:24,480 --> 00:08:26,370 Dưới đây là những loại mà chúng ta có. 105 00:08:26,370 --> 00:08:30,430 Chúng tôi có bools, số nguyên, điểm nổi, chuỗi, mảng, các đối tượng, 106 00:08:30,430 --> 00:08:38,370 và sau đó tài nguyên, mà là loại mơ hồ. 107 00:08:38,370 --> 00:08:41,010 Tôi nghĩ rằng có thực sự là một ví dụ ở đây. 108 00:08:41,010 --> 00:08:43,740 Sau đó có NULL. NULL là một loại hình đặc biệt. 109 00:08:43,740 --> 00:08:47,140 Không giống như C nơi NULL chỉ là một con trỏ với địa chỉ 0, 110 00:08:47,140 --> 00:08:54,930 trong PHP, NULL là kiểu riêng của nó điều chỉ có giá trị của loại hình đó là NULL. 111 00:08:57,560 --> 00:09:00,670 Điều này là rất hữu ích cho việc kiểm tra lỗi. 112 00:09:00,670 --> 00:09:04,310 Trong C, nơi chúng tôi có vấn đề này mà nếu bạn trở về NULL, 113 00:09:04,310 --> 00:09:08,660 không có nghĩa là bạn đang trở về một con trỏ NULL hoặc bằng cách sử dụng NULL để biểu lỗi 114 00:09:08,660 --> 00:09:12,380 hoặc tất cả của sự nhầm lẫn đó, chúng tôi đã có tại một thời điểm. 115 00:09:12,380 --> 00:09:18,440 Ở đây, trở về NULL thường có nghĩa là lỗi. 116 00:09:20,860 --> 00:09:27,300 Rất nhiều thứ cũng trở về sai lỗi. 117 00:09:27,300 --> 00:09:33,140 Nhưng điểm là loại NULL, điều duy nhất các loại NULL NULL. 118 00:09:33,140 --> 00:09:40,090 Sau đó, gọi lại cũng giống như bạn có thể xác định một số chức năng ẩn danh. 119 00:09:40,090 --> 00:09:46,420 Bạn không cần phải cung cấp cho các chức năng một tên, nhưng bạn sẽ không phải đối phó với điều đó ở đây. 120 00:09:46,420 --> 00:09:53,940 Nhìn vào các loại mà họ mong đợi chúng ta biết, 121 00:09:53,940 --> 00:09:59,000 làm những gì bạn nghĩ rằng các loại là 3,50? >> [Sinh viên] nổi. 122 00:09:59,000 --> 00:10:00,370 Yeah. 123 00:10:00,370 --> 00:10:06,290 Vì vậy, sau đó ở đây, bạn làm những gì nghĩ rằng loại này? >> [Sinh viên] Array. 124 00:10:06,290 --> 00:10:09,890 Yeah. Người đầu tiên là thả nổi, điều thứ hai là một mảng. 125 00:10:09,890 --> 00:10:14,500 Chú ý rằng mảng này là không giống như một mảng C 126 00:10:14,500 --> 00:10:19,610 nơi bạn có chỉ số 0 có một số giá trị, chỉ số 1 có một số giá trị. 127 00:10:19,610 --> 00:10:26,320 Các chỉ số a, b, c và các giá trị là 1, 2, và 3. 128 00:10:26,320 --> 00:10:33,980 Trong PHP có là không có sự khác biệt giữa một mảng kết hợp và chỉ cần một mảng thường xuyên 129 00:10:33,980 --> 00:10:36,740 như bạn sẽ nghĩ về nó trong C. 130 00:10:36,740 --> 00:10:43,040 Có chỉ này, và bên dưới mui xe một mảng thường xuyên chỉ là một mảng kết hợp 131 00:10:43,040 --> 00:10:50,000 0 bản đồ để một số giá trị theo cùng một cách một bản đồ để một số giá trị. 132 00:10:50,000 --> 00:11:00,410 Vì lý do này, PHP có thể được khá xấu mã / điểm chuẩn những điều thực sự nhanh chóng 133 00:11:00,410 --> 00:11:07,930 trong C từ khi bạn đang sử dụng một mảng, bạn biết rằng việc truy cập vào một thành viên là hằng số thời gian. 134 00:11:07,930 --> 00:11:11,860 Trong PHP truy cập vào một thành viên là những người hiểu biết bao nhiêu thời gian? 135 00:11:11,860 --> 00:11:18,970 Đây có thể là liên tục nếu nó băm một cách chính xác. 136 00:11:18,970 --> 00:11:21,620 Ai biết được những gì nó thực sự làm bên dưới mui xe? 137 00:11:21,620 --> 00:11:25,600 Bạn thực sự cần phải nhìn vào thực hiện để xem nó như thế nào để đối phó với điều đó. 138 00:11:25,600 --> 00:11:28,550 Vì vậy, sau đó fopen. 139 00:11:28,550 --> 00:11:36,420 Tôi nghĩ rằng ở đây chúng ta chỉ cần PHP hướng dẫn sử dụng fopen để nhìn vào kiểu trả về. 140 00:11:36,420 --> 00:11:41,260 Chúng ta thấy ở đây bạn có thể nhìn lên khá nhiều bất kỳ chức năng trong hướng dẫn sử dụng PHP 141 00:11:41,260 --> 00:11:47,540 và đây là loại trang người đàn ông của PHP. 142 00:11:47,540 --> 00:11:51,060 Kiểu trả về là có được nguồn tài nguyên. 143 00:11:51,060 --> 00:11:56,050 Đó là lý do tại sao tôi nhìn nó, bởi vì chúng tôi đã không thực sự xác định tài nguyên. 144 00:11:56,050 --> 00:12:04,110 Ý tưởng của các nguồn tài nguyên, trong C bạn loại có một * FILE hoặc bất cứ điều gì; 145 00:12:04,110 --> 00:12:07,200 trong PHP nguồn tài nguyên của bạn tập tin *. 146 00:12:07,200 --> 00:12:10,360 Đó là những gì bạn sẽ đọc từ, đó là những gì bạn sẽ được viết. 147 00:12:10,360 --> 00:12:20,710 Nó thường là bên ngoài, do đó, nó là một nguồn lực bạn có thể kéo những thứ từ và ném những thứ. 148 00:12:20,710 --> 00:12:26,520 Và cuối cùng, loại NULL là gì? >> [Sinh viên] NULL. 149 00:12:26,520 --> 00:12:30,650 Yeah. Vì vậy, điều duy nhất mà là NULL là NULL. 150 00:12:30,650 --> 00:12:33,480 NULL là NULL. 151 00:12:35,490 --> 00:12:41,170 >> Một trong những tính năng của hệ thống kiểu PHP (cho tốt hơn hoặc tồi tệ hơn) là khả năng của mình để sắp xếp các loại. 152 00:12:41,170 --> 00:12:44,390 Khi bạn viết một dòng mã PHP kết hợp các giá trị của các loại khác nhau, 153 00:12:44,390 --> 00:12:46,670 PHP sẽ cố gắng để làm điều hợp lý. 154 00:12:46,670 --> 00:12:48,920 Hãy thử mỗi trong những dòng sau đây của mã PHP. Những gì in ra? 155 00:12:48,920 --> 00:12:51,000 Có gì bạn mong đợi? Tại sao có và tại sao không? 156 00:12:51,000 --> 00:12:58,600 Điều này thực tế về PHP là những gì làm cho nó những gì chúng ta gọi là yếu gõ. 157 00:12:58,600 --> 00:13:04,610 Yếu gõ và gõ mạnh mẽ, 158 00:13:04,610 --> 00:13:06,840 có sử dụng khác nhau đối với những điều khoản, 159 00:13:06,840 --> 00:13:12,020 nhưng hầu hết mọi người sử dụng yếu gõ và gõ mạnh mẽ có nghĩa là các loại điều này 160 00:13:12,020 --> 00:13:15,920 nơi ("1" + 2), mà các công trình. 161 00:13:15,920 --> 00:13:18,290 Trong C mà không làm việc. 162 00:13:18,290 --> 00:13:22,490 Bạn có thể tưởng tượng này không làm việc. 163 00:13:22,490 --> 00:13:29,200 Rất nhiều người kết hợp gõ năng động và gõ yếu và gõ tĩnh và gõ mạnh. 164 00:13:29,200 --> 00:13:34,050 Python là một ví dụ khác của một ngôn ngữ động gõ. 165 00:13:34,050 --> 00:13:41,770 Bạn có thể ném xung quanh các loại trong các biến và nó sẽ xác định tại thời gian chạy 166 00:13:41,770 --> 00:13:44,680 bất kỳ checkings lỗi. 167 00:13:44,680 --> 00:13:50,740 Trong Python nó sẽ thực hiện điều này và nó sẽ thấy ("1" + 2); 168 00:13:50,740 --> 00:13:55,920 và điều này sẽ thất bại bởi vì nó nói bạn không thể thêm một chuỗi và một số nguyên. 169 00:13:55,920 --> 00:14:00,860 Trong PHP, mà chỉ là động gõ, điều này không sẽ thất bại. 170 00:14:00,860 --> 00:14:04,220 Kiểu yếu để làm với thực tế là nó làm những việc với các loại 171 00:14:04,220 --> 00:14:07,800 mà không thực sự có ý nghĩa nhất thiết. 172 00:14:07,800 --> 00:14:17,420 Vì vậy, ("1" + 2), tôi có thể tưởng tượng rằng là chuỗi 12, tôi có thể tưởng tượng nó là chuỗi 3, 173 00:14:17,420 --> 00:14:20,710 Tôi có thể tưởng tượng nó là các số nguyên 3. 174 00:14:20,710 --> 00:14:24,530 Nó không nhất thiết phải được xác định, và có lẽ chúng ta sẽ thấy ở đây 175 00:14:24,530 --> 00:14:29,140 rằng khi chúng tôi in ("1" + 2), nó có thể sẽ kết thúc sự khác biệt 176 00:14:29,140 --> 00:14:32,320 hơn so với in ấn (1 + "2"). 177 00:14:32,320 --> 00:14:39,700 Và điều này có xu hướng được, theo ý kiến ​​của tôi, cho tồi tệ hơn. 178 00:14:39,700 --> 00:14:44,240 Ở đây chúng ta có thể cố gắng. 179 00:14:44,240 --> 00:14:48,740 Một mẹo nhỏ khác về PHP là bạn không cần phải thực sự ghi các tập tin. 180 00:14:48,740 --> 00:14:52,790 Nó đã chạy chế độ lệnh. 181 00:14:52,790 --> 00:14:57,710 Vì vậy, php-r, sau đó chúng tôi có thể ném vào lệnh ở đây: 182 00:14:57,710 --> 00:15:06,610 "Print ('1 '+ 2)", và tôi sẽ ném một dòng mới. 183 00:15:19,550 --> 00:15:23,970 Này in 3. 184 00:15:31,100 --> 00:15:35,330 Nó trông giống như nó in 3 và đó là số nguyên 3. 185 00:15:35,330 --> 00:15:38,420 Vì vậy, bây giờ chúng ta hãy thử cách khác xung quanh: 186 00:15:38,420 --> 00:15:42,970 "Print (1 + '2 '); 187 00:15:45,560 --> 00:15:50,490 Chúng tôi nhận được 3, và nó cũng sẽ là số nguyên 3? Thực sự tôi không có ý tưởng. 188 00:15:50,490 --> 00:15:54,030 Có vẻ như vậy là phù hợp. 189 00:15:54,030 --> 00:15:59,550 Không bao giờ có bất kỳ cơ hội của nó là 12 chuỗi hoặc bất cứ điều gì như rằng 190 00:15:59,550 --> 00:16:08,080 bởi vì PHP, không giống như JavaScript và Java quá, 191 00:16:08,080 --> 00:16:11,670 có một nhà điều hành riêng biệt cho nối. 192 00:16:11,670 --> 00:16:14,930 Nối trong PHP là dấu chấm. 193 00:16:14,930 --> 00:16:22,950 Vì vậy, in ấn (1 '2 '.); Sẽ cung cấp cho chúng tôi 12. 194 00:16:25,790 --> 00:16:32,420 Điều này có xu hướng dẫn đến nhầm lẫn, nơi mọi người cố gắng làm một cái gì đó giống như str + = 195 00:16:32,420 --> 00:16:37,840 một số điều khác mà họ muốn để thêm vào cuối của chuỗi của họ, và đó là sẽ thất bại. 196 00:16:37,840 --> 00:16:40,770 Bạn cần phải làm str = 197 00:16:42,000 --> 00:16:46,240 Vì vậy, không quên nối trong PHP là một dấu chấm. 198 00:16:46,240 --> 00:16:52,100 Những điều khác để thử: in ("CS" + 50); 199 00:16:55,750 --> 00:17:03,610 Tôi đã nói với bạn rằng không có hy vọng điều này dẫn đến CS50 200 00:17:03,610 --> 00:17:06,119 kể từ khi nối là không +. 201 00:17:06,119 --> 00:17:08,440 Những gì bạn nghĩ rằng điều này sẽ kết thúc? 202 00:17:10,359 --> 00:17:13,460 Tôi thành thật hoàn toàn không có ý tưởng. 203 00:17:14,250 --> 00:17:16,460 Có vẻ như nó chỉ là 50. 204 00:17:16,460 --> 00:17:21,490 Nó thấy chuỗi, và tôi đặt cược nếu chúng ta đặt 123CS - 205 00:17:21,490 --> 00:17:29,640 Nó thấy các chuỗi đầu tiên, nó sẽ cố gắng để đọc một số nguyên từ hoặc một số từ nó. 206 00:17:29,640 --> 00:17:31,710 Trong trường hợp này nó thấy 123CS. 207 00:17:31,710 --> 00:17:35,190 "Điều đó không có ý nghĩa như là một số nguyên, vì vậy tôi chỉ cần đi để suy nghĩ của 123." 208 00:17:35,190 --> 00:17:38,580 Vì vậy, 123 + 50 là 173. 209 00:17:38,580 --> 00:17:40,740 Và ở đây nó bắt đầu đọc sách này như là một số nguyên. 210 00:17:40,740 --> 00:17:45,690 Nó không nhìn thấy bất cứ điều gì, vì vậy nó chỉ xử lý nó như là 0. Vì vậy, 0 + 50 sẽ là 50. 211 00:17:45,690 --> 00:17:51,600 Tôi giả định là sẽ làm một cái gì đó tương tự. 212 00:17:51,600 --> 00:17:54,310 Tôi đang suy nghĩ 99. 213 00:17:54,310 --> 00:17:57,580 Yeah, bởi vì nó sẽ mất người đầu tiên - 214 00:18:12,880 --> 00:18:15,730 Vì vậy, 99. 215 00:18:15,730 --> 00:18:21,970 (10/7), nếu điều này là C, những gì mà có thể trở lại? 216 00:18:23,700 --> 00:18:29,630 [Sinh viên] 1. >> Yeah, nó sẽ là 1 vì 10/7 được chia 2 số nguyên. 217 00:18:29,630 --> 00:18:32,910 Một số nguyên chia một số nguyên để trả lại một số nguyên. 218 00:18:32,910 --> 00:18:37,750 Nó không thể trả lại 1 điểm bất cứ điều gì mà có thể, do đó, nó chỉ cần đi để trở về 1. 219 00:18:37,750 --> 00:18:46,120 Đây in (10/7), nó sẽ thực sự giải thích rằng. 220 00:18:46,120 --> 00:18:53,760 Và điều này có nghĩa là nếu bạn thực sự muốn làm làm tròn số nguyên và các công cụ như thế, 221 00:18:53,760 --> 00:18:59,950 bạn cần làm print (sàn (10/7)); 222 00:18:59,950 --> 00:19:08,460 Trong C, nó có thể là lạ mà bạn có thể dựa vào số nguyên cắt ngắn thường xuyên, 223 00:19:08,460 --> 00:19:12,260 nhưng trong PHP, bạn có thể không bởi vì nó sẽ tự động biến nó thành một phao. 224 00:19:13,430 --> 00:19:17,610 Và sau đó (7 + đúng), bạn làm những gì nghĩ rằng đó sẽ là? 225 00:19:18,550 --> 00:19:23,640 Tôi đoán 8 nếu nó sẽ giải thích đúng như 1. 226 00:19:23,640 --> 00:19:25,740 Có vẻ như đó là 8. 227 00:19:25,740 --> 00:19:31,710 >> Vì vậy, bất cứ điều gì chúng tôi đã thực hiện trong 10 phút vừa qua bạn nên tuyệt đối không bao giờ làm. 228 00:19:31,710 --> 00:19:39,870 Bạn sẽ thấy mã mà thực hiện điều này. 229 00:19:39,870 --> 00:19:42,700 Nó không phải là đơn giản như thế này. 230 00:19:42,700 --> 00:19:47,240 Bạn có thể có 2 biến, và 1 biến sẽ xảy ra là một chuỗi 231 00:19:47,240 --> 00:19:51,310 và biến khác xảy ra là một int, và sau đó bạn thêm các biến này lại với nhau. 232 00:19:51,310 --> 00:20:00,120 Kể từ PHP được tạo kiểu động và nó sẽ không làm bất kỳ kiểm tra kiểu cho bạn 233 00:20:00,120 --> 00:20:03,640 và kể từ khi nó yếu gõ vì nó sẽ chỉ tự động ném những thứ này lại với nhau 234 00:20:03,640 --> 00:20:11,490 và tất cả mọi thứ sẽ làm việc, rất khó để biết rằng biến này phải là một chuỗi, 235 00:20:11,490 --> 00:20:14,930 vì vậy tôi không nên thêm biến này, đó là một số nguyên. 236 00:20:18,780 --> 00:20:24,560 Tốt nhất, nếu một biến là một chuỗi, giữ nó như là một chuỗi mãi mãi. 237 00:20:24,560 --> 00:20:26,980 Nếu một biến là một int, giữ nó như là một int mãi mãi. 238 00:20:26,980 --> 00:20:30,770 Nếu bạn muốn để đối phó với số nguyên và chuỗi, 239 00:20:30,770 --> 00:20:36,970 bạn có thể sử dụng varsint - đó là JavaScript. 240 00:20:36,970 --> 00:20:42,520 Intval. Tôi làm điều này tất cả các thời gian. PHP và JavaScript Tôi kết hợp tất cả mọi thứ. 241 00:20:42,520 --> 00:20:47,600 Vì vậy, intval sẽ trả về giá trị số nguyên của một biến. 242 00:20:47,600 --> 00:20:56,550 Nếu chúng ta vượt qua trong "print (intval ('123 ')), bạn nhận được 123. 243 00:21:06,820 --> 00:21:15,850 Intval chính nó sẽ không làm việc kiểm tra đối với chúng tôi rằng đó là độc quyền một số nguyên. 244 00:21:15,850 --> 00:21:20,460 Hướng dẫn sử dụng PHP, có chức năng rất nhiều, 245 00:21:20,460 --> 00:21:26,560 do đó, ở đây tôi nghĩ rằng những gì tôi sẽ sử dụng là is_numeric 1. 246 00:21:26,560 --> 00:21:32,590 Tôi đoán đó quay trở lại sai. 247 00:21:32,590 --> 00:21:35,780 Đó là một điều chúng ta phải đi qua là ===. 248 00:21:37,850 --> 00:21:44,020 Vì vậy, is_numeric ('123df '), bạn sẽ không nghĩ rằng đó là is_numeric. 249 00:21:44,020 --> 00:21:46,720 Trong C, bạn sẽ phải lặp qua tất cả các ký tự 250 00:21:46,720 --> 00:21:50,410 và kiểm tra để xem nếu mỗi ký tự là chữ số hoặc bất cứ điều gì. 251 00:21:50,410 --> 00:21:53,850 Đây is_numeric sẽ làm điều đó cho chúng ta, 252 00:21:53,850 --> 00:21:56,520 và nó trở về false. 253 00:21:56,520 --> 00:22:02,120 Vì vậy, khi tôi in ra, nó được in không có gì, vì vậy ở đây tôi so sánh nó để xem, 254 00:22:02,120 --> 00:22:05,490 bạn đã xảy ra là sai lầm? Và vì vậy bây giờ nó in 1. 255 00:22:05,490 --> 00:22:10,060 Rõ ràng nó in 1 là đúng thay vì in ấn đúng là đúng. 256 00:22:10,060 --> 00:22:15,790 Tôi tự hỏi nếu tôi làm print_r. Không, nó vẫn còn hiện 1. 257 00:22:15,790 --> 00:22:26,760 >> Trở lại ===, == vẫn còn tồn tại, 258 00:22:26,760 --> 00:22:32,260 và nếu bạn nói chuyện to Tommy, anh ấy sẽ nói == là hoàn toàn tốt đẹp. 259 00:22:32,260 --> 00:22:37,700 Tôi sẽ nói rằng == là khủng khiếp và bạn không bao giờ nên sử dụng ==. 260 00:22:37,700 --> 00:22:44,870 Sự khác biệt là == so sánh những thứ 261 00:22:44,870 --> 00:22:48,450 nơi nó có thể là sự thật ngay cả khi họ không phải cùng loại, 262 00:22:48,450 --> 00:22:53,810 trong khi đó === so sánh những điều đầu tiên nó kiểm tra là họ cùng loại? 263 00:22:53,810 --> 00:22:58,010 Vâng. Được rồi, bây giờ tôi sẽ thấy nếu họ thực sự so sánh bằng. 264 00:22:58,010 --> 00:23:08,890 Bạn sẽ có được những điều kỳ lạ như 10 bằng - hãy cho xem những gì mà nói. 265 00:23:08,890 --> 00:23:15,570 Vì vậy, ('10 '== '1 e1'); 266 00:23:15,570 --> 00:23:17,980 Điều này trả về true. 267 00:23:17,980 --> 00:23:21,420 Có ai có bất kỳ dự đoán lý do tại sao điều này trả về true? 268 00:23:25,180 --> 00:23:27,120 Nó không chỉ là về điều đó. Có lẽ đây là một gợi ý. 269 00:23:27,120 --> 00:23:33,170 Nhưng nếu tôi thay đổi đến f - darn nó! Tôi tiếp tục sử dụng dấu ngoặc kép. 270 00:23:33,170 --> 00:23:38,780 Lý do các dấu ngoặc kép la tôi là bởi vì tôi đã đặt này trong dấu ngoặc kép. 271 00:23:38,780 --> 00:23:43,850 Vì vậy, tôi có thể thoát khỏi dấu ngoặc kép ở đây, nhưng báo giá duy nhất làm cho nó dễ dàng hơn. 272 00:23:43,850 --> 00:23:49,120 Vì vậy, ('10 '== '1 f1'); không in đúng sự thật. ('10 '== '1 E1'); in đúng sự thật. 273 00:23:49,120 --> 00:23:56,330 [Sinh viên] hex? >> Đó là hex, nhưng nó gần mà nó giống như - 274 00:23:56,330 --> 00:24:01,060 1e1, khoa học ký hiệu. 275 00:24:01,060 --> 00:24:07,950 Nó nhận ra 1e1 là 1 * 10 ^ 1 hoặc bất cứ điều gì. 276 00:24:07,950 --> 00:24:11,510 Đó là các số nguyên bằng nhau. 277 00:24:11,510 --> 00:24:15,930 Nếu chúng ta làm === sau đó nó sẽ là sai lầm. 278 00:24:15,930 --> 00:24:28,490 Tôi thực sự không có ý tưởng nếu chúng ta làm == những gì về (10 và '10abc '); Được rồi. Vì vậy, đó là sự thật. 279 00:24:28,490 --> 00:24:35,940 Vì vậy, giống như khi bạn đã làm (10 + '10abc '); và nó sẽ là 20, 280 00:24:35,940 --> 00:24:38,800 (10 == '10abc '); là sự thật. 281 00:24:38,800 --> 00:24:45,350 Thậm chí tệ hơn là những thứ như (false == NULL); là đúng sự thật 282 00:24:45,350 --> 00:24:52,210 (false == 0); là đúng, (false == []); 283 00:24:52,210 --> 00:25:00,970 Có những trường hợp kỳ lạ của - Đó là một trong những trường hợp kỳ lạ. 284 00:25:00,970 --> 00:25:08,110 Chú ý rằng (false == []); là sự thật. 285 00:25:08,110 --> 00:25:11,950 ('0 '== False); là sự thật. 286 00:25:11,950 --> 00:25:16,090 ('0 '== []); Là sai. 287 00:25:16,090 --> 00:25:19,090 Vì vậy == là không có cách nào transitive. 288 00:25:19,090 --> 00:25:26,830 có thể là bằng b và có thể là bằng c, 289 00:25:26,830 --> 00:25:29,340 nhưng b có thể không được bằng c. 290 00:25:29,340 --> 00:25:35,580 Đó là một sự gớm ghiếc với tôi, và bạn nên luôn luôn sử dụng ===. 291 00:25:35,580 --> 00:25:38,590 [Sinh viên] chúng tôi có thể làm == cũng! >> [Bowden]. 292 00:25:38,590 --> 00:25:44,600 Tương đương sẽ được! = Và ==. 293 00:25:44,600 --> 00:25:48,230 Điều này thực sự lớn lên trong spec pset 294 00:25:48,230 --> 00:25:52,000 mà rất nhiều các chức năng trở lại - 295 00:25:52,000 --> 00:25:53,890 Các hướng dẫn sử dụng PHP là tốt về việc này. 296 00:25:53,890 --> 00:25:59,140 Nó đặt trong một hộp lớn màu đỏ, "Điều này sẽ trả về false nếu có một lỗi." 297 00:25:59,140 --> 00:26:03,940 Nhưng trở về 0 là một điều hoàn toàn hợp lý để trở về. 298 00:26:03,940 --> 00:26:08,250 Hãy suy nghĩ về bất kỳ chức năng dự kiến ​​sẽ trả về một số nguyên. 299 00:26:11,250 --> 00:26:17,880 Hãy nói rằng chức năng này được cho là để đếm số lượng các dòng trong một tập tin hoặc một cái gì đó. 300 00:26:17,880 --> 00:26:23,490 Trong những trường hợp bình thường, bạn vượt qua chức năng này một tập tin 301 00:26:23,490 --> 00:26:27,120 và nó sẽ trả lại một số nguyên đại diện cho số dòng. 302 00:26:27,120 --> 00:26:30,820 Vì vậy, 0 là một số hoàn toàn hợp lý nếu tập tin chỉ là trống rỗng. 303 00:26:30,820 --> 00:26:36,810 Nhưng chức năng nếu bạn vượt qua nó một tập tin không hợp lệ và điều gì sẽ xảy ra để trả về false 304 00:26:36,810 --> 00:26:38,860 nếu bạn vượt qua nó một tập tin không hợp lệ? 305 00:26:38,860 --> 00:26:46,500 Nếu bạn chỉ cần làm == bạn không khác biệt là trường hợp giữa tập tin không hợp lệ và tập tin rỗng. 306 00:26:48,870 --> 00:26:51,350 Luôn luôn sử dụng ===. 307 00:26:55,690 --> 00:26:58,000 Đó là tất cả những người. 308 00:26:58,000 --> 00:27:01,660 >> Trong PHP, kiểu mảng là khác nhau từ những gì bạn đang sử dụng để trong C. 309 00:27:01,660 --> 00:27:06,650 Thật vậy, bạn có thể đã nhận thấy điều này ở trên khi bạn thấy rằng đây là kiểu của mảng. 310 00:27:06,650 --> 00:27:15,640 Cú pháp khung mới là 5,4 PHP, đó là phiên bản mới nhất của PHP. 311 00:27:15,640 --> 00:27:36,960 Trước đây, bạn luôn luôn có để viết array ('a' -> 1, 'b' -> 2. 312 00:27:36,960 --> 00:27:41,160 Đó là các nhà xây dựng cho một mảng. 313 00:27:41,160 --> 00:27:45,950 Bây giờ PHP cuối cùng đã đến xung quanh cú pháp tốt đẹp chỉ dấu ngoặc vuông, 314 00:27:45,950 --> 00:27:50,900 mà chỉ là tốt hơn so với mảng. 315 00:27:50,900 --> 00:27:54,480 Nhưng xem xét PHP 5,4 là phiên bản mới nhất, 316 00:27:54,480 --> 00:27:59,090 bạn có thể gặp phải những nơi mà thậm chí không có PHP 5.3. 317 00:27:59,090 --> 00:28:08,220 Trong mùa hè, chúng tôi chạy vào vấn đề này PHP 5,3 là những gì chúng tôi đã có trên thiết bị, 318 00:28:08,220 --> 00:28:14,480 nhưng máy chủ mà chúng tôi triển khai tất cả các sổ điểm của chúng tôi và trình và tất cả các công cụ đó để 319 00:28:14,480 --> 00:28:16,750 PHP 5,4. 320 00:28:16,750 --> 00:28:23,060 Không biết điều này, chúng tôi phát triển trong 5,3, đẩy đến 5,4, 321 00:28:23,060 --> 00:28:25,660 và bây giờ tất cả của một không đột ngột mã của chúng tôi hoạt động 322 00:28:25,660 --> 00:28:28,680 vì đã xảy ra đã thay đổi từ 5,3 và 5,4 323 00:28:28,680 --> 00:28:31,030 không tương thích ngược, 324 00:28:31,030 --> 00:28:35,770 và chúng tôi phải đi và sửa chữa tất cả những thứ của chúng tôi mà không làm việc cho PHP 5.4. 325 00:28:39,210 --> 00:28:42,320 Đối với lớp học này, kể từ khi thiết bị không có PHP 5,4, 326 00:28:42,320 --> 00:28:45,490 nó hoàn toàn tốt để sử dụng dấu ngoặc vuông. 327 00:28:47,240 --> 00:28:50,440 Nhưng nếu bạn đang tìm kiếm những thứ trên Internet, 328 00:28:50,440 --> 00:28:54,880 nếu bạn đang tìm một số loại công cụ mảng, rất có thể bạn sẽ thấy 329 00:28:54,880 --> 00:29:02,020 spell ra cú pháp xây dựng mảng kể từ đó được khoảng từ PHP được sinh ra 330 00:29:02,020 --> 00:29:07,340 và khung vuông cú pháp đã được khoảng vài tháng qua 331 00:29:07,340 --> 00:29:10,020 hoặc bất cứ khi nào 5,4 đến xung quanh. 332 00:29:10,020 --> 00:29:12,710 Đây là cách bạn chỉ số. 333 00:29:12,710 --> 00:29:30,610 Cũng giống như trong C làm thế nào bạn sẽ chỉ số bởi các dấu ngoặc vuông như $ array [0], $ array [1], $ array [2], 334 00:29:30,610 --> 00:29:36,320 bạn chỉ số cùng một cách nếu bạn xảy ra để có chỉ số của bạn là chuỗi. 335 00:29:36,320 --> 00:29:40,440 Vì vậy, $ array ['a'] và $ array ['b'. 336 00:29:40,440 --> 00:29:47,410 $ Array [b]. Tại sao điều này là sai? 337 00:29:52,490 --> 00:29:59,870 Nó có thể sẽ tạo ra một cảnh báo nhưng vẫn làm việc. PHP có xu hướng để làm điều đó. 338 00:29:59,870 --> 00:30:04,890 Nó có xu hướng chỉ, "Tôi sẽ cảnh báo bạn về điều này, nhưng tôi chỉ cần đi để tiếp tục đi 339 00:30:04,890 --> 00:30:07,550 "Và làm bất cứ điều gì tôi có thể." 340 00:30:07,550 --> 00:30:11,500 Nó có lẽ sẽ dịch này cho một chuỗi, 341 00:30:11,500 --> 00:30:15,000 nhưng có thể là tại một số điểm trong một ai đó qua cho biết 342 00:30:15,000 --> 00:30:20,180 xác định b là 'Hello World'. 343 00:30:20,180 --> 00:30:28,740 Vì vậy, bây giờ b có thể là một mảng liên tục và $ [b] thực sự sẽ được làm "HELLO WORLD". 344 00:30:28,740 --> 00:30:32,380 Tôi nghĩ rằng tại thời điểm này, hoặc ít nhất là cài đặt PHP của chúng tôi, 345 00:30:32,380 --> 00:30:37,870 nếu bạn cố gắng để chỉ mục vào một mảng và khóa đó không tồn tại, nó sẽ thất bại. 346 00:30:37,870 --> 00:30:40,150 Tôi không nghĩ rằng nó sẽ cảnh báo bạn. 347 00:30:40,150 --> 00:30:44,560 Hoặc ít nhất bạn có thể thiết lập nó để nó không chỉ cảnh báo bạn, nó chỉ thẳng lên không thành công. 348 00:30:44,560 --> 00:30:49,290 >> Cách bạn kiểm tra để xem nếu có thực sự là một chỉ số như vậy là isset. 349 00:30:49,290 --> 00:30:54,690 Vì vậy, isset ($ array ['Hello World') sẽ trả về false. 350 00:30:54,690 --> 00:30:59,160 isset ($ array ['b']) sẽ trở lại đúng sự thật. 351 00:31:06,830 --> 00:31:09,880 Bạn có thể kết hợp các cú pháp này. 352 00:31:15,060 --> 00:31:22,440 Tôi chắc rằng mảng này sẽ kết thúc được - Chúng ta có thể kiểm tra nó ra. 353 00:31:43,290 --> 00:31:45,700 Oh, tôi cần PHPWord. 354 00:31:53,960 --> 00:32:00,260 Này được pha trộn các cú pháp nơi bạn xác định những gì là quan trọng 355 00:32:00,260 --> 00:32:03,330 và bạn không chỉ định chính là những gì. 356 00:32:03,330 --> 00:32:05,520 Vì vậy, 3 ngay đây là một giá trị. 357 00:32:05,520 --> 00:32:08,080 Bạn đã không rõ ràng những gì quan trọng của nó là có được. 358 00:32:08,080 --> 00:32:11,670 Những gì bạn nghĩ rằng chính của nó là có được không? 359 00:32:11,670 --> 00:32:21,410 [Sinh viên] 0. >> Tôi đoán 0 chỉ vì đây là một trong những đầu tiên chúng tôi đã không được chỉ định. 360 00:32:21,410 --> 00:32:23,500 Chúng tôi thực sự có thể làm một vài những trường hợp này. 361 00:32:23,500 --> 00:32:28,030 Vì vậy, print_r là in đệ quy. Nó sẽ in toàn bộ mảng. 362 00:32:28,030 --> 00:32:32,700 Nó sẽ in subarrays của mảng nếu có bất kỳ. 363 00:32:32,700 --> 00:32:36,630 Vì vậy, print_r ($ mảng); php.test.php. 364 00:32:36,630 --> 00:32:38,810 Nó trông giống như nó đã cho nó 0. 365 00:32:38,810 --> 00:32:43,530 Có thực sự là một cái gì đó để ghi nhớ ở đây, nhưng chúng tôi sẽ lấy lại nó trong một lần thứ hai. 366 00:32:43,530 --> 00:32:45,850 Nhưng điều gì sẽ xảy ra nếu tôi xảy ra để làm cho chỉ số 1? 367 00:32:45,850 --> 00:32:51,170 PHP không phân biệt giữa các chỉ số chuỗi và chỉ số số nguyên, 368 00:32:51,170 --> 00:33:00,280 như vậy vào thời điểm này tôi đã chỉ được xác định một chỉ số 1 và tôi có thể làm cả hai mảng $ [1] và mảng $ ['1 '] 369 00:33:00,280 --> 00:33:06,250 và nó sẽ là chỉ số giống nhau và cùng một phím. 370 00:33:06,250 --> 00:33:13,000 Vì vậy, bây giờ những gì bạn nghĩ 3 là có được không? >> [Sinh viên] 2. >> [Bowden] Tôi đoán 2. 371 00:33:16,000 --> 00:33:18,690 Yeah. Đó là 2. 372 00:33:18,690 --> 00:33:24,790 Điều gì sẽ xảy ra nếu chúng tôi đã làm này là 10, đây là 4? Những gì bạn nghĩ rằng chỉ số của 3 là có được không? 373 00:33:27,360 --> 00:33:29,110 Tôi đang suy nghĩ 11. 374 00:33:29,110 --> 00:33:33,060 Tôi đoán những gì PHP - và tôi nghĩ rằng tôi đã nhìn thấy điều này trước khi - 375 00:33:33,060 --> 00:33:39,760 là nó chỉ theo dõi số chỉ số cao nhất nó được sử dụng cho đến nay. 376 00:33:39,760 --> 00:33:44,230 Nó không bao giờ sẽ chỉ định một chỉ số chuỗi đến 3. Nó sẽ luôn luôn là một số chỉ số. 377 00:33:44,230 --> 00:33:47,690 Vì vậy, theo dõi của một trong những cao nhất được giao cho đến nay, mà sẽ xảy ra là 10, 378 00:33:47,690 --> 00:33:52,540 và nó sẽ cung cấp cho 11 3. 379 00:33:52,540 --> 00:34:02,110 Những gì tôi đã nói trước, chú ý cách nó được in mảng này. 380 00:34:02,110 --> 00:34:06,850 Nó in chính 10, 4 phím, 11 phím, phím d. 381 00:34:06,850 --> 00:34:09,790 Hoặc thậm chí chúng ta hãy làm - 382 00:34:15,760 --> 00:34:22,489 Tôi đoán tôi đã không đặt một 0, nhưng nó in 1, 2, 3, 4. 383 00:34:22,489 --> 00:34:29,330 Điều gì sẽ xảy ra nếu tôi chuyển sang ở đây? Hoặc chúng ta hãy thực sự chuyển đổi các 2. 384 00:34:29,330 --> 00:34:31,940 Bây giờ nó in 2, 1, 3, 4. 385 00:34:31,940 --> 00:34:41,270 PHP mảng là không giống như bảng băm của bạn thường xuyên. 386 00:34:41,270 --> 00:34:45,570 Đó là hoàn toàn hợp lý để nghĩ về chúng như bảng băm 99% thời gian. 387 00:34:45,570 --> 00:34:53,790 Tuy nhiên, trong bảng băm của bạn không có cảm giác của trật tự trong đó mọi thứ đã được đưa vào. 388 00:34:53,790 --> 00:34:56,639 Vì vậy, ngay sau khi bạn chèn nó vào bảng băm của bạn, 389 00:34:56,639 --> 00:35:00,590 giả sử có không có danh sách liên kết và bạn có thể đánh giá trong một danh sách liên kết 390 00:35:00,590 --> 00:35:03,980 được chèn đầu tiên. 391 00:35:03,980 --> 00:35:10,060 Nhưng ở đây chúng tôi đưa vào lần thứ 2 và nó biết khi nó được in ra mảng này mà 2 đến trước. 392 00:35:10,060 --> 00:35:13,090 Nó không in nó ra để chỉ bất kỳ. 393 00:35:13,090 --> 00:35:17,550 Cấu trúc dữ liệu kỹ thuật mà nó sử dụng là một bản đồ ra lệnh, 394 00:35:17,550 --> 00:35:24,690 vì vậy nó bản đồ phím các giá trị và nó nhớ thứ tự mà các phím đã được đưa vào. 395 00:35:24,690 --> 00:35:31,600 Về cơ bản đó là một số biến chứng mà nó gây phiền nhiễu để thực sự - 396 00:35:31,600 --> 00:35:34,510 Hãy nói rằng bạn có một mảng 0, 1, 2, 3, 4, 5 397 00:35:34,510 --> 00:35:37,700 và bạn muốn để đưa ra chỉ số 2. 398 00:35:37,700 --> 00:35:47,750 Một cách để làm việc đó, chúng ta hãy xem những gì trông giống như. 399 00:35:47,750 --> 00:35:50,410 0, 2, 1, 3, 4. 400 00:35:50,410 --> 00:35:54,880 Bỏ xảy ra để bỏ đặt cả hai biến và chỉ số của mảng. 401 00:35:54,880 --> 00:35:58,630 Vì vậy, unset ($ array [2]); 402 00:35:58,630 --> 00:36:03,430 Bây giờ điều này là những gì sẽ trông giống như? 2 chỉ là đi, vì vậy đó là hoàn toàn tốt đẹp. 403 00:36:03,430 --> 00:36:11,670 Gây phiền nhiễu hơn là nếu bạn muốn mọi thứ để thực sự được như một mảng. 404 00:36:11,670 --> 00:36:14,910 Tôi sẽ đưa số ngẫu nhiên. 405 00:36:14,910 --> 00:36:20,400 Bây giờ nhận thấy chỉ số của tôi. 406 00:36:20,400 --> 00:36:26,860 Tôi muốn nó chỉ giống như một mảng C nơi nó đi từ 0 đến dài 1 407 00:36:26,860 --> 00:36:30,810 và tôi có thể lặp qua nó như vậy. 408 00:36:30,810 --> 00:36:38,520 Nhưng ngay sau khi tôi bỏ đặt chỉ số thứ hai, những gì trong chỉ mục 3 không trở thành chỉ số 2. 409 00:36:38,520 --> 00:36:44,790 Thay vào đó, chỉ cần loại bỏ chỉ mục đó và bây giờ bạn đi 0, 1, 3, 4. 410 00:36:44,790 --> 00:36:48,740 Điều này là hoàn toàn hợp lý. 411 00:36:48,740 --> 00:36:53,950 Nó chỉ gây phiền nhiễu và bạn phải làm những thứ như mối nối mảng. Yeah. 412 00:36:53,950 --> 00:36:57,200 >> [Sinh viên] Điều gì sẽ xảy ra nếu bạn đã có một vòng lặp for 413 00:36:57,200 --> 00:36:59,630 và bạn muốn đi qua tất cả các yếu tố? 414 00:36:59,630 --> 00:37:02,290 Khi nó chạm 2, nó sẽ đem lại bao giờ? 415 00:37:02,290 --> 00:37:10,150 Iterating trên một mảng. Có 2 cách để bạn có thể làm điều đó. 416 00:37:10,150 --> 00:37:12,770 Bạn có thể sử dụng thường xuyên cho vòng lặp. 417 00:37:12,770 --> 00:37:22,000 Đây là một phức tạp của PHP. 418 00:37:22,000 --> 00:37:27,420 Hầu hết các ngôn ngữ, tôi sẽ nói, có một số loại chiều dài hoặc len hoặc một cái gì đó 419 00:37:27,420 --> 00:37:30,470 chỉ ra chiều dài của một mảng. 420 00:37:30,470 --> 00:37:32,820 Trong PHP đếm. 421 00:37:32,820 --> 00:37:36,160 Vì vậy, count ($ array); $ i + +) 422 00:37:36,160 --> 00:37:42,950 Hãy chỉ in ($ array [$ i]); 423 00:37:45,920 --> 00:37:48,820 Notice: Undefined offset: 2. 424 00:37:48,820 --> 00:37:51,610 Nó chỉ là sẽ thất bại. 425 00:37:51,610 --> 00:38:03,020 Đây là lý do rằng, đối với hầu hết các phần, bạn không bao giờ cần để lặp qua một mảng như thế này. 426 00:38:03,020 --> 00:38:07,110 Nó có thể là một cường điệu, nhưng bạn không bao giờ cần để lặp qua một mảng như thế này 427 00:38:07,110 --> 00:38:19,410 bởi vì PHP cung cấp cú pháp foreach của nó, nơi foreach ($ array là $ mục). 428 00:38:19,410 --> 00:38:31,830 Bây giờ nếu chúng tôi in ($ item); - we'll thảo luận về nó trong một giây - hoạt động hoàn toàn tốt đẹp. 429 00:38:31,830 --> 00:38:38,960 Cách mà foreach đang làm việc là tham số đầu tiên là mảng mà bạn đang iterating trên. 430 00:38:38,960 --> 00:38:44,060 Và đối số thứ hai, mục, thông qua mỗi đường đi qua cho vòng lặp 431 00:38:44,060 --> 00:38:52,690 nó sẽ mất điều tiếp theo trong mảng. Vì vậy, hãy nhớ mảng có một đơn đặt hàng. 432 00:38:52,690 --> 00:38:55,690 Lần đầu tiên thông qua các vòng lặp for, mục là có được 123 433 00:38:55,690 --> 00:38:59,540 sau đó nó sẽ là 12 sau đó nó sẽ là 13 sau đó nó sẽ là 23 sau đó nó sẽ là 213. 434 00:38:59,540 --> 00:39:04,670 Nhận được những điều thực sự kỳ lạ khi bạn làm một cái gì đó như foreach. 435 00:39:04,670 --> 00:39:07,480 Hãy xem những gì sẽ xảy ra bởi vì bạn không bao giờ nên làm điều này. 436 00:39:07,480 --> 00:39:13,320 Điều gì sẽ xảy ra nếu chúng ta unset ($ array [1]); 437 00:39:20,410 --> 00:39:26,030 Đó là có thể dự kiến. 438 00:39:26,030 --> 00:39:30,950 Bạn đang iterating trên mảng này, và mỗi khi bạn đang unsetting chỉ số đầu tiên. 439 00:39:30,950 --> 00:39:39,720 Vì vậy, đối với chỉ số 0, điều item, đầu tiên có giá trị 0, do đó, nó sẽ là 123. 440 00:39:39,720 --> 00:39:44,630 Nhưng bên trong vòng lặp cho chúng tôi unset chỉ số 1, do đó có nghĩa 12 đã biến mất. 441 00:39:44,630 --> 00:39:57,480 Vì vậy, in. PHP_EOL. 442 00:39:57,480 --> 00:40:03,580 PHP_EOL chỉ là xuống dòng, nhưng đó là kỹ thuật di động nhiều hơn 443 00:40:03,580 --> 00:40:08,890 kể từ khi dòng mới trong Windows là khác nhau từ các dòng mới trên Mac và UNIX. 444 00:40:08,890 --> 00:40:18,040 Trên Windows dòng mới \ r \ n, trong khi đó ở khắp mọi nơi khác nó có xu hướng chỉ để được \ n. 445 00:40:18,040 --> 00:40:25,150 PHP_EOL được cấu hình để sử dụng bất cứ dòng mới của hệ thống của bạn. 446 00:40:25,150 --> 00:40:29,310 Vì vậy, in đó. Hãy không print_r ($ mảng) ở cuối. 447 00:40:32,830 --> 00:40:37,390 Tôi không có ý tưởng rằng đó sẽ là hành vi. 448 00:40:41,740 --> 00:40:48,960 Mục vẫn còn có giá trị 12 mặc dù chúng ta unset 12 trước khi chúng ta từng có từ mảng. 449 00:40:52,770 --> 00:40:58,840 Không dùng từ ngữ của tôi về điều này, nhưng có vẻ như foreach tạo ra một bản sao của mảng 450 00:40:58,840 --> 00:41:02,160 và sau đó mục có trên tất cả các giá trị của bản sao đó. 451 00:41:02,160 --> 00:41:07,760 Vì vậy, ngay cả nếu bạn sửa đổi các mảng bên trong vòng lặp for, 452 00:41:07,760 --> 00:41:17,240 nó sẽ không quan tâm. Mục sẽ đảm nhận các giá trị ban đầu. 453 00:41:17,240 --> 00:41:19,240 Chúng ta hãy thử unset nó. 454 00:41:19,240 --> 00:41:24,460 Nếu điều này là $ array [1] = "hello"; 455 00:41:24,460 --> 00:41:31,770 Mặc dù chúng tôi đặt "hello" vào mảng đó, mục không bao giờ mất giá trị đó. 456 00:41:31,770 --> 00:41:37,430 Có một cú pháp để foreach vòng 457 00:41:37,430 --> 00:41:45,900 nơi bạn đặt 2 biến ngăn cách bởi một mũi tên. 458 00:41:45,900 --> 00:41:49,680 Biến đầu tiên này sẽ là chìa khóa của giá trị đó, 459 00:41:49,680 --> 00:41:53,050 và điều này biến thứ hai là có được chính xác cùng một mục. 460 00:41:53,050 --> 00:42:01,610 Này là không thú vị ở đây, nhưng nếu chúng ta quay trở lại trường hợp ban đầu của chúng tôi 'a' -> 1, 461 00:42:01,610 --> 00:42:06,090 'B' -> 1, 462 00:42:06,090 --> 00:42:14,470 nếu chúng ta chỉ lặp cho mỗi mảng như mục, mục là có được 1 mỗi lần duy nhất. 463 00:42:14,470 --> 00:42:18,170 Nhưng nếu chúng ta cũng muốn biết phím kết hợp với mục đó 464 00:42:18,170 --> 00:42:25,230 sau đó chúng tôi làm là $ key -> $ item. 465 00:42:25,230 --> 00:42:31,980 Vì vậy, bây giờ chúng tôi có thể làm print ($ key ':'.. 466 00:42:31,980 --> 00:42:39,380 Bây giờ nó iterating trên và in ấn mỗi chìa khóa và giá trị kết hợp của nó. 467 00:42:39,380 --> 00:42:47,030 >> Thêm một điều chúng ta có thể làm trong các vòng lặp foreach, bạn có thể thấy cú pháp này. 468 00:42:47,030 --> 00:42:54,770 Ampersands trước tên biến có xu hướng là làm thế nào PHP làm tài liệu tham khảo. 469 00:42:54,770 --> 00:43:00,460 Trường hợp tài liệu tham khảo rất tương tự như con trỏ, 470 00:43:00,460 --> 00:43:04,820 bạn không có con trỏ, vì vậy bạn không bao giờ đối phó với bộ nhớ trực tiếp. 471 00:43:04,820 --> 00:43:12,620 Nhưng bạn không có tài liệu tham khảo 1 biến đề cập đến cùng một điều như là một biến khác. 472 00:43:12,620 --> 00:43:21,450 Bên trong đây, chúng ta hãy làm $ item. Hãy trở lại 1, 10. 473 00:43:21,450 --> 00:43:28,800 Hãy làm $ item + +; Điều đó vẫn còn tồn tại trong PHP. Bạn vẫn có thể làm + +. 474 00:43:28,800 --> 00:43:38,260 php.test.php. Tôi phải in nó. print_r ($ mảng); 475 00:43:38,260 --> 00:43:42,730 Chúng tôi in 2, 11. 476 00:43:42,730 --> 00:43:49,560 Nếu tôi chỉ cần thực hiện foreach ($ array là $ mục) sau đó hàng sẽ được giá trị 1 477 00:43:49,560 --> 00:43:54,190 lần đầu tiên qua vòng này. Nó sẽ tăng 1 2 và sau đó chúng tôi đang thực hiện. 478 00:43:54,190 --> 00:43:57,260 Vì vậy, sau đó nó sẽ đi qua đèo thứ hai của vòng lặp và mặt hàng đó là 10. 479 00:43:57,260 --> 00:44:01,570 Nó increments mục đến 11, và sau đó bỏ đi. 480 00:44:01,570 --> 00:44:06,670 Sau đó, chúng tôi print_r ($ mảng); và để cho thấy rằng đây chỉ là 1, 10. 481 00:44:06,670 --> 00:44:09,070 Vì vậy, tăng chúng tôi đã làm đã bị mất. 482 00:44:09,070 --> 00:44:13,410 Nhưng foreach ($ array như & $ item) 483 00:44:13,410 --> 00:44:21,910 bây giờ mặt hàng này là cùng một mục như thế này ngay tại đây. Đó là điều tương tự. 484 00:44:21,910 --> 00:44:26,820 Vì vậy, $ item + + được sửa đổi mảng 0. 485 00:44:29,330 --> 00:44:41,850 Về cơ bản, bạn cũng có thể làm $ k -> $ item và bạn có thể làm $ array [$ k] + +; 486 00:44:41,850 --> 00:44:48,650 >> Vì vậy, một cách khác để làm điều đó, chúng ta được tự do sửa đổi mục, 487 00:44:48,650 --> 00:44:54,070 nhưng điều đó sẽ không sửa đổi mảng ban đầu của chúng tôi. 488 00:44:54,070 --> 00:44:59,720 Nhưng nếu chúng ta sử dụng k, đó là chìa khóa của chúng tôi, sau đó chúng ta có thể chỉ cần chỉ số vào mảng của chúng tôi bằng cách sử dụng khóa đó 489 00:44:59,720 --> 00:45:01,530 và tăng đó. 490 00:45:01,530 --> 00:45:05,410 Điều này trực tiếp hơn thay đổi mảng ban đầu của chúng tôi. 491 00:45:05,410 --> 00:45:10,690 Bạn thậm chí có thể làm điều đó nếu vì một lý do nào đó bạn muốn có khả năng sửa đổi - 492 00:45:10,690 --> 00:45:13,510 Trên thực tế, điều này là hoàn toàn hợp lý. 493 00:45:13,510 --> 00:45:16,020 Bạn không muốn phải viết $ array [$ k] + +, 494 00:45:16,020 --> 00:45:27,890 bạn chỉ muốn viết $ item + + nhưng bạn vẫn muốn nói nếu ($ k === 'a') 495 00:45:27,890 --> 00:45:30,620 sau đó tăng mục và sau đó in mảng của chúng tôi. 496 00:45:30,620 --> 00:45:36,290 Vì vậy, bây giờ chúng tôi mong đợi điều gì print_r để làm? Những giá trị này nên được in? 497 00:45:36,290 --> 00:45:43,770 [Sinh viên] 2 và 10. >> [Bowden] Chỉ nếu phím 'a' để chúng ta thực sự in. 498 00:45:51,940 --> 00:45:55,670 >> Bạn có thể rất hiếm khi, nếu bao giờ hết, cần phải xác định các chức năng trong PHP, 499 00:45:55,670 --> 00:46:03,370 nhưng bạn có thể thấy một cái gì đó tương tự nơi bạn xác định một chức năng như bất cứ chức năng. 500 00:46:03,370 --> 00:46:09,900 Thông thường, bạn sẽ nói ($ foo, bar) và sau đó xác định nó là bất cứ điều gì. 501 00:46:09,900 --> 00:46:17,580 Nhưng nếu tôi làm điều này thì điều đó có nghĩa rằng bất cứ điều gì gọi là bất cứ điều gì, 502 00:46:17,580 --> 00:46:25,110 bất cứ điều gì gọi baz, do đó, đối số đầu tiên được truyền cho baz có thể được thay đổi. 503 00:46:25,110 --> 00:46:38,100 Hãy làm $ foo + +; 504 00:46:38,100 --> 00:46:48,020 và bên trong ở đây chúng ta hãy làm baz ($ item); 505 00:46:48,020 --> 00:46:52,250 Bây giờ chúng tôi đang kêu gọi một chức năng. 506 00:46:52,250 --> 00:46:56,780 Đối số được thực hiện bằng cách tham khảo, có nghĩa là nếu chúng ta sửa đổi nó 507 00:46:56,780 --> 00:47:00,390 chúng tôi đang sửa đổi các điều đã được thông qua. 508 00:47:00,390 --> 00:47:04,420 Và in ấn này, chúng tôi mong đợi - trừ khi tôi sai lầm cú pháp - chúng tôi đã nhận 2, 11, 509 00:47:04,420 --> 00:47:06,300 do đó, nó đã thực sự tăng lên. 510 00:47:06,300 --> 00:47:08,790 Thông báo chúng ta cần tài liệu tham khảo tại 2 địa điểm. 511 00:47:08,790 --> 00:47:13,050 Điều gì sẽ xảy ra nếu tôi đã làm điều này? Điều này có nghĩa là gì? 512 00:47:13,050 --> 00:47:15,810 [Sinh viên] Nó sẽ thay đổi. >> Yeah. 513 00:47:15,810 --> 00:47:18,290 Mục chỉ là một bản sao của giá trị trong mảng. 514 00:47:18,290 --> 00:47:26,670 Vì vậy, mục sẽ thay đổi để 2, nhưng array ['a'] vẫn sẽ là 1. 515 00:47:26,670 --> 00:47:32,560 Hoặc nếu tôi làm điều này? 516 00:47:32,560 --> 00:47:39,260 Bây giờ mục được gửi như là một bản sao cho baz. 517 00:47:39,260 --> 00:47:46,330 Vì vậy, các bản sao của các đối số sẽ được tăng lên đến 2, 518 00:47:46,330 --> 00:47:49,240 nhưng mục chính nó không bao giờ được tăng lên đến 2. 519 00:47:49,240 --> 00:47:52,880 Và mục là điều tương tự như khung mảng bất cứ điều gì, 520 00:47:52,880 --> 00:47:55,380 do đó, mảng đó không bao giờ được tăng lên. 521 00:47:55,380 --> 00:47:57,960 Vì vậy, cả những nơi cần nó. 522 00:47:57,960 --> 00:48:03,830 >> PHP thường là khá thông minh về điều này. 523 00:48:03,830 --> 00:48:06,570 Bạn có thể nghĩ rằng tôi muốn đi qua tham khảo - 524 00:48:06,570 --> 00:48:09,560 Đây thực sự là một câu hỏi về một trong các psets. 525 00:48:09,560 --> 00:48:14,480 Đó là một điều questions.txt nơi mà nó nói, 526 00:48:14,480 --> 00:48:19,280 Tại sao bạn có thể muốn để vượt qua cấu trúc bằng cách tham khảo? 527 00:48:19,280 --> 00:48:21,250 Câu trả lời đó là gì? 528 00:48:21,250 --> 00:48:25,100 [Sinh viên] Vì vậy, bạn không cần phải sao chép cái gì đó lớn. >> Yeah. 529 00:48:25,100 --> 00:48:32,920 Một cấu trúc có thể được tùy tiện lớn, và khi bạn vượt qua các cấu trúc như một tham số 530 00:48:32,920 --> 00:48:36,800 nó cần để sao chép rằng cấu trúc toàn bộ để vượt qua nó để chức năng, 531 00:48:36,800 --> 00:48:40,410 trong khi nếu bạn chỉ cần vượt qua các cấu trúc bằng cách tham khảo 532 00:48:40,410 --> 00:48:46,530 sau đó nó chỉ cần sao chép một địa chỉ 4-byte như là đối số chức năng. 533 00:48:48,520 --> 00:48:52,320 PHP là một chút thông minh hơn đó. 534 00:48:52,320 --> 00:49:00,650 Nếu tôi có một số chức năng và tôi vượt qua nó một mảng của 1.000 điều, 535 00:49:00,650 --> 00:49:03,990 không có nghĩa là nó sẽ phải sao chép tất cả 1,000 trong những điều 536 00:49:03,990 --> 00:49:10,450 để vượt qua nó vào chức năng? Nó không có để làm điều đó ngay lập tức. 537 00:49:10,450 --> 00:49:15,940 Nếu bên trong của chức năng này, nó không bao giờ thực sự thay đổi foo, 538 00:49:15,940 --> 00:49:22,660 vì vậy nếu ($ foo === 'hello') trả lại đúng sự thật; 539 00:49:22,660 --> 00:49:26,460 Lưu ý chúng tôi không bao giờ thực sự thay đổi bên trong đối số của chức năng này, 540 00:49:26,460 --> 00:49:30,010 điều đó có nghĩa rằng bất cứ điều gì đã được thông qua tại như foo không bao giờ cần phải được sao chép 541 00:49:30,010 --> 00:49:32,100 bởi vì nó không sửa đổi nó. 542 00:49:32,100 --> 00:49:39,240 Vì vậy, cách PHP công trình là các đối số luôn luôn được thông qua tham khảo 543 00:49:39,240 --> 00:49:42,170 cho đến khi bạn thực sự cố gắng để sửa đổi nó. 544 00:49:42,170 --> 00:49:51,160 Bây giờ nếu tôi nói $ foo + +; bây giờ sẽ tạo một bản sao của foo ban đầu và sửa đổi các bản sao. 545 00:49:51,160 --> 00:49:53,090 Điều này giúp tiết kiệm một số thời gian. 546 00:49:53,090 --> 00:49:58,210 Nếu bạn không bao giờ chạm vào mảng này lớn, bạn không bao giờ thực sự sửa đổi nó, 547 00:49:58,210 --> 00:50:02,360 nó không cần phải thực hiện các bản sao, 548 00:50:02,360 --> 00:50:06,640 trong khi đó nếu chúng ta chỉ cần đặt dấu "và" điều đó có nghĩa là nó thậm chí không sao chép nó 549 00:50:06,640 --> 00:50:08,640 ngay cả khi bạn sửa đổi nó. 550 00:50:08,640 --> 00:50:10,680 Hành vi này được gọi là copy-on-viết. 551 00:50:10,680 --> 00:50:17,380 Bạn sẽ thấy nó ở những nơi khác, đặc biệt là nếu bạn dự khoá học hệ điều hành. 552 00:50:17,380 --> 00:50:23,880 Copy-on-viết là một mẫu khá thông thường mà bạn không cần phải thực hiện một bản sao của một cái gì đó 553 00:50:23,880 --> 00:50:26,650 trừ khi nó thực sự thay đổi. Yeah. 554 00:50:26,650 --> 00:50:29,520 [Sinh viên] Điều gì sẽ xảy ra nếu bạn đã có thặng dư bên trong thử nghiệm, 555 00:50:29,520 --> 00:50:33,700 do đó, chỉ có 1 phần tử trong số 1.000 sẽ cần phải được thay đổi? 556 00:50:33,700 --> 00:50:38,770 Tôi không chắc. 557 00:50:38,770 --> 00:50:51,250 Tôi nghĩ rằng nó sẽ sao chép toàn bộ điều, nhưng nó có thể đủ thông minh mà 558 00:50:51,250 --> 00:51:00,020 Trên thực tế, những gì tôi đang suy nghĩ là tưởng tượng chúng ta đã có một mảng trông như thế này: $ array2 = [ 559 00:51:00,020 --> 00:51:11,000 Sau đó, chỉ số 'a' là một mảng [1 2 3 4], và chỉ số 'b' là một mảng của bất cứ điều gì. 560 00:51:11,000 --> 00:51:15,380 Tôi cần dấu phẩy giữa tất cả những người. Hãy tưởng tượng có dấu phẩy. 561 00:51:15,380 --> 00:51:21,210 Sau đó, 'c' là 3 giá trị. 562 00:51:24,210 --> 00:51:26,290 Okay. 563 00:51:26,290 --> 00:51:33,440 Bây giờ hãy nói rằng chúng tôi làm $ baz ($ array2); 564 00:51:33,440 --> 00:51:36,540 baz không thực hiện việc này bằng cách tham khảo. 565 00:51:43,510 --> 00:51:47,370 Vì vậy, $ foo ['c'] + +; 566 00:51:47,370 --> 00:51:52,340 Đây là một ví dụ mà chúng ta đang truyền array2 như một tham số 567 00:51:52,340 --> 00:51:57,010 và sau đó nó được sửa đổi một chỉ số cụ thể của mảng bằng cách tăng nó. 568 00:51:57,010 --> 00:52:01,090 Thực sự tôi không có ý tưởng những gì PHP là sẽ làm. 569 00:52:01,090 --> 00:52:07,200 Nó có thể dễ dàng tạo một bản sao của toàn bộ điều, nhưng nếu nó là thông minh, 570 00:52:07,200 --> 00:52:15,030 nó sẽ làm cho một bản sao của các phím này sẽ có giá trị riêng biệt của nó 571 00:52:15,030 --> 00:52:20,620 nhưng điều này vẫn có thể trỏ đến cùng một mảng 1,2,3,4 572 00:52:20,620 --> 00:52:22,320 và điều này vẫn có thể trỏ đến cùng một mảng. 573 00:52:22,320 --> 00:52:24,170 Tôi sẽ iPad nó. 574 00:52:28,900 --> 00:52:45,950 Chúng tôi vượt qua trong mảng này mà điểm anh chàng này đến 3, điểm này anh chàng [1,2,3,4], 575 00:52:45,950 --> 00:52:51,350 anh chàng này [34, ...] 576 00:52:51,350 --> 00:52:58,590 Bây giờ chúng ta đang đi qua nó để baz, chúng ta đang thay đổi này. 577 00:52:58,590 --> 00:53:03,550 Nếu PHP là thông minh, nó chỉ có thể làm - 578 00:53:11,850 --> 00:53:18,230 Chúng tôi vẫn phải sao chép một số bộ nhớ, nhưng nếu có những subarrays lồng nhau rất lớn 579 00:53:18,230 --> 00:53:21,560 chúng tôi không cần phải sao chép những người. 580 00:53:21,560 --> 00:53:27,530 Tôi không biết nếu đó là những gì nó làm, nhưng tôi có thể tưởng tượng nó làm điều đó. 581 00:53:29,050 --> 00:53:36,690 Đây cũng là một lợi thế khá lớn của C trên PHP. 582 00:53:36,690 --> 00:53:40,320 >> PHP làm cho cuộc sống dễ dàng hơn nhiều cho rất nhiều thứ, 583 00:53:40,320 --> 00:53:45,060 nhưng bạn có loại hoàn toàn không có ý tưởng tốt như thế nào nó sẽ thực hiện 584 00:53:45,060 --> 00:53:52,530 bởi vì tôi không có ý tưởng bên dưới mui xe khi nó làm cho các bản sao của sự vật, 585 00:53:52,530 --> 00:53:55,170 oh, là sẽ là một bản sao thời gian liên tục, 586 00:53:55,170 --> 00:54:01,140 là nó chỉ thay đổi 1 con trỏ, nó sẽ là bản sao tuyến tính ridiculously khó khăn? 587 00:54:01,140 --> 00:54:03,000 Điều gì sẽ xảy ra nếu nó không thể tìm thấy không gian? 588 00:54:03,000 --> 00:54:06,760 Liệu nó sau đó cần phải chạy thu gom rác thải để có được một số chi tiết không gian? 589 00:54:06,760 --> 00:54:11,210 Và thu gom rác thải có thể tùy tiện lâu. 590 00:54:11,210 --> 00:54:13,600 Trong C, bạn không phải lo lắng về những điều này. 591 00:54:13,600 --> 00:54:19,780 Mỗi dòng bạn viết bạn có thể khá nhiều lý do về việc làm thế nào nó sẽ thực hiện. 592 00:54:26,800 --> 00:54:29,150 >> Hãy xem xét ở thời điểm đó. 593 00:54:35,400 --> 00:54:37,520 Tốt đẹp là như thế nào mà bạn không phải để đối phó với các hàm băm, 594 00:54:37,520 --> 00:54:39,010 danh sách liên kết, hoặc bất cứ điều gì như thế? 595 00:54:39,010 --> 00:54:41,980 Kể từ khi làm việc với các bảng băm là dễ dàng như vậy, đây là một câu đố thú vị để làm việc trên. 596 00:54:41,980 --> 00:54:45,920 Mở một tập tin gọi là unique.php và trong đó viết một chương trình PHP 597 00:54:45,920 --> 00:54:48,330 (Cũng được biết đến như là một "kịch bản"). 598 00:54:48,330 --> 00:54:55,700 Chúng ta có xu hướng để gọi cho họ kịch bản nếu họ ngắn mà bạn chạy tại dòng lệnh. 599 00:54:55,700 --> 00:55:02,950 Về cơ bản, bất kỳ ngôn ngữ mà bạn không biên dịch nhưng bạn sẽ chạy file thực thi 600 00:55:02,950 --> 00:55:05,920 tại dòng lệnh, bạn có thể gọi đó là kịch bản thực thi. 601 00:55:05,920 --> 00:55:08,510 Tôi cũng chỉ có thể viết một chương trình C mà thực hiện điều này, 602 00:55:08,510 --> 00:55:12,300 nhưng tôi không gọi nó là một kịch bản lần đầu tiên kể từ khi tôi biên dịch nó và sau đó chạy nhị phân. 603 00:55:12,300 --> 00:55:15,480 Tuy nhiên, chương trình này PHP chúng ta sẽ gọi một kịch bản. 604 00:55:15,480 --> 00:55:23,830 Hoặc nếu chúng tôi đã viết nó trong Python hay Perl hay Node.js hoặc bất kỳ những điều đó, 605 00:55:23,830 --> 00:55:26,500 chúng tôi muốn gọi cho họ tất cả các kịch bản bởi vì bạn chạy chúng tại các dòng lệnh 606 00:55:26,500 --> 00:55:30,040 nhưng chúng tôi không biên dịch chúng. 607 00:55:30,860 --> 00:55:33,400 Chúng ta có thể làm điều này khá nhanh chóng. 608 00:55:36,960 --> 00:55:41,480 Chúng tôi sẽ không sử dụng argv. Hãy chỉ thổi qua. 609 00:55:41,480 --> 00:55:45,730 Gọi nó là độc đáo, viết một chương trình. 610 00:55:45,730 --> 00:55:49,400 Bạn có thể giả định rằng các đầu vào sẽ chứa một từ mỗi dòng. 611 00:55:49,400 --> 00:55:52,020 Trên thực tế, argv sẽ được khá tầm thường để sử dụng. 612 00:56:03,730 --> 00:56:06,720 unique.php. 613 00:56:08,550 --> 00:56:13,750 Điều đầu tiên đầu tiên, chúng tôi muốn kiểm tra xem chúng tôi đã được thông qua 1 đối số dòng lệnh. 614 00:56:13,750 --> 00:56:20,900 Cũng như bạn mong chờ argc và argv trong C, chúng tôi vẫn còn có những người trong PHP. 615 00:56:20,900 --> 00:56:33,900 Vì vậy, nếu ($ argc == 2) sau đó tôi sẽ không giải quyết in một tin nhắn hoặc bất cứ điều gì. 616 00:56:33,900 --> 00:56:37,340 Tôi sẽ chỉ thoát ra, mã lỗi của 1. 617 00:56:37,340 --> 00:56:41,340 Tôi cũng có thể trở về 1. 618 00:56:41,340 --> 00:56:53,180 Hiếm khi trong PHP là tại tiểu bang này, nơi chúng tôi đang ở - 619 00:56:53,180 --> 00:56:57,820 Thông thường, bạn đang ở trong một chức năng được gọi là một chức năng được gọi là một chức năng được gọi là bởi một hàm. 620 00:56:57,820 --> 00:57:02,070 Và nếu có điều gì sai và bạn chỉ muốn thoát khỏi tất cả mọi thứ hoàn toàn, 621 00:57:02,070 --> 00:57:05,680 xuất cảnh chỉ kết thúc chương trình. 622 00:57:05,680 --> 00:57:08,160 Điều này cũng tồn tại trong C. 623 00:57:08,160 --> 00:57:10,700 Nếu bạn đang ở trong một chức năng trong một chức năng trong một chức năng trong một chức năng 624 00:57:10,700 --> 00:57:17,540 và bạn muốn chỉ cần tiêu diệt chương trình, bạn có thể gọi xuất cảnh, nó sẽ chỉ thoát khỏi. 625 00:57:17,540 --> 00:57:23,120 Nhưng trong PHP nó thậm chí còn hiếm hoi mà chúng tôi đang ở cấp cao nhất này. 626 00:57:23,120 --> 00:57:26,090 Thông thường chúng ta đang ở trong một số loại chức năng, vì vậy chúng tôi gọi xuất cảnh 627 00:57:26,090 --> 00:57:29,650 do đó chúng tôi không phải trả lại 1 điều mà sau đó nhận ra có một lỗi 628 00:57:29,650 --> 00:57:32,270 vì vậy mà trả về nếu công nhận có một lỗi. 629 00:57:32,270 --> 00:57:35,270 Chúng tôi không muốn để đối phó với điều đó, vì vậy thoát khỏi (1); 630 00:57:35,270 --> 00:57:38,240 (1) trở lại, trong trường hợp này sẽ là tương đương. 631 00:57:38,240 --> 00:57:44,000 >> Sau đó, những gì chúng tôi muốn mở, chúng tôi muốn để fopen. 632 00:57:44,000 --> 00:57:46,760 Các đối số sẽ trông khá tương tự. 633 00:57:46,760 --> 00:57:51,600 Chúng tôi muốn fopen ($ argv [1], và chúng tôi muốn mở nó ra đọc. 634 00:57:51,600 --> 00:57:55,720 Mà trả về một tài nguyên mà chúng ta sẽ gọi f. 635 00:57:55,720 --> 00:58:02,180 Điều này có vẻ khá giống với C không nó, ngoại trừ chúng tôi không cần phải nói * FILE. 636 00:58:02,180 --> 00:58:06,170 Thay vào đó, chúng tôi chỉ nói rằng $ f. Okay. 637 00:58:06,170 --> 00:58:17,190 Trên thực tế, tôi nghĩ rằng điều này thậm chí cung cấp cho chúng tôi một gợi ý như PHP chức năng tập tin gọi là. PHP File. 638 00:58:17,190 --> 00:58:23,990 Điều này sẽ làm là đọc một tập tin toàn bộ vào một mảng. 639 00:58:23,990 --> 00:58:29,770 Bạn thậm chí không cần để fopen nó. Nó sẽ làm điều đó cho bạn. 640 00:58:37,450 --> 00:58:43,700 Vì vậy, $ dòng = file ($ argv [1]); 641 00:58:43,700 --> 00:58:49,680 Bây giờ tất cả các dòng của tập tin nằm trong dây chuyền. Bây giờ chúng tôi muốn sắp xếp các dòng. 642 00:58:49,680 --> 00:58:52,180 Làm thế nào chúng ta có thể sắp xếp các dòng? 643 00:58:52,180 --> 00:58:54,920 Chúng tôi sắp xếp các dòng. 644 00:58:54,920 --> 00:58:58,080 Và bây giờ chúng tôi có thể in ra hoặc bất cứ điều gì. 645 00:58:58,080 --> 00:59:05,580 Có lẽ cách đơn giản nhất là foreach ($ dòng như $ line) echo $ line; 646 00:59:05,580 --> 00:59:10,960 [Sinh viên] sẽ không chúng tôi thậm chí vượt qua dòng bằng cách tham khảo một cái gì đó vào loại? 647 00:59:10,960 --> 00:59:28,850 Đây là nơi mà loại sẽ được định nghĩa là chức năng loại (& $ array). 648 00:59:28,850 --> 00:59:32,650 Khi bạn gọi hàm bạn không vượt qua nó bằng cách tham khảo. 649 00:59:32,650 --> 00:59:36,900 Đó là chức năng định nghĩa nó như dùng nó như là tài liệu tham khảo. 650 00:59:36,900 --> 00:59:40,900 Điều này thực sự là chính xác những gì đã đi sai 651 00:59:40,900 --> 00:59:46,220 khi chúng tôi đặt tất cả mọi thứ đến các máy chủ của chúng tôi khi chúng tôi đi từ 5,3 đến 5,4. 652 00:59:46,220 --> 00:59:53,800 Cho đến 5,4, điều này là hoàn toàn hợp lý. 653 00:59:53,800 --> 00:59:58,740 Một chức năng không mong đợi để có nó như là tài liệu tham khảo, nhưng bạn có thể vượt qua nó như là tài liệu tham khảo 654 00:59:58,740 --> 01:00:02,860 do đó, nếu chức năng không xảy ra để sửa đổi nó, nó vẫn còn thay đổi. 655 01:00:02,860 --> 01:00:05,850 5,4, bạn không phải làm điều này. 656 01:00:05,850 --> 01:00:11,740 Vì vậy, bây giờ cách duy nhất bạn đi qua tham khảo là nếu chức năng một cách rõ ràng nó. 657 01:00:11,740 --> 01:00:19,840 Nếu bạn không muốn nó để sửa đổi nó, sau đó bạn cần để làm sao chép = $ đường dây và bản sao vượt qua. 658 01:00:19,840 --> 01:00:24,820 Vì vậy, bây giờ dòng sẽ được bảo tồn và bản sao sẽ được thay đổi. 659 01:00:27,670 --> 01:00:31,460 php.unique.php. Tôi có thể có sai lầm một cái gì đó lên. 660 01:00:31,460 --> 01:00:33,190 Bất ngờ 'loại'. 661 01:00:38,320 --> 01:00:43,850 Có sẽ là một cái gì đó mà thực hiện điều này cho chúng ta. 662 01:00:43,850 --> 01:00:45,820 Nó thậm chí không có. 663 01:00:45,820 --> 01:00:52,140 Chú ý khi bạn đọc hướng dẫn sử dụng đối số đầu tiên dự kiến ​​sẽ là một mảng 664 01:00:52,140 --> 01:00:56,490 và nó được thực hiện bằng cách tham chiếu. 665 01:00:58,160 --> 01:01:03,540 Tại sao điều này phàn nàn với tôi? Bởi vì tôi có chức năng loại này vẫn còn ở đây mà tôi không muốn. 666 01:01:03,540 --> 01:01:09,210 Được rồi, php.unique.php. Tôi đã không vượt qua nó một cuộc tranh cãi bởi vì tôi không có một tập tin. 667 01:01:09,210 --> 01:01:13,560 Đó là php.unique.php trên test.php. 668 01:01:13,560 --> 01:01:19,080 Đây là test.php in ra theo một thứ tự sắp xếp tốt đẹp. 669 01:01:19,080 --> 01:01:24,600 Chú ý sắp xếp theo thứ tự là loại lạ cho một tập tin mã 670 01:01:24,600 --> 01:01:27,460 bởi vì tất cả các dòng trống của chúng tôi sẽ đến đầu tiên 671 01:01:27,460 --> 01:01:30,190 sau đó sẽ đến tất cả của các chỗ lõm cấp 1 của chúng tôi 672 01:01:30,190 --> 01:01:33,360 sau đó đến tất cả của các chỗ lõm không của chúng tôi. 673 01:01:33,360 --> 01:01:38,620 Yeah. >> [Sinh viên] Vì vậy, cho mã nguồn đã không được thông qua tham khảo? 674 01:01:38,620 --> 01:01:42,240 Mà thường thông qua giá trị? 675 01:01:42,240 --> 01:01:50,240 Bowden Khi bạn gọi một chức năng, nó không bao giờ xác định cho dù nó đã được thông qua tham khảo. 676 01:01:50,240 --> 01:01:53,960 Đó là định nghĩa chức năng mà quyết định cho dù nó đã được thông qua tham khảo. 677 01:01:53,960 --> 01:01:59,450 Và nhìn vào định nghĩa chức năng của phân loại hoặc chỉ tìm kiếm này, 678 01:01:59,450 --> 01:02:02,820 nó có các đối số theo tham chiếu. 679 01:02:02,820 --> 01:02:07,160 Vì vậy, bất kể cho dù bạn muốn nó để có nó bằng cách tham khảo, nó không mang nó theo tham chiếu. 680 01:02:07,160 --> 01:02:10,200 Nó thay đổi các mảng tại chỗ. 681 01:02:10,200 --> 01:02:17,400 Đây chỉ là không được phép. Bạn không được phép làm điều này. >> [Sinh viên] Oh, okay. 682 01:02:17,400 --> 01:02:22,410 [Bowden] Đây, sắp xếp là sẽ mất dòng bằng cách tham khảo và sửa đổi nó. 683 01:02:22,410 --> 01:02:26,850 Và một lần nữa, nếu bạn không muốn nó làm điều đó, bạn có thể tạo một bản sao của phân loại. 684 01:02:26,850 --> 01:02:35,850 Ngay cả trong trường hợp này, bản sao không phải là thực sự là một bản sao của dòng. 685 01:02:35,850 --> 01:02:40,620 Nó chỉ đến cùng một điều đầu tiên cho đến khi nó bị thay đổi, 686 01:02:40,620 --> 01:02:44,430 nơi nó đầu tiên sẽ được sửa đổi trong chức năng sắp xếp, 687 01:02:44,430 --> 01:02:50,940 , bởi vì nó copy-on-viết, bây giờ là một bản sao của bản sao sẽ được thực hiện. 688 01:02:57,500 --> 01:03:04,250 Bạn cũng có thể làm điều này. Đó là nơi khác mà bạn có thể nhìn thấy dấu "và". 689 01:03:04,250 --> 01:03:07,190 Bạn nhìn thấy nó trong vòng lặp foreach, bạn nhìn thấy nó trong tờ khai chức năng, 690 01:03:07,190 --> 01:03:10,040 và bạn nhìn thấy nó khi chỉ gán biến. 691 01:03:10,040 --> 01:03:12,350 Bây giờ chúng tôi đã thực hiện không có gì bằng cách làm này 692 01:03:12,350 --> 01:03:15,600 vì sao chép và dòng nghĩa là điều tương tự. 693 01:03:15,600 --> 01:03:19,940 Bạn có thể sử dụng đường dây và sao chép thay thế cho nhau. 694 01:03:19,940 --> 01:03:25,430 Bạn có thể làm unset (bản sao), và điều đó không có dòng unset, 695 01:03:25,430 --> 01:03:29,120 bạn chỉ cần mất bạn tham khảo để điều tương tự. 696 01:03:29,120 --> 01:03:33,440 Vì vậy, tính đến thời điểm này, tại dòng là cách duy nhất bạn có thể truy cập các dòng. 697 01:03:36,450 --> 01:03:38,770 >> Câu hỏi? 698 01:03:41,000 --> 01:03:42,460 Yeah. 699 01:03:42,460 --> 01:03:45,880 [Sinh viên] hoàn toàn tắt chủ đề, nhưng bạn không phải đóng PHP - >> Bạn không. 700 01:03:45,880 --> 01:03:47,730 Okay. 701 01:03:47,730 --> 01:03:53,790 [Bowden tôi sẽ đi xa như để nói nó là xấu thực hành để đóng chúng. 702 01:03:53,790 --> 01:03:57,580 Đó có thể là một cường điệu, đặc biệt là trong một kịch bản, 703 01:03:57,580 --> 01:04:03,740 nhưng chúng ta hãy xem những gì sẽ xảy ra nếu tôi làm điều này. 704 01:04:03,740 --> 01:04:08,890 Điều đó đã làm gì. Điều gì sẽ xảy ra nếu tôi muốn - [thở dài] 705 01:04:13,870 --> 01:04:16,960 Tôi cần phải vượt qua một đối số. 706 01:04:19,000 --> 01:04:22,050 Shoot. Tôi gọi nó là sai. 707 01:04:24,340 --> 01:04:28,310 Vì vậy, php.unique.php với một tham số. 708 01:04:28,310 --> 01:04:30,980 Bây giờ tôi thậm chí không cần điều này. 709 01:04:34,520 --> 01:04:37,740 Tôi sẽ vượt qua nó một đối số hợp lệ. 710 01:04:37,740 --> 01:04:42,050 Này in bất cứ điều gì đó là in ấn. 711 01:04:45,260 --> 01:04:50,080 Tôi đang in bản sao và bản sao không tồn tại. Vì vậy, dòng. 712 01:04:53,650 --> 01:04:58,270 Nó được in tất cả mọi thứ, và sau đó nhận thấy tất cả những điều này rác xuống đây, 713 01:04:58,270 --> 01:05:06,690 bởi vì trong bất cứ điều gì PHP đó là bên ngoài các thẻ PHP 714 01:05:06,690 --> 01:05:09,520 là chỉ cần đi để được in theo nghĩa đen. 715 01:05:09,520 --> 01:05:18,050 Đó là lý do tại sao HTML, nó rất tốt đẹp mà tôi có thể làm div blah, blah, blah lớp hoặc bất cứ điều gì, 716 01:05:18,050 --> 01:05:25,140 blah, blah, blah và sau đó làm một số mã PHP và sau đó làm div cuối. 717 01:05:25,140 --> 01:05:36,460 Và bây giờ in ấn này tôi nhận được div tốt đẹp của tôi lên hàng đầu, tất cả mọi thứ mà PHP in, div ở phía dưới. 718 01:05:36,460 --> 01:05:43,510 Tai hại khi một cái gì đó như thế này xảy ra, đó là khá phổ biến, 719 01:05:43,510 --> 01:05:47,930 chỉ một dòng mới đi lạc ở dưới cùng của tập tin. 720 01:05:47,930 --> 01:05:50,940 Bạn sẽ không nghĩ rằng nó sẽ là lớn của một thỏa thuận 721 01:05:50,940 --> 01:05:58,660 cho đến khi bạn xem xét thực tế rằng với trình duyệt 722 01:05:58,660 --> 01:06:03,880 >> Chuyển hướng công việc như thế nào hoặc về cơ bản làm việc bất kỳ tiêu đề, 723 01:06:03,880 --> 01:06:07,980 khi bạn thực hiện kết nối của bạn đến một trang web và nó sẽ gửi lại tất cả những tiêu đề và những thứ 724 01:06:07,980 --> 01:06:12,020 như đáp ứng 200 hoặc phản ứng chuyển hướng hoặc bất cứ điều gì, 725 01:06:12,020 --> 01:06:18,230 tiêu đề là chỉ có giá trị cho đến khi byte đầu tiên của dữ liệu được gửi. 726 01:06:18,230 --> 01:06:23,140 Bạn có thể gửi hàng ngàn lần, nhưng ngay sau khi byte đầu tiên của dữ liệu được gửi 727 01:06:23,140 --> 01:06:26,120 bạn không được để chuyển hướng một lần nữa. 728 01:06:26,120 --> 01:06:31,860 >> Nếu bạn có một dòng mới đi lạc ở dưới cùng của một tập tin 729 01:06:31,860 --> 01:06:37,260 và chúng ta hãy nói rằng bạn sử dụng chức năng này và sau đó bạn muốn - 730 01:06:41,580 --> 01:06:52,870 Hãy nói rằng đó là một tập tin đó là index.php và bạn require_once một cái gì đó - 731 01:06:52,870 --> 01:06:56,920 Tôi không thể nghĩ ra một ví dụ tốt về nó. 732 01:06:56,920 --> 01:07:04,740 Vấn đề xảy ra khi dòng này ở phía dưới được lặp lại. 733 01:07:04,740 --> 01:07:08,660 Bạn không muốn bất cứ điều gì đã được lặp lại. 734 01:07:10,820 --> 01:07:15,700 Mặc dù bạn không có ý định về bất cứ điều gì bị lặp lại, một cái gì đó đã được lặp lại 735 01:07:15,700 --> 01:07:17,990 và vì vậy bây giờ bạn không phải là nghĩa vụ để gửi tiêu đề nữa 736 01:07:17,990 --> 01:07:20,030 và bạn sẽ nhận được khiếu nại. 737 01:07:22,170 --> 01:07:24,420 Bạn chỉ cần không cần những thẻ đóng. 738 01:07:24,420 --> 01:07:27,420 Nếu bạn có kế hoạch làm một cái gì đó với HTML - 739 01:07:27,420 --> 01:07:30,490 và đó là hoàn toàn hợp lý để làm ở đây div bất cứ điều gì 740 01:07:30,490 --> 01:07:39,450 và sau đó vào thời điểm này, bạn có thể hoặc không có thể bao gồm họ. 741 01:07:39,450 --> 01:07:41,590 Nó không thực sự quan trọng. 742 01:07:41,590 --> 01:07:45,450 Nhưng trong kịch bản PHP nó hiếm hoi để đóng nó. 743 01:07:45,450 --> 01:07:50,400 Khi tất cả mọi thứ là PHP, hoàn toàn tất cả mọi thứ, 744 01:07:50,400 --> 01:07:55,460 bạn không thực sự cần phải đóng nó / bạn không nên đóng nó. 745 01:08:02,030 --> 01:08:05,720 >> Đối phó với chuỗi là đẹp hơn nhiều trong C. 746 01:08:05,720 --> 01:08:09,470 Trong PHP bạn có thể chỉ định một chuỗi với dấu nháy đơn hoặc đôi. 747 01:08:09,470 --> 01:08:12,820 Với báo giá duy nhất, bạn không thể sử dụng "thoát" trình tự. 748 01:08:12,820 --> 01:08:17,640 Liên tục trốn thoát, blah, blah, blah. 749 01:08:19,920 --> 01:08:24,010 Vì vậy, printf là rất hiếm trong PHP. 750 01:08:24,010 --> 01:08:32,290 Tôi đoán tôi sẽ sử dụng printf nếu tôi muốn làm một loại điều - trong pset 5 bạn đã sử dụng sprintf hoặc bất cứ điều gì. 751 01:08:32,290 --> 01:08:36,060 Nhưng bạn muốn làm 001.jpg và 002.jpg. 752 01:08:36,060 --> 01:08:40,300 Vì vậy, cho rằng loại điều mà tôi thực sự muốn để định dạng văn bản tôi sẽ sử dụng printf. 753 01:08:40,300 --> 01:08:44,689 Nhưng nếu không tôi sẽ chỉ sử dụng nối chuỗi. 754 01:08:44,689 --> 01:08:47,000 Tôi không bao giờ thực sự sử dụng printf. 755 01:08:49,229 --> 01:09:00,170 Chúng tôi chỉ phân biệt các chi tiết giữa dấu nháy đơn và dấu ngoặc kép. 756 01:09:00,170 --> 01:09:07,490 Sự khác biệt lớn nhất là báo giá duy nhất, nó sẽ được in theo nghĩa đen. 757 01:09:07,490 --> 01:09:15,390 Không có dữ liệu char trong PHP, không giống như C, do đó, điều này là tương đương với điều này. 758 01:09:15,390 --> 01:09:17,970 Họ là cả hai chuỗi. 759 01:09:17,970 --> 01:09:29,180 Và những điều tốt đẹp về chuỗi giá duy nhất là tôi có thể nói "hello thế giới!" blah, blah, blah, 760 01:09:29,180 --> 01:09:33,340 $ $ Wooo. 761 01:09:33,340 --> 01:09:38,260 Điều gì sẽ xảy ra khi tôi in này là nó sẽ in nó theo nghĩa đen. 762 01:09:38,260 --> 01:09:40,680 Hãy loại bỏ tất cả các công cụ của chúng tôi. 763 01:09:40,680 --> 01:09:44,700 Vì vậy, echo $ str1; 764 01:09:48,569 --> 01:09:56,570 Nó nghĩa là in tất cả những điều đó: dấu hiệu đồng đô la, 765 01:09:56,570 --> 01:09:58,770 dấu gạch chéo ngược n, mà bạn sẽ nghĩ rằng sẽ là dòng mới - 766 01:09:58,770 --> 01:10:01,500 tất cả những điều nó in theo nghĩa đen. 767 01:10:01,500 --> 01:10:05,650 Điều duy nhất bạn cần phải thoát khỏi dấu nháy đơn 768 01:10:05,650 --> 01:10:09,470 bởi vì nếu không, nó sẽ nghĩ rằng nó đóng dấu nháy đơn. 769 01:10:09,470 --> 01:10:15,050 Dấu ngoặc kép, hoàn toàn khác nhau. 770 01:10:20,300 --> 01:10:25,870 Chúng tôi đã thấy nổi bật cú pháp cluing chúng tôi với những gì sắp gặp rắc rối. 771 01:10:25,870 --> 01:10:36,190 php.unique. Không xác định biến: wooo bởi vì điều này được giải thích như là một biến được gọi là wooo. 772 01:10:36,190 --> 01:10:42,400 Dấu ngoặc kép cho phép bạn chèn các biến vào - 773 01:10:42,400 --> 01:10:52,730 Hãy nói rằng $ name = "Rob"; 774 01:10:52,730 --> 01:10:58,020 Vì vậy, echo "Xin chào, tên tôi là $ name!"; 775 01:10:58,020 --> 01:11:09,260 Nó nhận ra điều này như một biến. 776 01:11:09,260 --> 01:11:21,210 Khi tôi chạy đó - và tôi sẽ chèn một dòng mới - Hi, tôi tên là Rob! và chào thế giới! 777 01:11:21,210 --> 01:11:24,910 Điều này là bởi vì tôi không bao giờ loại bỏ việc in ấn của wooo trên. 778 01:11:24,910 --> 01:11:30,020 Có thêm 1 bước bạn có thể làm. 779 01:11:30,020 --> 01:11:39,250 $ Array = [1, 2, 3]; 780 01:11:39,250 --> 01:11:43,270 Điều gì sẽ xảy ra nếu tôi muốn in chỉ số đầu tiên của mảng? 781 01:11:43,270 --> 01:11:45,150 Bạn làm $ array [0]. 782 01:11:45,150 --> 01:11:49,280 Tô sáng cú pháp là một đầu mối. Này là những gì sẽ làm gì? 783 01:11:52,320 --> 01:11:54,510 php.unique. 784 01:11:54,510 --> 01:11:59,860 Xin chào, tên tôi là 1! mà không phải là những gì tôi muốn. 785 01:11:59,860 --> 01:12:05,050 Nổi bật cú pháp đã nói dối với tôi. 786 01:12:05,050 --> 01:12:13,020 Hãy thử một '-> 1,' b '-> 2. 787 01:12:18,450 --> 01:12:21,440 Đó là cách tôi sẽ phải viết nó. 788 01:12:26,350 --> 01:12:32,160 Bất ngờ nháy đơn (T_ENCAPSED blah, blah, blah, blah, blah). 789 01:12:32,160 --> 01:12:41,780 Ý tưởng là rằng nó không công nhận điều này như là một phần của mảng. 790 01:12:41,780 --> 01:12:46,620 Nó không nhận ra điều này như là một mảng lập chỉ mục của một lá thư. 791 01:12:46,620 --> 01:12:49,870 Bạn muốn làm điều đó được bao quanh bởi các dấu ngoặc nhọn, 792 01:12:49,870 --> 01:12:54,730 và bây giờ bất cứ điều gì là trong cú đúp xoăn sẽ được nội suy, 793 01:12:54,730 --> 01:13:00,340 đó là từ ngữ chúng tôi sử dụng cho kỳ diệu chèn các biến này vào đúng nơi. 794 01:13:00,340 --> 01:13:04,280 Bây giờ làm điều này, php.unique, Xin chào, tên tôi là 1! như mong đợi 795 01:13:04,280 --> 01:13:07,720 hay Hi, tôi tên là Rob! 796 01:13:14,110 --> 01:13:23,130 Một điều đó là loại tốt đẹp về báo giá duy nhất là - 797 01:13:23,130 --> 01:13:28,480 Có một số chi phí để nội suy. 798 01:13:30,520 --> 01:13:35,100 Nếu bạn sử dụng dấu ngoặc kép, thông dịch viên có để đi qua chuỗi này, 799 01:13:35,100 --> 01:13:41,500 đảm bảo rằng, "Ồ, đây là một biến Bây giờ tôi cần phải đi nhận được rằng biến và chèn nó ở đây." 800 01:13:41,500 --> 01:13:48,930 Thậm chí nếu bạn không sử dụng bất kỳ biến, 801 01:13:48,930 --> 01:13:52,220 không có gì bên trong các dấu ngoặc kép này cần được nội suy, 802 01:13:52,220 --> 01:13:56,800 nhưng nó vẫn sẽ chậm hơn bởi vì nó cần để đi qua các dấu ngoặc kép 803 01:13:56,800 --> 01:14:00,130 tìm kiếm những thứ cần được nội suy. 804 01:14:00,130 --> 01:14:05,360 Dấu ngoặc kép Vì vậy, duy nhất có thể là nhanh hơn một chút nếu không có gì cần phải được nội suy, 805 01:14:05,360 --> 01:14:15,650 và tôi có xu hướng thậm chí sử dụng một dấu ngoặc kép, "Hi, tên của tôi là '. $ Array ['a'] anyway. 806 01:14:15,650 --> 01:14:20,430 Đó sẽ là tương đương với những gì chúng ta có trước đây. 807 01:14:24,840 --> 01:14:28,440 Nhưng đó là một vấn đề ưu tiên. 808 01:14:28,440 --> 01:14:34,750 Nếu bạn đang sử dụng PHP, bạn có thể không quan tâm về sự khác biệt tốc độ. 809 01:14:34,750 --> 01:14:39,480 Không có đủ lý do chúng ra để bắt đầu với. 810 01:14:39,480 --> 01:14:43,030 >> Bất kỳ thức câu hỏi? 811 01:14:47,430 --> 01:14:51,710 >> Chúng tôi thực sự không thậm chí có được thông qua tất cả của nó, nhưng công cụ này là nhàm chán. 812 01:14:51,710 --> 01:14:59,080 Điều cuối cùng đó là loại tốt đẹp trong PHP là khi bạn đang làm việc với HTML, 813 01:14:59,080 --> 01:15:06,450 bạn sẽ sử dụng nó một chút, do đó, các phím tắt cú pháp tốt đẹp cho việc in ấn một biến. 814 01:15:32,400 --> 01:15:36,730 Mà không đặt PHP ở đây, điều này được gọi là thẻ ngắn. 815 01:15:36,730 --> 01:15:44,330 Chính thức như của PHP 5.4, điều này được phản đối. 816 01:15:44,330 --> 01:15:48,640 Bạn đang đề nghị để đưa php. 817 01:15:48,640 --> 01:15:55,770 Điều này vẫn còn được hỗ trợ, thẻ quá ngắn với <= vẫn hoàn toàn tốt đẹp. 818 01:15:55,770 --> 01:16:02,480 Đó là theo mặc định hỗ trợ, vì vậy bạn có thể sử dụng như bạn muốn, và họ đang khá thuận tiện. 819 01:16:02,480 --> 01:16:05,700 >> Bất kỳ câu hỏi nào? 820 01:16:07,780 --> 01:16:09,270 Được rồi. 821 01:16:10,840 --> 01:16:13,800 >> Stay sang trọng, San Diego. 822 01:16:13,800 --> 01:16:16,070 [Cười khúc khích] 823 01:16:18,620 --> 01:16:22,660 Bye. [Cười] 824 01:16:24,350 --> 01:16:28,470 [Vỗ tay] [cười] 825 01:22:46,460 --> 01:22:49,460 >> [CS50.TV]