DAVID מלאן: בסדר. זה CS50, וזה סוף השבוע תשע. זה היה סופה מעל בימים האחרונים. ובעיה להגדיר שבע, אם אתה הברך עמוק לתוכו, מבין שיש די קצת חדשים שנמצא שם. אבל בואו נראה אם ​​אנחנו לא יכולים לחבר הכל ביחד כאן בקצרה לפני כן סוטה בזאת כיוון וראייה אחר איפה עוד אנחנו יכולים ללכת. אז עד כה, שדיברנו על ה-HTML. שדיברנו עליו ב-CSS. דברנו על PHP. שהתחלת לחוות SQL. היום, נדבר קצת על JavaScript. אבל איך עושים את כל אלה שונים שפות מתאימות זה לזה? אז דיברנו בשבוע שעבר על רעיון של צורך בשרת. אז בואו פשוט לצייר מלבן זה כשרת אינטרנט כאן. ושרת אינטרנט משרת בוודאי קבצים. וחלק מאותם קבצים יכול להיות קבצי HTML. אז אחד מהדברים ששרת אינטרנט יכול לירוק יכול להיות קובץ ש אנחנו פשוט לצייר ככה המכיל כמה HTML. אז במונחים של ההדיוטות, מה אין HTML מאפשר לך לעשות? קהל: נחמד מראה עמוד. DAVID מלאן: בסדר, להפוך דף נראה נחמד, למרות שאני חושב שאני כבר מוכח שאחרת. אז ה-HTML אין לך לפרוס את דפים מבחינה מבנית, וזה מאפשר לך סוג של בחינה אסתטית לסמן את הדף, לסמן את תוכן סטטי, כך שאתה לאחר מכן תוכל להציג אותו בדפדפן אינטרנט. אבל זה המפתח. זה תוכן סטטי. אתה כותב את זה, אתה שומר אותו, ואז אתה שולח אותו. ושרת האינטרנט לאחר מכן משרת אותו למבקרים שלך. אבל אנחנו לסגנן דברים באמצעות שונה שפה לגמרי. התחלנו להשתמש בתכונת סגנון תגים מסוימים. ותכונת הסגנון תן לנו להגדיר דברים כמו גודל גופן וצבע. ויש לך כנראה התחיל לגלות, או שאתה בקרוב לסופי פרויקטים פוטנציאליים, אך אחרים תכונות שאתה יכול להשתמש ב-CSS. וכך במונחים של ההדיוטות, מה באמת אז CSS עושה? אלה הם רק דוגמאות ממנו. מה זה ייתן לך לעשות את זה HTML לא נראה ממה שראינו עד כה? קהל: הגדרת סגנונות בעצמך. DAVID מלאן: הגדרת סגנונות בעצמך. אז להגדיר דברים כמו שיעורים כמו שאתה אולי נתקל, או באופן ייחודי לזהות צמתים במסמך כך כי אתה יכול לסגנן אותם. אבל באופן ספציפי יותר, הייתי אומר שCSS באמת מאפשר לך לקחת את הדברים המייל אחרון ומאפשר לכם להגדיר הרבה באופן מדויק יותר את האסתטיקה, בעוד HTML על פי רוב מאפשר לי אתה מבנה הדפים שלך. ואף על פי שיש כמה ברירות מחדל, כמו שראינו את התג עבור תג כותרת, אשר באופן כללי עשה דברים גדולים ונועזים. זה הגדרה די גנרי של התג - גדול ונועז. מה גודל גופן זה? איזה צבע זה? איך מודגש הוא ש? ו-CSS מאפשר לך יותר דק דברים כמו שמנגינה. כמו גם פריסה, כמו כמה שלכם ראית. ולמען אמת, CSS הוא קצת של שפה מלוכלכת. זה מאוד חזק בכך שאתה יכול לעשות פשוטו כמשמעו, כל אתר אינטרנט שיש לך ראיתי באינטרנט היום עם זה, אבל זה סוג של כאב בצוואר. וכמה מכם דפקו את הראש שלך על הקירות כבר פשוט לעשות משהו טיפשי כמו מרכז תפריט על בעיה להגדיר שבע אם אתה כבר הגעת ל שלב זה כבר. אבל תבין, הדברים האלה קל יותר לאורך זמן. אתה מתחיל לשים לב לדפוסים. ושוב, גוגל תהיה חבר שלך לדרכים השונות שבהן אתה יכול לפתור בעיות מסוג זה. ואני מעז לומר שעם CSS, HTML ועוד בדרך כלל, אתה יכול לפתור את הבעיות ב דרכים רבות יותר, כל זה היה יכול מאוד גם יהיה נכון, ממה שאתה יכול במשהו כמו C, אפילו עכשיו PHP, או ב-JavaScript. יש רק רבים ושונה דרכים להוציא דברים. אבל זה התחיל לקבל מבולגן, אמרנו. פשוט סוג של ערבוב-HTML שלך ו CSS שלך עם תכונת הסגנון היה קצת מרושל. וכך אנו במקום אמרו, סוג של מופשט מדבר, שאתה צריך לפחות להתחיל לגורם מתוך CSS שלך כנראה. לא הסגנון שלך תכונות, אבל לפחות להשתמש בתג בסגנון בתוך מה חלק של דף האינטרנט? קהל: ראש. DAVID מלאן: בראש. עד עכשיו, הייתה לנו רק את הכותרת שם, אבל אתה יכול גם להוסיף סגנון לתייג, ואתה יכול לשים CSS שלך בערך מדבר לכיוון החלק העליון של הדף. אבל אז לקח את הדברים צעד אחד קדימה ואנו בחשבון כי מתוך יותר לקובץ נפרד. וכך שני קבצים אלה היו איכשהו עכשיו מקושר. ואכן זה היה תג שעשה את זה. ומה שהיה אחד מהעל מניעים להפקטורינג אותנו ל-CSS כל עוד? קהל: Reusability. DAVID מלאן: Reusability. נכון? יכול להיות שראית בשבעה כבר נקבע p- כי הרבה דפים, דף קנייה, בדף המכירה, דף תיק, הוא ככל הנראה מובנה באופן דומה במקצת. יש לוגו של מימון CS50 בראש אלא אם כן אתה כבר החלטת לשנות את זה. יש תחתונה ב חלק תחתון של עמודים. ו-CSS מאפשר לך אז גורם אותו אותו לקובץ נפרד, כך שאם אתה רוצה לשנות משהו בעולם על פני כל האתר שלך, אתה יכול באמת פשוט לשנות את זה במקום אחד. אבל יש מחיר שאתה משלם באופן פוטנציאלי על ידי בעל בחשבון את CSS מקובץ HTML לתוך נפרד להגיש התייחסותו עם תג, שראינו ביום שני. מה יכול להיות החסרון של זה? במחשבה לאחור לפני שבוע לכשאנחנו מדבר על HTTP ו-TCP / IP וכיצד האינטרנט עובד. משהו כאן? קהל: זה לוקח יותר זמן. DAVID מלאן: זה לוקח יותר זמן. למה? קהל: [לא ברור]. DAVID מלאן: כן. אז זה ללא ספק לוקח קצת יותר זמן. בגלל אחד, CSS הוא ברור לא באותו הקובץ. אז עכשיו אתה צריך לעשות לא אחד, אלא שתי בקשות. וכל אחת מהבקשות אלה כפי שראינו ב כרום במפקח כביכול, והסתכלנו על כרטיסיית הרשת, כל של קבצים אלה דורש HTTP אחד בקשה, שראינו לוקחת כמות מסוימת של זמן. עכשיו, אולי זה לא הרבה. אולי זה רק 20 אלפיות שנייה. אולי זה 200 אלפיות שנייה. אבל תחשוב על דף כמו פייסבוק, או CNN, או גוגל, שהם הרבה גדול יותר מהדוגמות שיש לנו הסתכל עד כה. דפים אלו עשויים להיות עשרות קבצים, כל אחד מהם עלול לחייב להורדה של קובץ. אז דברים יכולים באופן פוטנציאלי מתחיל להאט. ובמיוחד בימים אלה כאשר כולנו יש טלפונים ניידים בכיסים שלנו ו חיבורי אינטרנט איטיים יותר, צורך לחכות עוד כמה אלפיות שנייה, כמה יותר אלפיות שנייה עבור נוסף קבצים באמת יכולים להיות איטיים. מתנה היא המילה המתארת ​​את סוג של המתנה שיש לך שאתה חווה כאשר מחכים פיסת המידע. אבל יש הפוך. אז זה לא כל הסוג של - זה בעצם הוא קצת נדנדה כאן. חיסרון עכשיו, אבל מה שדפדפנים יכולים לעשות אם הם חכמים על מנת למנוע יש לבקש באותו styles.css להגיש שוב יכול להיות לעשות את מה? מטמון זה. אז במטמון - C-A-C-H-E - בדרך כלל אומר לכאן רק כדי להציל את קובץ שביקשת בפעם הראשונה, ו לאחר מכן לבדוק את המטמון על זה. בדוק שאתה סוג של מיכל אחסון, ואם יש לך כבר עותק של styles.css, גם אם חלק אחר עמוד בעמ 'שנקבע, או כל אתר אינטרנט, מבקש את זה שוב, רק כדי לתת לי שאותו עותק מטמון של משתמש. אל תטרחו לבקש אותו. חיסרון שם, אם כי, כפי שחלקכם יש מעד בp-הסט. אם אתם עושים את שינוי בשרת ו תחזור לדפדפן ואתה טען מחדש, לפעמים הדפדפן עושה לך טובה ולא מפריע מחדש הורדת קובץ styles.css כי, בחייך, מה הסיכויים שסגנונות אלה שמשתמש בפייסבוק הולכים לשנות שעה לשעה או יום ליום? זה די נמוך. הם עשויים להשתנות עם זמן, אבל לא מהרגע לרגע, או לפי השעה. אז טריק, רק לידיעתך אינטרנט כאשר עושה פיתוח, לעתים קרובות החזק את המקש מקש Shift למשל ולאחר מכן לחץ על טען מחדש בדפדפן שלך, ושרצונו בדרך כלל אומר לי רענן הדפדפן כל דבר, גם אם כבר יש לך זה במטמון. אז שוב, upsides וחסרונות, אבל כולם לעצב סופו של דבר החלטות. אז עכשיו, אנחנו לא עשינו רק בסופו של הסיפור כאן. אם אני עכשיו אלך אחורה וקדימה ואחורה ו חזרה, התחלנו להציג לא רק HTML, אבל PHP. אז במונחים של ההדיוטות, מה אין PHP תן לנו לעשות? קהל: [לא ברור]. DAVID מלאן: מה זה? קהל: להכניס היגיון לתוך הקוד. DAVID מלאן: כן, להציג את היגיון לקוד שלך. אז זה שפת תכנות אמיתית עם לולאות, ומשתנים, ו פונקציות, ותנאים, וכל הדברים שאנחנו כבר משתמשים בדרך חזרה כאשר מאז התחלה. ו-PHP, שראינו, ניתן להשתמש בם גם בשורת הפקודה - זה אין לי מה לעשות עם האינטרנט, למרות שזה באמת מקורותיה ומה שהיא נוטה להיות טוב ובתורם ל-- אבל אתה יכול להשתמש ב-PHP רק על ידי הטבע לעובדה שיש לו הדפסה () פונקציה, וprintf (פונקציה), או הד (פונקציה). יש צרורות של דרכים שאתה ניתן להדפיס טקסט עם PHP. לכן, אתה יכול להשתמש בזה תכנות שפה לפלט בדיוק מה שאנחנו מדברים על העבר. באופן דינמי אתה יכול ליצור HTML שלך. אולי לא את כולו. אולי דברים קוד קשים, כמו כותרת והכותרת תחתונה, ואת הלוגו, וגיליונות הסגנון שלך, וכל זה. אבל למשהו כמו שבע להגדיר p-, לאן אתה מניפולציה במניות ו מראה תיק של המשתמש, שהוא הולך לשנות באופן דינמי, אתה יכול בוודאי להשתמש PHP וההיגיון זה נותן לי אתה כשפת תכנות כדי פלט דינמי תת של הדף. לכן, כאשר אתה מדבר על אתרי אינטרנט דינמיים, או תכנות אינטרנט, זה מה שאתה באמת מדבר. שימוש בשפה כמו PHP, או דברים נקרא פייתון, או רובי, או ג'אווה, או עדיין שפות אחרות, לשאילתא מסד נתונים לעתים קרובות, או שרת אחר, ו אז לירוק את אופן דינמי ב-HTML. עכשיו את התוצאה הסופית, במאמר מוסגר, היא כי ה-HTML של רוב אתרי אינטרנט, כולל שבע להגדיר p-, הוא כנראה הולך להיות בלגן עצום אם אתה מסתכל על המקור קוד בדפדפן. זה לא עניין גדול. בשלב זה, כאשר אכפת לנו סגנון, אכפת לנו דברים שאתה כותב. אנחנו לא יהיו אכפת להם מהדברים כי מה תפוקות הקוד שלך. אז אל תדאגו בקשר לכניסה כאן, כי אם זה PHP זה למעשה פלט דברים. אחרי הכל, הדפדפן לא יהיה אכפת, ואדם לא מחפש במקור בכל מקרה. אנחנו צוות, למשל, היית להסתכל על PHP שלך. אז תן לי לתת דוגמא מהירה עכשיו למה אחר זה עשוי להיות שימושי. אז בכנות, אני לא זוכר שעבר זמן הייתי C כדי לפתור בעיה ב בעולם האמיתי. זה היה כנראה בבית הספר לתואר שני, כאשר הייתי צריך להשתמש בשפה ש הייתה ברמה נמוכה למדי ונתן לי את הזדמנות לעשות משהו גבוה מאוד ביצוע ממש כדי להציל כמה שמעבד מחזורים ככל שיכולתי, בחלקו הגדול בגלל שאני משתמש בערכות נתונים עצומות, וכל מחזור מעבד נספר. ולמען אמת, גם בדברים כמו טלפונים בימים אלה והתקנים אחרים שבו אתה לא ממש צריך כמה שיותר זיכרון ולא ממש יש לך כמו כמה מעבד, תוך שימוש בשפות מהר יותר הוא עדיין מושך. אבל בעולם האמיתי, כאשר אתה רק רוצה לזרוק כמה תכנית יחד כדי לנתח נתונים מסוימים, או שתאסוף חבורה שלמה של רישומים עבור חלק קבוצת סטודנטים ואתה רוצה מאוד להפוך במהירות שליחת הודעות דוא"ל אחד אחד לכל אחד מאותם נרשמים, אתה הולך להגיע ל שפה ברמה גבוהה יותר מ C אם אפשר לומר כך. משהו כמו PHP או Python, Ruby או, או חצי תריסר אחר שקיימות בימים אלה. אבל שלושה אלה הם כנראה האופנתי ביותר כרגע. ומה שזה אומר זה שאתה יכול לפתוח עד עורך כמו gedit טקסט או רוב כל דבר אחר, ואז פשוט להתחיל כתיבת קוד מבלי לדאוג על העריכה, מבלי באמת לדאוג לניהול זיכרון, אם כי יש לזכור כי קטן רשלנות סופו של דבר תחזור לנשוך אותך אם ערכת הנתונים מקבלת גדול יותר או הבעיה מקבלת גדולה. אבל מה זה אומר עבור שלנו הוא הבא. תן לי להמשיך ולהפעיל את איות מהבעיה להגדיר שש. אז זהו היישום המבוסס על הגיבורים שלי כי נהגתי על גדול לוח שבו אני לא ביצעתי כל כך טוב. אנחנו נחזור בזמן של שבוע ו לבקר את אלה שסופו של דבר על גבי לוח גדול בהרצאה האחרונה שלנו. אבל לעת עתה, תן לי ללכת קדימה ורק להפעיל את הפתרון שלי בטקסט, ואנחנו נעשה את המלך ג'יימס התנ"ך, והנה זה באנו. אז אלה הם כל כביכול מילות באיות שגוי מתוך ג'יימס התנ"ך המלך. ולקח את היישום שלי מחצית שנייה בסך הכל. אז לא רע בזה מחשב מסוים. אבל לחשוב על כמה קוד שהייתי צריך לכתוב. תחשוב כמה קוד שהייתי צריך לכתוב. תחשוב כמה שעות אתה בילה ב D-אולם או במעונות שלך או בכל מקום למעשה קידוד עד שהפתרון. ובכן, אם יש לי בעצם ברמה גבוהה יותר שפה כמו PHP, לשים לב מה אני יכול לעשות כאן. ראשית, נניח שמדובר במקום קוד ההפצה שלך. זהו קובץ שנקרא איות. זה זמין כחלק מהיום קוד הפצה. ואני הולך להניף את היד שלי ברוב מהפרטים, אבל זה בעצם דוגמא מעניינת לאופן אתה אולי יציאת שפה כמו C מעל ל-PHP. אני ממש פתחתי שני חלונות טקסט, אחד עם גרסת C שלי speller.c, ואני רק התחלתי לתרגם אותו בי הראש לPHP ולהקליד אותו באמצעות הפונקציות מקבילות הקרובות ביותר. אז כמה מהדברים האלה הם שונים. ראינו פעם האחרונה שPHP אינו משתמש כולל בדיוק באותה הדרך. למרות שהיא משתמשת דורשת בדרך כלל, כולל קיימת. הגדרה היא קצת שונה מ # Define ב-C, אבל זה איך אנחנו עושים קבועים. תכנית + $ מתברר קיים ב-PHP, כך שראינו את זה לפני. אלה הם רק כל משתנים, של שיתחיל עם סימני דולר. כזכור, אלה הם רק כמה צף נקודות. אז סיפור ארוך קצר, אתה מוזמן לדפדף זה אם סקרן, זה הוא כמעט המרת קו לשורה של גרסת C של speller.c לתוך PHP. ואתה יכול לעשות את זה שוב ל חצי תריסר שפות אחרות. אבל מה שמעניין הוא זה. או מה זה בכנות מייאשת היא זו. תן לי להמשיך ולהקליד על dictionary.php, וטענה שאני הולך קדימה וליישם מחדש בעיה להגדיר שש כאן. אז בואו נציע לראשונה כי בזה קובץ, אשר ייושם ב PHP, אז תן לי לפתוח את התגים שלי ככה. תן לי לתת את עצמי בעולם משתנה, גודל $ מקבל אפס. ואני הולך לתת לי עצמי שולחן חשיש. אני אשתמש בטבלת גיבוב לדבר הזה. כיצד אני יכול להכריז על שולחן חשיש ב-PHP? בוצע. על אישור. סוגר קרוב סוגר כל כך פתוח מייצג מה ב-PHP, כפי שראינו? מערך, אבל מערך שיכול יהיה מערך אסוציאטיבי. מערך אסוציאטיבי הוא מבנה נתונים ה מקורבי מפתחות עם ערכים. עכשיו באינדקס הפשוט ביותר מבחינה מספרית מערך, מפתחות אלה מה? אפס, אחת, שתיים, שלוש, נכון? בית ספר ישן דברים בחזרה מC. אבל זה יכול להיות גם מחרוזות כמו foo, ובר, או מקסוול, או כל מחרוזת כזו. אז אני יכול למנף את זה ברגע. תן לי ללכת קדימה ולהכריז פונקציה כמו - בואו קודם לעשות עומס (). אז עומס פונקציה (). ו-PHP הוא קצת שונה שב אתה ממש סוג פונקציה, אבל אתה אל תקליד סוג תמורה. אני הולך קדימה, ואומר כי עומס פונקציה () צריכה לקחת ב מילון $ ויכוח, רק כמו גרסת C עשתה. אני עושה את זה מזיכרון. ואני מציע שאני הולך לעשות את זה. אני פשוט הולך לעשות foreach. אני הולך לקרוא לפונקציה הנקראת קובץ (), שעבר בשם של קובץ, שהוא משתנה מילון $ כמילת $. ואז בתוכי ללולאה כאן, אני הולך קדימה ולאחסן בי $ טבלה שמילה $ מקבלת אמיתית. בוצע. אה, רגע. בוצע. על אישור. זה העומס (פונקציה) אומר ב-PHP. עכשיו, למה זה עובד? ואני סוג של רמאות כאן. אז, אחד, foreach ראיתי בפעם האחרונה לזמן קצר. זה רק אומר שאתה יכול לחזר על מערך בלי לטרוח עם i וn ותוספת בתוספת, וכל זה. מילון הוא כמובן שם הקובץ, משהו כמו גדול או קטן, שני מילונים השתמשנו בפעם האחרונה. קובץ הוא פונקציה שפותחת את טקסט קובץ, קורא אותו בשורה אחרת שורה, ו ידיך לגבות מגוון עצום, כל אחד מהאלמנטים שהוא קו מקובץ זה. אז זה שילוב של fopen, ו fread, ותוך לולאה, וfclose, וכל זה. לבסוף, כמילה רק אומרת שזה משתנה שאני הולך יש להם גישה ל בכל איטרציה בלולאה הזו. אז בקיצור, אניה אחת זה כאן פירושו לפתוח את הקובץ ששמו ב מילון, משתנה, לחזר על זה שורה אחרת שורה, ובכל פעם שאתה מקבל קו, חנות במילה משתנה בשם, ולאחר מכן לעשות משהו עם מילה. מה אני רוצה לעשות? אני רוצה לשים את המילה לשולחן החשיש שלי. ובכן, אני יכול לשים משהו בי חשיש שולחן בדיוק כמו ב-C שימוש בסוגריים מרובעים. זהו שם לשולחן החשיש שלי. אני הולך לאינדקס לתוך החשיש ש שולחן במיקום זה. אז לא סוגר אפס, לא סוגר אחת. משהו סוף ציטוט ציטוט Bracket, כל המילה שהוא. ובדיוק כמו שאולי יש לך ב עבודת שולחן חשיש הגיבורים, אתה רק חנות ביעילות בוליאנית, במרומז או באופן מפורש. בוצע. אני אחסון נכון את הערך. עכשיו יש כמה דברים אני חיתוך פינות על כאן. מבחינה טכנית, יש הולך להיות קו חדש מעצבן, / n, בסוף כל אחת מהמילים הללו. אז אני כנראה צריך לקרוא לפונקציה PHP קוצצים בשם (), אשר יהיה פשוטו כמשמעו לכרות את זה. ואני באמת צריכה לעשות דבר אחד אחר. אני כנראה צריך להגדיל גודל בכל איטרציה, אז אני עוקב אחרי בעולם של מה זה. ולמען אמת, וזו אחת היבטים מטופשים של PHP, אם אתה שימוש במשתנה גלובלית, אתה צריך לומר במפורש שאתה נמצא. אז אני הולך בעצם להקליד גלובלי גודל $, שולחן $ גלובלי, ועכשיו הפונקציה שלי היא מלאה. אז לא ממש פשוט כמו בעבר, אבל כנראה לקח פחות זמן מאשר C גרסה, אולי? על אישור. אז עכשיו בואו נעשה את הסימון (פונקציה). בואו תראו אם זה לפחות לקח שעות על גבי שעות שזה לקח לנו בג אז תן לי ללכת קדימה ולהכריז לבדוק כפונקציה. לוקח במילה טיעון, שהוא הולך לבוא מהמאית. ואני רק הולך לבדוק אם Isset משתנה הבא, שולחן strtolower סוגר של מילה - בואו לאזן את כל הסוגריים שלי - לאחר מכן להחזיר אמיתי. אחר - זה היה ממש קשה חלק מתכנית זו. אחר, בתמורת שווא. בוצע. זה סימון (). עכשיו, למה זה עובד? ובכן, אחד שעברתי במילה אחת, אשר היא מחרוזת. שני, אני בודק בתוך החשיש שולחן, שנקרא שולחן $. אני מכריח אותו לאותיות קטנות על ידי קורא פונקציה דומה למדי tolower () ב C, אבל זה עושה את כל המילה, לא תו בודד. ואם זה מוגדר, במילים אחרות יש מוגדר ערך, במילים אחרות, אם זה נכון, אז כן, זו מילה. מכיוון שאני שם את זה שם עם עומס (). ואם לא, אני הולך לחזור שווא. עכשיו האחרים קלים. גודל () פונקציה, איך אני עושה את זה? אני בעצם עושה לחזור גודל $. אבל אני מבחינה טכנית צריך לעשות את הדבר המעצבן הזה. ולמעשה עד לשמוע, הייתי חיתוך פינה אחת יותר מדי. אני באמת צריך לעשות שולחן $ גלובלי. אבל מה שנאמר, לפרוק). לפרוק () הוא מדהים. לפרוק פונקציה (). איך אני רוצה ליישם לפרוק ()? בוצע. על אישור. אז לפרוק (), ניהול זיכרון הוא טיפל לחלוטין בשבילך ב משהו כמו PHP והרבה שפות ברמה גבוהה יותר. אז זה מדהים. כמו למה לעזאזל אנחנו בילינו העבר שמונה שבועות פלוס על כתיבת C באמת הגיע זמן, כנראה באמת איטי בעיות רב עם עשרות שעות מלעבוד תחת חגורות שלנו? ובכן, על דבר אחד, זה יכול לעבוד קנס על תוכניות קטנות. זה בהחלט האיץ זמן פיתוח. אבל בואו נראה מה קורה בעולם האמיתי. תן לי ללכת לספרייה זו בחלון מסוף. יש מאית. ושים לב לצד, ואתה עלול נתקל בכך בבעיה להגדיר שש או בעיה להגדיר שבע. אין לך אך ורק כדי בסופו של קבצי PHP עם. PHP. אם אתה שם את קו כמו שהראשונה ב העליון, זה קו מיוחד תחביר זה אומר בעצם למצוא התוכנה בשם PHP ולהשתמש בו כדי לפרש קובץ זה. אז עכשיו אף אחד לא באמת יודע כי אני מפעיל תכנית PHP. אני יכול להפעיל אותו בדיוק כמו שזה היה משהו שנאסף בג אבל הנה העניין. למעשה, בואו נעשיתי את זה שוב. Dropbox/pset6 /. יש מאית. אוקיי, 0.44 שניות. זה הגיע מהר יותר הפעם. עכשיו בואו נלך לגרסת ה-PHP. תוספת נחמדה. אבל תחשוב כמה זמן אני הצלתי בשעתי עבודה. על אישור. אז 3.59 שניות, אשר למעשה לא נשמע מדויק. אבל זה בגלל שסיפור ארוך קצר, כשאתה מדפיס את כמות עצומה דברים על המסך, כי עצמו מאט את הדברים. מה שהוא באמת לקח את המעבד ב מכשיר היה 3.59 שניות, ב ניגוד ל-C, שלקח 0.44 שניות ביותר לאחרונה. זה סדר באמת בסדר גודל שונה. אז איפה מחיר שממנו מגיע? למה זה כל כך הרבה יותר איטי? למה PHP אין לבצע כל כך גרוע? דניאלה? קהל: אתה לא באמת להשתמש בטבלת גיבוב. מלאן דוד: אני לא ממש להשתמש בטבלת גיבוב. אז אני סוג של עשיתי. אז זה מערך אסוציאטיבי. סביר להניח שאם אנשים בPHP הם באמת חכם, הם השתמשו מתחת מכסה המנוע שולחן חשיש בפועל מיושם במשהו כמו C או C + +. אבל. כן. קהל: [לא ברור]. דוד Malan: כן. אז כל אחד מהפונקציות שכתבתי עכשיו - למעשה, אפשר להגיד שברגע שיותר קצת יותר חזק? קהל: כל אחד מהפונקציות ש אתה כלל יש הרבה יותר מלא קיבולת מ - דוד Malan: אז זה נכון מאוד. יש הרבה יותר תקורה שאנחנו לא ממש רואה על ידי התמקדות רק על dictionary.php, שאני פשוט כתבתי. לעומת זאת, יש כל פרשן הולך ברקע. ואכן, כשאני רצתי תכנית זו, לא היה פועל אפסים ואחדים שנאספו מיועד למעבד אינטל שלי. במקום זאת, הוא רץ שורה אחרת שורה קוד PHP שנראה בדיוק כמו שהקלדנו אותה. ולכן בכל פעם שאתה משתמש שפה פירש, אתה בעצם לעשות לשלם את המחיר הזה. זה הולך לקחת קצת זמן כדי לקרוא גבי הקובץ שלך למטה, משמאל ל ימין, ולאחר מכן לבצע כל בשורה שוב ושוב. עכשיו במציאות, במיוחד באינטרנט, למעשה אתה יכול לזרז את התהליך הזה על ידי במטמון את התוצאות של קוד PHP שפרש. וזה הגיוני באינטרנט, כי אם יש לך משתמש אחד לא כמו לי כאן, אבל 1,000 או 10,000 משתמשים, ולאחר מכן אולי בפעם הראשונה בקובץ הוא לגשת זה איטי, אבל לאחר מכן זה הרבה יותר מהר. אבל גם את זה, שוב, הוא את מסחר. ובשביל משהו כמו נתוני מחקר נקבע, או אפילו משהו גדול כמו זה, המשתמשים שלך יהיו בסופו של מתחיל להרגיש האטה ש. שפות אז בקיצור, הן לפרש מאוד באופנה, מאוד פופולרי, ו כנות הן כנראה שפותיך צריך להגיע לפתרון בעיות כאשר לאחר CS50. אבל מבין כמה אתה באמת לוקח כמובן מאליו מתחת למכסת המנוע באמת אלה כמה שבועות האחרונים בחשיש שולחנות, ועצים, ומנסה, אשר משמשים סופו של דבר לבפועל ליישם דברים כמו סוגר פתוח, סוגר מרובע, שבו אנו יכולים עכשיו הכרת תודה לוקח כמובן מאליו. אז בואו נסתכל עכשיו בהקשר הזה באינטרנט. ואני ציינו פעם האחרונה שיש חבורה של superglobals ב-PHP, כי הם לא באמת רלוונטיים בשורת הפקודה. הם רלוונטיים יותר בהקשר של שימוש PHP בהקשר אינטרנט. כך פועל PHP על שרת אינטרנט כדי כדי ליצור דברים כמו HTML. ואנחנו הביטו ב_GET $ _POST ודולרים, ו זה מקום שבי באופן אוטומטי למשתמשים " קלט מסתיים פשוט אם אתה שולח טופס לקובץ עם הסיומת. PHP באינטרנט שרת כמו המכשיר. אבל בואו נסתכל לרגע על _COOKIE $ ו $ _SESSION. במונחים של הדיוטות, מה היא עוגייה אתה מבין את זה בהקשר של שימוש באינטרנט? קהל: קובץ במחשב. דוד Malan: כן. זה קובץ במחשב של המשתמש כל מה שניטע על ידי אתר יקרה לך לבקר. אז כשאתה הולך לפייסבוק, כשאתה הולך לbankofamerica.com, כשאתה הולך ל-google.com, כשאתה הולך כמעט לכל אתר בעולם בימים אלה, כולל cs50.net, עוגייה נטועה במחשב שלך, שהוא או ערך שמאוחסן בזכרון RAM בך מחשב בזיכרון של הדפדפן שלך, או לפעמים אכן מאוחסן בקובץ בכונן הקשיח שלך. ומה בדרך כלל מאוחסן בקובץ ה זה לא שם המשתמש שלך, לא שלך סיסמא, בדרך כלל לא משהו רגיש, אלא אם כן אתר האינטרנט הוא לא כל כך טוב עם האבטחה שלהם, אלא זה מזהה ייחודי גדול בקרב דברים אחרים. זה מספר אקראי גדול שניטע עליך מחשב, אבל אתה יכול לחשוב עליו כ סוג של חותמת יד וירטואלית כמו מ מועדון או איזה פרק שעשועים ש מאפשר לצוות, הבעלים של ש שירות, לזכור מי אתה. אז אם המספר האקראי הגדול הוא כמו 12345678, אם כי זה כמובן לא יותר מדי אקראי, חשב על זה כ יד חותמת, כי כאשר אתה מבקר facebook.com בפעם הראשונה, הם להחתים מספר שעל היד שלך. ואז בגלל שאתה מדבר HTTP, אתה להיות דפדפן, ובגלל פייסבוק ברור שמדבר בדיוק כמו אינטרנט שרת, פרוטוקול HTTP, אומר כי בכל עת שלאחר מכן לבקר facebook.com, בין אם זה שני מאוחר יותר, כעבור שעה, גם ביום שלמחרת, כל עוד יש לך לא באופן מפורש יצא מהמערכת, אשר למעשה זה כמו לשטוף את הידיים. HTTP אומר שאתה צריך להציג אותך תמסור להחתים כל פעם שאתה לחזור לאתר זה. מה, אם כן, הוא פייסבוק שהם תסתכלו על זה יד וחותמת הם אומרים, אה, 123456789. אני לא יודע במבט הראשון שזה הוא דוד מלאן בקיימברידג', מסצ'וסטס, אבל הם יכולים לבדוק אותם מסד הנתונים ואומרים, הו, אדם במחשב שלו ששתלנו 123456789 הוא דוד מלאן מקיימברידג', מסצ'וסטס. בואו להראות למשתמש שאז הפרופיל שלו דף או אוסף החדשות שלו. אבל יש כאן בעיה אם זה איך האינטרנט אכן עובד. בואו נסתכל על דוגמא מהירה. בואו באמת ללכת לומר facebook.com. אבל לפני שאנחנו יכולים ללכת לשם, בואו לי ללכת קדימה ולפתוח את הכרום של מפקח כאן למטה. תן לי להסתכל על כרטיסיית הרשת. ועכשיו בואו נלך קדימה והקלד בhttps://facebook.com. ואני עושה את זה כל כך שאנחנו לא רואים כל אלה הפניות והפסולת זמן להסתכל דרך אותן. תן לי הקישו על Enter. בסדר. אנחנו רואים חבורה של בקשות. מגיע פייסבוק. יש חבורה של קבצים שלמה. והנה, לכל האזכור שלי הפעם האחרונה חביון, זה הרבה בקשות HTTP. אבל הראשון הוא כנראה המעניין ביותר. אז בואו לגלול למטה כאן, ו אני להתמקד בשנייה. זה הולך להיות סוג של בלגן, אבל בואו נראה. פייסבוק שולח לנו כל מיני דברים. אבל וואו, מעניין. הם נוטעים לא אחד, אלא ארבעה בולי יד אל היד שלי כאן. הגדרת עוגייה, הגדרת עוגייה, הגדרת עוגייה, הגדרת עוגייה. ויש כמה תכונות כאן. כולם להזכיר כמה סוג של פקיעה. וזה נראה כמו פייסבוק מקווה יזכור אותי עד 2015. אז זה כנראה הזמן שבו אני חייב להתנתק או שהם פשוט יהיו מניח באופן אוטומטי שאני לא חוזר. אז זה בעצם הגון כמות של זמן. ויש כמה אחר דברים קורה כאן. עוגייה זו נראית בכפייה נמחק באומרו שזה פג ב -1970 לפני עוגיות על קיומם. אז הדפדפן הוא רק הולך להניח על אישור, זה כמו שוטף את חותמת הידיים. אולם כעת, כאשר הדפדפן שלי עושה בקשה הבאה - תנו לי ללכת ולעשות את זה שוב ורענן. עכשיו תנו לי לגלול חזרה ל בקשה עליונה ויורדים כאן, לבקש כותרות. הודעה זו. אז עכשיו אני לא תחת כותרות תגובה, אבל שמתי לב לזה, אומר כותרות בקשה. ושים לב שהדפדפן שלי, כחלק מ יש הבקשה שלה לאחר שפגע רענן שלח לפחות את הדברים הבאים מידע. לא הגדרת עוגייה, אבל עוגייה. אז זהו הקו, כותרת HTTP כך לדבר, שבו הדפדפן שלי הוא מעין שלי מבלי לדעת זאת הצגה היד שלי לבדיקה של פייסבוק. אז עוגיות אלה יכולים להיות השתמש אז בשביל מה? כדי לזכור מי אתה, או זוכר איך פעמים רבות אתה כבר שם, או באמת שום דבר. אז הנה counter.php. ותן לי להתמקד על הגופן. ובכל פעם שאני לטעון מחדש את הדף, הודעה זו זה לזכור כמה פעמים אני כבר שם. ובכן, זה לא כל כך מרשים. בואו נסגור כרטיסייה ש, ועכשיו בואו נחזור ל http://localhost/counter.php. אה, זה מעניין. זה עדיין זכר, גם למרות שאני סגרתי את הכרטיסייה. ולמען אמת, אם אני סוגר את הדפדפן, אם ייושם בדרך הנכונה, אני עדיין יכל לזכור כי משתמש זה הוא שהוא או היא הייתה בפעם הראשונה, ו רק פעם אחת אני נכנסתי לתפריט של הכרום, ה כאן הוא כאן, וללכת היסטוריה, ולחץ על נקה נתוני גלישה, כחלק מכם עשוי להיות ב בעבר, רק אז תהיה העוגיות שלך למעשה מחיקה באינטרנט פיתוח. לכן, אם אנחנו הולכים - בואו נסגור את gedit כאן. ואם אנחנו הולכים עכשיו לקובץ זה. תן לי להיכנס לשלנו vhosts / localhost / ציבורי, ונתת לי לעשות counter.php. שים לב כי מדובר בדי תכנית פשוטה. זה אתר די פשוט. כך שהחלק העליון של הקובץ רק הערות. אבל הנה קו חדש שאתה יכול ראיתי כבר בשבע להגדיר p-, session_start (). זו שורת קוד PHP ש בעצם אומר לשרת האינטרנט, לעשות הקפד להחתים את הידיים ולעשות הקפד לבדוק בולי יד. זה כל הקו שעושה, וזה עושה את כל תהליך שעבורנו. ואז שמתי לב רק שיש לי שני סניפים כאן. אם מפתח הדלפק הפנימי של זה משתנה הגלובלי מיוחד שנקרא _SESSION $ מוגדר - במילים אחרות, אם יש ערך כלשהו לשם - בואו לקבל אותו ולאחסן אותו במקומי משתנה בשם counter $. אחר, בואו להקצות דלפק $ ערך ברירת המחדל של 0. עכשיו הנה היבט של PHP אחד זה גם ברכה וקללה. PHP היא קצת מרושלת. אז אילו ב-C, מה היית עושה היקף הדלפק היה לא כאן ולא כאן? זה היה מרותק לסוגריים המסולסלים האלה. נחש מה? ב-PHP, זה קיים גם מחוץ לאלה סוגריים מסולסלים, כאן, וכאן, וכאן, וכאן, ו אפילו למטה. אז אני אומר את זה הוא ברכה במובן שאתה לא צריך לחשוב כמו קשה כמו שעשינו לפני שבועות. אבל זה גם קצת קללה שב לא משנה איפה אתה משתמש במשתנה PHP, לפחות בתכנית כמו זו, זה בעולם נגיש עבור טוב או לרע. אז אתה צריך לזכור שבחברה המשתנים שלך לא יכולים להיות מוגדרים. ייתכן שהגדרת אותם במקום אחר. אבל מה שאני הולך לעשות סופו של דבר? אני הולך לאחסון פנימי של שגלובלי משתנה כערך של דלפק יקליד את התוצאה של עושה דלפק בתוספת 1. אז זה רק החשבון שעושה את incrementation של דלפק ש. והעובדה שאני אחסון ש ערך חזרה לכאן הוא אמצעי ל בעצם לעדכן את מסד הנתונים ל לזכור ש123456789 משתמשים כבר כאן שני פעמים. וכשאני עושה את זה שוב בפעם הבאה אני לטעון מחדש את הדף, זה הולך לבדוק היד החותמת שלי ואומר, הו, 123456789 משתמש יש עכשיו היה כאן שלוש פעמים. ואז מה PHP ושפות דומות עושים עבורנו הוא שהם להבין איך ואיפה ולכמה זמן כדי לאחסן ערכים בזה מיוחד superglobal. וזה superglobal בפעם הבאה שאני בקר בדף הוא סוג של קסם טרום מאוכלס, מלא בערכים ש היו שם בפעם האחרונה שבקר, אם זה היה לפני רגע, בשבוע לפני, או ב2013 ועכשיו אנחנו מדברים על 2015. PHP ואת הטיפול לקחת שרת האינטרנט מכל זה בשבילך. קהל: [לא ברור]. DAVID מלאן: משתנים ב-PHP הם בעצם תמיד גלובלי, אלא אם כן להכריז עליהם פנימית של פונקציה, ואז הם מקומיים תפקידה היחיד. אבל מכיוון שלא אני כתבתי את כל פונקציות, הם עכשיו ביעילות הגלובלי לאורך כל הקובץ שלי כאן. קהל: האם יש דרך כדי להפוך אותם מקומיים? DAVID מלאן: האם יש דרך להפוך אותם למקומיים? רק על ידי עטיפתם לפונקציות. אשר בגרסה האחרונה של PHP, אתה יכול לעשות את זה עם פונקציה אנונימית. אבל עוד על כך ב הקשר של JavaScript. אבל התשובה הקצרה היא לא. תשובה ארוכה יותר היא כן. נחמד. שאלת חידון טובה. בסדר. אז לבסוף, הדף עצמו הוא בעצם די פשוט. שימו לב שברגע שאני נצא מהמצב PHP, זוכר שכל הדברים האלה למטה להלן הוא רק הולך לקבל לירוק מתוך גלם לדפדפן. וזה בסדר, כי אני רוצה לשלוח המשתמש קצת HTML, אבל אני רוצה לעדכן באופן דינמי HTML ש. ודרך היחידה שאני יכול לעשות את זה היא למיין של לרדת חזרה מהר מאוד לPHP מצב, סימן שאלת סוגר פתוח שימוש סימן שוויון, ואז להדפיס את הערך של דלפק. או אם זה נראה קצת לא ברור מאליהם, זה סימן שוויון הוא למעשה רק חלק סוכר תחבירי לכך printf (דלפק $). אבל בכנות, זה רק קטן ומכוער וקצת מעצבן להקלדה. אז PHP מאוד יפה מציע תכונה זו שבו אתה יכול פשוט להגיד את זה יותר בתמציתיות באותה הדרך. אז מה קורה מתחת למכסת המנוע? בואו נסתכל במהירות ברשת כרטיסייה כאן לcounter.php. ותן לי להמשיך וראשון בואו לנקות את העוגיות שלך. בואו נקה נתוני גלישה מאז תחילת הזמן. עכשיו בואו נחזור לכאן. עכשיו בואו לטעון מחדש את הדף. ואני שוב על אפס. בגלל יד החותמת שלי כבר נשטפה, עכשיו אני מקבל עוגייה חדשה. ואכן, אם אני מסתכל על כרטיסיית הרשת ו מסתכל על כותרות תגובה, הודעה כי המכשיר משולח אותי עוגייה ששמה הוא במידה מסוימת באופן שרירותי, אלא סוג של סביר, PHPSESSID. וזה שולח לי את זה באמת מספר אקראי גדול. זה לא ממש מספר. זה לא הקסדצימלי למדי. זה סוג כלשהו של מחרוזת אלפאנומריים, אבל יש להניח שזה אקראי. וזה יד החותמת כך לדבר שאני מתכוון. בינתיים, אם אני לוחץ על רענן ולאחר מכן מסתכל על שורה השנייה זה לשני שלי בקשה, הודעת החברה שהבקשה שלי כותרות כוללות PHPSESSID שווה את זה, לא עדכנתי את העוגיות, אבל רק עוגייה. וזה מצגת של הדפדפן שלי יד החותמת שלי. אז עכשיו בתור טיזר, ונדבר יותר על כך בשבוע או משהו כזה, אבל באיזה אופן זה גורם לך חשבון פייסבוק פגיע, פגיע, ואחרים, כגון חשבונות פגיעים? קהל: אם מישהו יש לו העוגייה שלך. DAVID מלאן: כן, אם מישהו יש העוגייה שלך. אני מתכוון באמת, כמו שחלק מכם אולי ניסיתי בכמו מועדון או פרק שעשועים, אם אתה מנסה משהו כמו זה כדי להעתיק את החותמת, אם כי לאחור על ידו של אדם אחר, ואז הוא או היא מציגה אותו כ משלהם, אם זה באמת נראה זהה 123456789, ולאחר מכן באינטרנט, שרת כנראה רק הולך סומך שהמשתמש שהוא אתה. ואת זה הוא אכן יסוד איום כל פעם שאתה משתמש בעוגיות כי אם מישהו רק זייף כל כך לדבר העוגייה שלך, מעריך את מה שהוא הוא, בין אם על ידי העתקתו באמת על ידי התבוננות במחשב שלך ולהיות כמו, בסדר. העוגייה של דוד היא JJ3JIK וכן הלאה, ולאחר מכן שהם חכמים מספיק כדי לדעת איך סוג של לשלוח באופן ידני כי עוגיות מדפדפן או מ תכנית שהם כותבים, הם לגמרי יכולים להיכנס לאתר כמו שאתה. זה לא כל כך קשה מתיימר להיות מישהו אחר, אלא אם כן אנחנו מחדש p-סט שני, שהציג את מה? קהל: קריפטוגרפיה. DAVID מלאן: קטן קצת הצפנה. הצפנה פשוטה, לפחות ב מהדורה סטנדרטית, אבל בסתר בכל זאת. פחות. אז מתברר אם להצפין את כל כותרות אלה באמצעות משהו שאתה אולי כעת יודע היותר מוכר SSL, שכבת שקע מאובטחת, או https:// כתובות, אז כל הדברים האלה אנחנו כבר מעיף מבט בעצם מוצפנים, מה שאומר שזה כמו שאתה לא יכול לקרוא את היד חותמת. רק facebook.com יכול, או google.com, או במקרה הזה, יכול המכשיר קרא שיד חותמת. למרבה הצער אם כי, ושוב, זה הוא מתאים מדי עם חומר NSA בזמן האחרון, גם ב-SSL הוא שביר. וזה בעצם לא כל כך קשה אפילו לפיצוח הצפנה ש. לא כל כך הרבה על ידי פיצוח ההצפנה, אבל על ידי הטעיית דפדפן לפענוח הנתונים בטרם עת. אבל שוב, אנחנו להקניט אותך עם זה לפני זמן רב. לעת עתה, רק לפחד. זה טרגי סוג של האמת. בסדר. אז, איפה זה עכשיו משאיר אותנו? ובכן, בואו נעשיתי את זה. בואו נלך קדימה ולקחת מהיר טיזר לפני שאנחנו לוקחים הפסקה. ואני חושב שאנחנו להתעכב עוד קצת היום, אבל אנחנו הולכים לצלול לתוך משהו חדש וסקסי, אשר יהיה לגרות את התיאבון לעוד יותר. אז זה טיזר. אז SQL, התחלנו לדבר על פעם כל כך בפעם האחרונה לזמן קצר. אתה באמת לקבל את הידיים מלוכלכות עם חלק ממנו בשבע להגדיר p-. ובמונחים של ההדיוטות, מה עושה SQL - S-Q-L - לעשות בשבילך? מה זה? כן. קהל: בואו הגישה לנתוניך. DAVID מלאן: כן. זה בוא הגישה לנתוניך במסד נתונים. שפת שאילתות מובנית. ואת זה הוא במהותו שפת תכנות. ישנן תכונות שלו ש אנחנו אפילו לא נשתמש בכיתה. אבל אתה יכול, למעשה, להגדיר פונקציות. הם נקראים מאוחסנים נהלים ב-SQL. אבל תשמור אותו פשוט למדי ופשוט להשתמש בו לכמה פעולות בסיסיות כמו בחירת נתונים, הכנסת נתונים, עדכון הנתונים, ומחיקה של נתונים. ואתה באמת יכול לחשוב על מסד הנתונים, כמו מסד נתונים SQL, כפי שרק להיות Microsoft Excel. בגלל SQL מתייחס ליחסים בסיס הנתונים, שבו ביחס רק אומר שולחנות. שורות ועמודות. אז כל דבר שאתה יכול לשים בגיליון אלקטרוני כמו Google Docs זה או, אתה יכול לשים לתוך מסד נתונים SQL על ידי הכרזה על שולחן. עכשיו, איך אתה בעצם לגשת מידע זה? ובכן, עם פקודות או שאילתות כמו זה. SELECT, INSERT, לעדכן ולמחוק. ולרוב, אלה הם ארבעת מרכיבים בלבד תצטרכו לעשות משהו די בעוצמה בבעיה להגדיר שבע. עכשיו בחזרה באותו היום, אתה בעצם היית אינטראקציה עם מסד נתונים ב חלון מסוף שחור ולבן ב הפקודה מהבהבת כמו זה. ומסד הנתונים שאנחנו פועלים על מכשיר נקרא MySQL, שהוא מנוע מסד הנתונים חופשי וקוד פתוח. אם תחפש בגוגל ולקרוא את ויקיפדיה מאמר, אתה יודע שהשם הוא קצת מעבר לכמה גרסאות של לינוקס. מסד הנתונים מריה הוא למעשה מזלג כביכול של MySQL. סיפור ארוך קצר, אורקל קנתה MySQL. אורקל היא חברה גדולה. אנשים כבר חששו שזה היה כבר לא יישאר די פתוח כמו מקור, אז זה רק עותק של MySQL זה עדיין חופשי, עדיין קוד פתוח, ו התקין בפדורה לינוקס כברירת מחדל. אבל זה סוג של כאב ב צוואר להכיר מסד הנתונים בדרך זו. אז אנחנו כוללים במכשיר CS50 כלי קוד פתוח חינמי בשם phpMyAdmin. רק צירוף מקרים ש זה כתוב ב-PHP. אין יסוד צריך עבור PHP כאן. אבל זה רק כלי מבוסס אינטרנט ה אנחנו להוריד בחינם, מותקנים ב המכשיר, שמאפשר לנו יש ממשק משתמש גרפי שבה כדי לחקור את מסד הנתונים להגדיר עמ 'ושבע עם אשר ליצירת מסדי נתונים חדשים, לומר לפרויקט הגמר שלך אם אתה הייתי כמו, וסופו של דבר ליצור אתרים דינמיים כמו CS50 האוצר המאפשרים לך לבצע שאילתות נתונים ו לעדכן את הנתונים באופן דינמי. אתה לא תצטרך להשתמש רק קובץ טקסט פשוט או CSV. למעשה אתה יכול להשתמש במסד נתונים חכם תכנית, כך שאתה יכול לבצע יותר שאילתות מתוחכמות מאשר רק לקרוא דרך כל דבר באופן ליניארי. כך למשל, זה מה שאנחנו נותנים לי אתה מחוץ לקופסה לשבעה להגדיר p-. זה שולחן עם לפחות למראית העין שלושה טורים, שאחד מהם הוא שם משתמש, אחד מהם הוא חשיש, והשני שבם הוא מזהה. אבל הדבר המעניין, ורק כדי להקניט את המחשבה אחת כאן, שם משתמש הוא ככל הנראה ייחודי כבר, נכון? אני מתכוון, רוב כל אתר אינטרנט, אם יש לך שם משתמש, יש לא יכול להיות שני קיסרים. לא יכול להיות שיש שני Malans. לא יכול להיות שיש שתי jharvards. הייחודי שלה. אחרת, הם לא יודעים איזה jharvard זה בעצם. אז מה יכול להיות המניע לגם בעל טור שלישי מהשמאל מזהה שם בשם, שנראה כמו מספר זה דומה ייחודי? זה מרגיש קצת מיותר לי במבט ראשון. למה שזה עשוי להיות משכנע ליש לי לא רק שמות משתמש ייחודיים, אבל גם מספרים ייחודיים? קהל: יש להם יכולים באותה הסיסמה. DAVID מלאן: אנשים שאולי יש לי באותה הסיסמה, בטח. זה בהחלט יכול לקרות. אבל אם יש להם את שם המשתמש ייחודי זה, אני הייתי טוען שזה לא ממש עניין, כי אם הם להקלידם שם משתמש, אני רק צריך לבודקם סיסמא, החשיש ממנו. אחרת, למה? קהל: חיפוש מהיר יותר. DAVID מלאן: חיפוש מהיר יותר. למה? קהל: זיהוי הוא רק אחד. DAVID מלאן: הזהות היא רק תו אחד, או לייתר דיוק, זה מספר, אז זה כנראה 32 ביטים או משהו כזה. ואילו שם המשתמש, ג'ייסון כנראה עד של הירשהורן יש סוג של גיחוך ארוך, וזה הולך תיקח לי הרבה יותר זמן למחרוזת להשוות H-I-R-S-C-H-H-O-R-N, ואולי / 0 או משהו כזה, כדי כדי לחפש את ג'ייסון, בניגוד לרק אומר לי את מספר משתמשים שתיים. זה 32 סיביות. זה INT אחד ש אתה צריך להשוות. ואכן, זה בדיוק למה מסדי נתונים נוטה להקצות מזהים ייחודיים שורות בהם. עכשיו מה הם סוגי נתונים אחרים שיש חוץ מזה INT וכנראה מחרוזות כזה? ובכן, כדי להיות ראוי יותר, מסדי נתונים של SQL, כמו MySQL, יש לי שדות CHAR. ותו קצת מטעה לא CHAR אחד. שדה CHAR במסד נתוני MySQL הוא תו אחד או יותר, אבל זה מספר קבוע של תווים. כך למשל, אם אני ניגש phpMyAdmin כפי שאתה אולי כבר, או בקרוב בעיה להגדיר שבע, ואני הולך לאתר שלי, ורק בשביל כיף, בואו ליצור טבלה חדשה בשם לבדוק עם רק שתי עמודות. אז אני יהיה לחץ על בצע. וזה יהיה מוכר למדי, במיוחד כפי שאתה להתעסק סביבך בעצמך. כאן אני יכול להקליד מזהה כדי ליצור טבלה חדשה של INT הסוג. אבל כאן אני יכול להקליד את שם המשתמש כדי לשחזר ששולחן קודם לכן. ושים לב שיש לי כל חבורה של סוגים לבחירה. וזה גם למה phpMyAdmin הוא סוג של נחמד. זה סוג של לימוד עצמי בכך שאתה יכול פשוט סוג של נקודה, ולחץ, ו מסתכל על תפריטים הנפתחים, ולהסיק מן כי מה סמכויות SQL נותן לך. ואכן, אם אני בוחר CHAR, אז אני יש לציין את האורך, או איך ערכים רבים, תווים כמה. ערכים כל כך נפוצים מאוד הם דברים כמו 255, אבל זה קצת ארוך. בדרך כלל הוא שמונה לשם משתמש. אבל זה קצת קטן בימים אלה. אז זו החלטת עיצוב. האם זה 8 תווים לכל היותר, 32, 255, 1,000? זה באמת תלוי בך. אבל שדה CHAR הוא מספר קבוע. אז לבחור מעט מדי ואתה סוג של דפוק אם אתה רוצה את שם משתמש של עוד. בחר רבים מדי ומה החסרון? קהל: [לא ברור]. DAVID מלאן: זה בזבזני. בדיוק כמו ב-C, אם יש לך יותר גדול נתח של זיכרון ממה שאתה צריך, אתה סתם מבזבז את הזמן ומבזבז את החלל. אז כחלופה, קיים Varchar, אשר פותר בעיה זו על ידי טיפול באורך לא כאורך קבוע, אלא כאורך מרבי, ובאמצעות מספר משתנה של תווים, אשר לאחר מכן נוטה להשתמש בתווים רק רבים ככל שאתה צריכים באמת. זה נשמע מושלם. למה שלא להיפטר נתונים CHAR הקלד אז? מה יכול להיות החסרון של באמצעות VARCHARs, שנשמע כמו שזה נצחון יפה? כן? קהל: [לא ברור]. DAVID מלאן: בסדר, טוב. אז אם כל הנתונים שלך הוא אותו אורך, מה החשש? קהל: מכיוון שאתה מבזבז נתונים באומרו את כולם. DAVID מלאן: אז אם כל הנתונים שלך הוא באותו האורך, אם כי, ברצוני לטעון שמפרט אורך מרבי על varchar אינו שונה מ ציון אורך קבוע על CHAR אם אתה יודע את המספר הזה מראש. אבל יש אכן, ואני סוג של לחלץ מתשובה שהמציאות כי יש עדיין מקסימום, שיכול להיות מעצבן, במיוחד אם אתה נתקל בשמו של אדם זה ארוך במיוחד שאתה לא צופה. וזה גם קצת פחות יעיל לחפש דווקא בVARCHARs כמו בניגוד לתווי חיפוש, במיוחד לשולחנות ארוכים שיש לי המון ו המון נתונים. גם כאן אז, נושאיות היא שוב לא בחירה מובנת מאליה. אז רק כדי לתת לך תחושה של אחרים סוגי נתונים שעשויות להיות עניין גם עבור להגדיר עמ 'ושבע או ב בעתיד, יש INT. יש bigint, אשר זה כמו עוד ארוך. הוא נוטה להיות 64 סיביות. יש עשרוני, שבו אתה תראה ב סט הבעיה, שהוא הרבה יותר תשובה נקיה לבעיותינו נתקל עם מצוף וצף להצביע חוסר דיוק. ויש גם את התאריך ושעה. יש פשוטו כמשמעו, סוג הנתונים שיש להיראות כמו שנה, חודש, יום, ושעה, דקה ושנייה. אבל מסדי נתונים של SQL יש גם דברים שאנחנו נתקשר אינדקסים. ומדד הוא משהו שאתה לציין בעת ​​יצירת הטבלה להפוך את החיפושים ופעולות אחרות יעיל יותר. באופן ספציפי, יש משהו שנקרא המדד העיקרי שאתה יכול מצהיר כדלקמן. אנחנו עשינו את זה בשבילך עם שולחן משתמשים אנחנו נותנים לך. אבל שם לב אם היינו יצירה מחדש באופן ידני שולחן המשתמשים כאן נותן זה שמו של משתמשים. אני כבר צוין זהות. אני צוין INT. אני צוין שם משתמש עם 32 תווים לכל היותר. אבל אם אנחנו שומרים גלילה בזה די חלון רחב, שים לב שיש חבורה של דברים אחרים שאני יכול לציין. אחד, אני יכול לציין תכונות כאילו, אתה יודע מה, זה INT צריך להיות לא חתום. אני לא רוצה שמספרים שליליים, אז בואו נעשה את זה לא חתום. Null הוא לא רלוונטי כאן, כי אני רוצה שכל משתמש יש מספר ייחודי. אני לא רוצה שזה יהיה ריק. אבל זה מעניין. אני יכול לציין שזיהוי הוא גם מפתח ראשי של מסד נתונים זה, או שזה ייחודי, או שזה באינדקס, או טקסט מלא. אז למטרות של היום, סיפור ארוך בקיצור, יסודי אומר שיקבע זה להיות קונספטואלית והן מבחינה טכנית תחום שאנו משתמשים לייחודיים זיהוי משתמשים. לכן, כאשר אנחנו מסתכלים על משתמשים, זה סוג הבטחה לחפש אותם בעיקר על ידי שמזהה ייחודי. ומסד הנתונים יבטיחו שאם אתה יש מספר משתמשים 3, אתה לא יכול מבחינה פיזית להכניס משתמש אחר עם זה אותו מספר 3. מסד נתונים פשוט יסרבו כדי לשמור את השינויים. וזה דבר טוב, כי אתה יכול להגן על עצמך מעצמך. עצמי לחלופין, עבור שם משתמש. אז בשורה השנייה, כזכור, הוא שדה שם המשתמש. אז בשורה השנייה כאן היא שם משתמש, כפי שעשינו בשמאל הקיצוני שם. אז מה עוד יכול אני רוצה לציין? אסור לי, על פי SQL, כדי לציין את שני מפתחות ראשיים. באפשרותך לציין מפתח משותף שבו אתה תסתכלו על שני השדות, אבל הם לא יכולים בנפרד יהיה מפתחות ראשיים. אז זה לא בא בחשבון. כך שאולי אני רוצה לבחור? ובכן, ייחודי הוא דומה ברוח מפתח הראשי שבו אתה מציין את זה שדה יהיה ייחודי, אבל זה לא הולך להיות אחד אני משתמש כל הזמן. ואנחנו לא מתכוונים להשתמש בזה לכל אחד זמן מה סיבה שוב? זה איטי יותר שעלול להיות אם זה שם משתמש של ארוך. זה פשוט בזבוז הזמן. מדד, בינתיים, מציין שזה לא הולך להיות ייחודיים, אבל הייתי רוצה לך לעבוד בקסם שלך מתחת מכסה המנוע כדי לעשות את זה יותר מהר בשבילי לחפש בתחום זה. אז זה כנראה לא רלוונטי כאן. עבור שם משתמש, הייתי טוען כי ייחודי היא תשובה טובה. אבל נניח שאנחנו עשינו יותר משתמשים מעניין מאשר רק שמות משתמש, hashes, ומספרי זהות. מה אם נתנו לאנשים שמות מלאים? מה אם נתנו להם מטפל ונתונים אחרים עליהם? ובכן, אם אתה מציין שעמודה ב מסד הנתונים הוא באינדקס, זה אומר ש MySQL, או אורקל, או מה שמסד הנתונים אתה משתמש צריך, לעבוד הקסם שלה ולהשתמש בסוג כלשהו של נתונים מהודרים מבנה דמוי עץ, או trie, או שולחן חשיש, או משהו על מנת להבטיח כי כאשר אתה לחפש את נתונים באמצעות בחר בתחום מסוים ש-- רוצה להראות לי את כולם כי חיים ברחוב אוקספורד. השאילתה כזה. אם ציין מראש כי אתה רוצה מדד בתחום זה, חיפושים יהיו הרבה, הרבה יותר מהר. אם לא תציין מדד, את הטוב ביותר אתה יכול לעשות הוא חיפוש ליניארי אם זה לא מיון. אבל אם אתה מציין מדד, חכם אנשים שעשו את מסד הנתונים - אנשים כמוך שעכשיו יודעים עצים ומנסה ושולחנות חשיש - באופן אוטומטי לבנות כזה נתונים מבנה בזכרון RAM על מנת לוודא כי החיפושים האלה הם הרבה יותר מהר. FULLTEXT בינתיים הוא דומה ברוח, אך מאפשר לך לעשות כללי חיפושים, רוצים להראות לי את כולם כי חיים ברחובות שמתחילים עם אות O כל סיבה שהיא. אתה יכול לעשות חיפושים כלליים אוהב את זה. דברים או משכנעים, יותר כמו תכנית לי כל מי שיש לו את המילה - תראה לי כולם ששמה מתחיל עם אות מסוימת. אתה יכול לחפש מילות מפתח בדרך זו. בסדר. אז, הזדמנויות עיצוב יש פוטנציאל. ישנם אחרים שאני לנופף בידות שלי. מסתבר שאתה יכול להיות מנועי אחסון שונים. וזה יותר ממה שאנחנו צריכים מסתורי בהחלט לבעיה להגדיר שבע. כברירת מחדל, אתם משתמשים משהו שנקרא InnoDB. אתה תראה אזכור של זה איפשהו ב הממשק של phpMyAdmin הסביר ביותר. אבל יודע שיש עיצוב אחר החלטות שהם של פוטנציאל עניין לבוא פרויקטי גמר אם אתה עושה משהו מבוסס אינטרנט. אבל בואו נעשה את זה. בואו נלך קדימה ולשים את זה על מסך כטיזר לסיפור המעורב, שותף לחדר, וכוס חלב. בואו ניקח שתי דקות או כך לשבור כאן. ואם אתה יכול להישאר בסביבה, בואו נבוא בחזרה, נראה קצת יותר בSQL, ו אז קצת עם JavaScript P-להגדיר שמונה בראש. בסדר. אז, בואו לגרום לך לחשוב על מקרה פינה שיכול בקלות רבה מתעוררים בהקשר של שימוש במסד נתונים, או למען האמת, גם באמצעות עולם אמיתי דברים אוהב כספומטים כדי לקבל את הכסף. אז הנה מקרר. נניח שיש לך אחד יותר מדי ב המעונות שלך או בביתך. ויש לך שותף לחדר אחד, ושניהם אתה באמת אוהב חלב למשל. אז אתה חוזר הביתה מכיתת יום אחד. הוא או היא עדיין לא חזרה. אתה פותח את המקרר. אתה באמת רוצה כוס גדולה של חלב. אין חלב. אז מה אתה עושה? אתה סוגר את המקרר. אתה תופס את המפתחות שלך. אתה יוצא לכיכר. ואתה מקבל בתור בCVS באלה קופת דברים עצמיים, שתמיד תיקח זמן רב יותר מאשר למעשה יש קופאיות. בכל אופן. אז, בינתיים, נקודת נקודת נקודה, שותפה מגיעה הביתה והוא או היא יש עריגה דומה לקצת חלב. אז הוא או היא פותחת את המקרר, נראה בפנים, ואוה, לעזאזל. לא חלב. אז הוא או היא עומדת בראש החוצה, קורה ללכת לCVS האחרים, שהיה רק מרחק רחוב אחד מסיבה כלשהי, והוא או היא מקבלת בתור כדי לקנות קצת חלב. בינתיים, אתה חוזר הביתה, הוא או היא מגיעה הביתה, ומה לעשות סופו של דבר יש לך? כפליים חלב. אבל אתה לא באמת אוהב חלב כל כך הרבה. אז עכשיו יש לך כל כך הרבה חלב שעכשיו אחד מהם הוא רק הולך חמוצה סופו של דבר. אז מדוברים בבעיה ממש רעה. נכון? אז מה קרה? כל כך בסיסי, זה סוג של דוגמה מגוחכת. אבל מתחת למכסת המנוע, מה שהיינו לנו יקרו כאן הוא שניכם בדקו המצב של פיסת זיכרון, המקרר. שניכם בדקו את המצב של כמה משתנה. גם אתה וגם הסקת מסקנה כי אז אתה בוחר בה. אך למרבה הצער, בעוד השותפה שלך היה בחנות, שהמצב של המשתנה השתנה, הוא או היא חזרה ועכשיו רוצה לשנות את המצב, אבל זה כבר השתנה עליו או עליה. וכמובן, הוא או היא לא תצטרך הלכתי לחנות אם הם ידעו שכבר היו בדרך. כך בעולם האמיתי, איך יכולת להימנע מבעיה זו, בהנחה שיש לך מקרר, יש לך שותף לחדר, ואתה באמת אוהב חלב? קהל: תקשורת. DAVID מלאן: תקשורת. על אישור. אבל איך אתה יכול לתקשר? קהל: השאר פתק. DAVID מלאן: השאר פתק, נכון? תמיד משאיר פתק, עבור אוהדים של המופע. בסדר, אז תמיד השאירו פתק, או לשים באמת כמו מנעול או משהו על המקרר שמחזיק אותך שותפה מבדיקת המצב משתנה זה. עכשיו, למה זה עלול להיות רלוונטי ל בעיה להגדיר שבע, או לכספומטים. ובכן, דמיין עולם שבו כספומט אתה עלול להיות מסוגל ללכת עד כספומט מכונה כאן, וכספומט אחר כאן. וזה קורה לעתים קרובות למדי. ונניח שהיה לך שני כרטיסי כספומט, שאפשר להשיג. ואתה נכנסת לשני המכונות יעילות בו זמנית, בתקווה בזמן שאף אחד לא מסתכל. ואז אתה מקליד את מספר הזיהוי האישי שלך בערך בו זמנית. ואז אתה עושה שאילתת איזון כדי לראות כמה כסף יש לך. ונניח שיש לך 100 דולרים נותר בחשבונך. אז בעצם בו זמנית, אתה אומר אחד, אפס, אפס, להיכנס. ולך אני מקווה לחזור קצת כסף. אבל כמה כסף אתה יכול לקבל בחזרה? עכשיו מחשבים בסופו של היום, במיוחד אם הם מדברים שרתים, לא בהכרח עושים דברים בצו זה צפוי. אז נניח מה שקורה, בגלל בעיות מהירות כל מה שיש ברשת הם, או בעיות מעבד יש, או משהו כזה, נניח ש הכספומט ראשון בודק האיזון ושלך רואה, הו, לאדם זה 100 דולרים. אבל אז מקבל מוסחת כי אולי גיבוי שקורה ולכן זה האטה. או אולי בעת בדיקה, הרשת חיבור יש לי קצת יותר איטי בגלל זה פשוט קורה. הם התקנים פיזיים. אז בינתיים, הכספומט השני הוא שואל את אותה השאלה. כמה כסף יש לדוד? $ 100 הוא התשובה. אבל בגלל שהכספומט הראשון עדיין לא שלחתי את ההודעה לחסר 100 $, שני כספומטים שנבדקו הכספת של הבנק, רואה שם 100 $ שם, ועכשיו שני המכונות פוטנציאליות הן הולך לירוק את תשובה. עכשיו, זה נהדר בשבילך במובן מסוים אם מה שהבנק עושה סופו של דבר הוא לשנות את הסכום ל100 מינוס על ידי הגדרה משתנה שווה לשלך חשבון בנק שווה 0, בניגוד לעושה מינוס 100. עכשיו במקרה הגרוע ביותר עבור הבנק - או במקרה הטוב לבנק, בינתיים, הם נותנים לך 200 דולרים, ו חשבון הבנק שלך עכשיו מראה שלילי 100 $, שבאמת לא להועיל לך בכלל. אבל הנקודה היא שהמרוץ הזה תנאי לשתי שותפות מקבלים חלב, או לשני כספומטים מנסים להשיג מזומנים ולשנות את המצב של קמרון באותו הזמן קיים כל זמן שיש לך מסד נתונים. עכשיו בבעיה להגדיר שבע, בעיה זו מתעורר במובן זה שאם אתה קונה חלקה של מניית פייסבוק, ולאחר מכן עבור למשל אתה קונה מניות השניה של מניית פייסבוק, אתה צריך לעשות החלטה כמתכנת. על מנת להחליט כיצד לעדכן מסד הנתונים, רוב הסיכויים שאתה הולך יש שורה אחת עבור המניה, וזו היא אחת דרכים ליישם אותו. ואתה הולך להיות מניה אחת של FB, שהוא סמלה של מניה שלהם לשם משתמש זה, או למשתמש זה מזהה, המזהה הייחודי. אבל את אותו הסיפור יכול לקרות כאן. אם אתה עושה SELECT ב-SQL, כפי שתראה בבעיה להגדיר שבע כשאתה רואה, אה, יש דוד מניה אחת של מניית פייסבוק. עכשיו תן לי לשנות את זה כדי להיות שתי מניות, בגלל שהוא רוצה לקנות נתח שני. אבל נניח שדוד היה למעשה שני חלונות פתוחים של דפדפן, או מניח כי זה חשבון משותף עם שני בני זוג, ושניהם מנסים לבצע את אותה הפעולה, גם שם, קיים פוטנציאל להחלטה להיות נעשה על בסיס הקודם מצבו של העולם - יש לו את החשבון מניה אחת - ואנשים כאחד, או שני השרתים, עכשיו מנסה לומר להגדיל אותו לשתי מניות. אבל במקרה זה, ייתכן שיש לחייב לי כסף לשתי המניות, אבל מוגדל בדיוק את זה פעם אחת. אז בקיצור, הבעיה הבסיסית כאן, כמו בבדיחה על עזיבה שימו לב, או לשים מנעול על זה, הוא אם שני אנשים, או שני נושאים - חושב לחזור להתחלה - ניתן לבדוק את מצבם של כמה משתנים ולאחר מכן לנסות לשנות משתנה ש, אבל שני הדברים האלה לא יקרו ב אותו זמן, אבל יכול לקבל נקטע על ידי דברים אחרים שקורים, הנתונים יכולים להגיע למצב מאוד מוזר. ואתה יכול להפיק תועלת, או שאתה יכול לסבול במובן של הכסף, למשל. אז בבעיה להגדיר שבע, אנחנו נותנים לכם הקו הזה אחת של קוד, אשר ארוך סיפור קצר, פותר את זה בעיה ב-MySQL. הוראה ארוכה מאוד זה, שאינו אפילו להתאים אותו לשורה אחת על מסך כאן מבטיח כי הפעולה שלך הוא מה שנקרא אטומי. כל זה קורה בבת אחת, או זה לא קורה בכלל. ביטוי ארוך מאוד זה לא יכול מקבל קטע באופן חלקי. ומה שהיא עושה הוא, פשוטו כמשמעו, מה שהוא אומר. הכנס לתוך כמה שולחן הבא שלושה שדות ערכים הספציפיים אלה, אבל במפתח כפול, לא עושה את הכנס. האם עדכון. אז זה כמו לעשות SELECT ו INSERT כביכול באותו הזמן. ומה הוא המפתח שכנראה מדובר כאן? מתברר, ואתה רואה את זה ב בעיה מוגדרת של שבעה מפרט, כי אנחנו כבר הכריזו שיהיה מפתח ייחודי על שולחן המסוים הזה כך ש אתה לא יכול להיות מספר שורות עבור אותו משתמש עם אותו סמל מניית אגורה - בדוגמה זו כאן, היא DVN.V מניות פרוטה טיפשיות שאנחנו עיין במפרט. כי אנחנו כבר הכריזו עליו להיות ייחודיים, מה שזה אומר זה שאם אתה מנסה להוסיף שורה כפולה, אתה במקום הולך לעדכן אותו בלי כל אדם אחר שיש לו סיכוי לשנות מצבו של העולם או. אז בקיצור, זה מבטיח דברים הם אטומיים. באופן כללי יותר, אם כי מאגרי מידע כמו MySQL - ואתה לא צריך תכונה זו עבור P-סט שבע, אבל לשמור את זה בחשבון עבור עתיד - לתמוך במה שנקראים עסקות, שבו אתה יכול לומר START עסקה, פשוטו כמשמעו. לאחר מכן תוכל לבצע שני משפטי SQL. ומשפט SQL, כפי שתראה בעמ 'שנקבע שבע, נראה קצת משהו כזה. עדכון טבלה בשם חשבון. הגדר את עמודת האיזון שווה לכל עמודת האיזון כיום הוא מינוס 1000 שבו המספר, מספר חשבון, כמו זיהוי המשתמש, שווה 2, ולאחר מכן לעדכן חשבון נקודת נקודת נקודה. אז במונחים של הדיוטות, מה עושה שני אלה שאילתות נראות שהוא עושה ב תחושה אמיתית של עולם בנקאות? קהל: העברה לחיסכון. דוד Malan: בדיוק. העברת כספים מאחד להסביר לצד השני. וזו היא דוגמה נוספת שבו אתה באמת רוצה שני הדברים האלה לקרות או לא יקרה. אתה לא רוצה משהו כדי לקבל ב אמצעם ופוטנציאל לבלגן מתמטיקה, או בלגן כמה כסף יש לך, או כמה לבנק כסף. אז מה באמת נחמד על עסקות בMySQL הוא ש, ו מאגרי מידע כללי יותר, הוא שהם ואנשים חכמים שכבר מיושמים תכונות אלה להבין איך לעשות בטוח ששני הדברים האלה יקרו או בכלל לא. ואם אתה באמת שואף לעשות אתר המשמש על ידי אנשים על קמפוס, אנשים בעולם האמיתי, עושים משהו בתחושת ההפעלה, אלה הם סוגים שונים של החלטות עיצוב ש תהפוך אי פעם כל כך חשוב. אחרת, אתה מתחיל לאבד את הנתונים, תאבד משתמשים, או במקרה הגרוע כמו שראינו כאן, באופן פוטנציאלי להפסיד כסף. אז שוב, עוד על כך בבעיה להגדיר שבע, כמו גם אולי לחלק מן אתה בפרויקט גמר. אז בואו נשנה את זה תמונה שהיו לנו לפני רגע דרך רק באחת. אז תן לי ממש לראות אם אני יכול - לא, ככה זה נעלם. זה מה שיש. אז זה המקום שבו בפעם האחרונה. ומתברר שאנחנו הולכים לזרוק עוד דבר אחד לתערובת כאן - שפה נקראת-JavaScript. אז JavaScript ממש מתאים לקטע הזה - ואני לא ממש להשאיר מספיק מקום, אז זה לא עכשיו בקנה מידה. אוקיי, זה באמת פתטי. אוקיי, אז זה JavaScript. בסדר. אני באמת עושה את זה עוול. בסדר. אז JavaScript היא תכנות אחר שפה, והאחרון שלנו, אם זה עוזר להרגיע שאין הרבה יותר מברזי כיבוי האש כאן. אז גם הוא JavaScript פירש שפה, מה שאומר שאתה לא יודע לעבד אותו לתוך אפסים ואחדים. אתה פשוט להפעיל אותו. אבל מה שונה במהותו עם JavaScript בדרך כלל הוא שאתה לא להפעיל אותו בשרת האינטרנט שלך. זה לא להידרס ב מכשיר כשלעצמו. במקום זאת, הוא מקבל שהורד על ידי משתמש באמצעות פרוטוקול HTTP בדפדפן שלהם - כרום, ספארי, הדפדפן Internet Explorer, פיירפוקס, מה - וזה הדפדפן שמבצע את זה שפת תכנות מסוימת. אז כדי שיהיה ברור, PHP עד כה היה בוצע גם בשורת הפקודה ב החלון השחור ולבן שלנו, בשרת כמו המכשיר, מחשב כמו במכשיר, או שזה היה הוצא להורג על ידי שרת אינטרנט פועל על מחשב. אבל הנושא כאן הוא PHP שעד כה בוצע בצד שרת, ולכן משתמש והדפדפן של המשתמש אף פעם לא רואה את שורת קוד PHP. למעשה, אם אתה אי פעם לפתוח את דפדפן ל אתר האינטרנט שלך או אחר, ואתה למעשה לראות את קוד PHP בחלון שלך, מישהו דפוק. כי זה לא אמור להיות נשלח לדפדפן באופן ישיר. זה אמור להיות מוצא להורג והפך למשהו כמו HTML. אבל JavaScript הוא למעשה ההפך הוא נכון. זה אמור להיות מנוהל בדרך כלל בתוך של חלון הדפדפן של משתמש. ואילו סוגים של אתרי אינטרנט להשתמש JavaScript לאחר מכן בימים אלה? אוהב, פשוטו כמשמעו, בכל אתר אינטרנט פופולרי. כל אתר אינטרנט שכנראה אתם שימוש יומיומי להשתמש ב-JavaScript ל הפשוט ביותר ואפילו התכונות הסקסיות ביותר. אז משהו כמו פייסבוק צ 'אט אם אתה משתמש בזה. איך זה באמת עובד? ובכן עד כה, את כל הדברים שיש לנו עשו עם HTML ו-PHP מניח כי אתה מושך את כתובת אתר, ואתה מכה הזן, ואתה רואה כמה תוכן HTML. ואתה לוחץ על הקישור, שמשנה את כתובת אתר, משנה את הדף, וטעינות קצת תוכן חדש. לחץ על כתובת אתר אחרת או לשלוח טופס, אתה לקבל whisked לדף ועוד אתה רואה חלק מתוכן חדש. אבל באמצעות משהו כמו פייסבוק צ'אט, או Gchat, או ב-Google Maps, רק לעתים נדירות אין כל רענון הדף כזה אתה רואה מסך לבן ורגע תוכן חדש לאחר מכן. במקום זאת, דפי אינטרנט היום הם דינמי מקבל שוב ומעודכן שוב ושוב למיון של מאחורי הקלעים. ומתברר שכשאתה הולך ל משהו כמו פייסבוק, או Gchat, או ב-Gmail, ואת העדכונים בדף באופן אוטומטי מבלי לטעון מחדש מסך כולו, מה שקרה הוא ש הדפדפן שלך עשה סוג של הסתר בקשות נוספות - HTTP לא לכל דפי אינטרנט, אבל רק בשביל נתחים קטנים של נתונים, כמו הודעה מיידית שהחבר שלך פשוט שלחתי לך, או שעדכון הסטטוס מישהו רק שלח לך, או ציוץ מישהו שרק נשלח. זה בדיוק מה שהופך את בקשות לקטנות הנתונים ולאחר מכן באמצעות JavaScript, זה שפת תכנות, כדי לשנות את מה דף האינטרנט שנראה כמו בלי שרת עוזר, ללא השרת יצירת ש- HTML. אז בקיצור, ניתן להשתמש בו לאחר מכן JavaScript לא רק כדי להביא נתונים חדשים מ השרת מבלי לטעון מחדש כל דף או הגשת טופס. זה גם יכול לשמש כדי לשנות DOM מה שנקרא - מודל מסמך אובייקט - וזה רק הדרך המפוארת עבור אומר העץ של ה-HTML שראינו בפעם האחרונה. אז כדי להרגיע, JavaScript הוא תחבירי כך גם דומה ל-C. אין פונקציה העיקרית. אתה פשוט להתחיל לכתוב את הקוד והוא מוצא להורג, או פירש יותר כמו שצריך. תנאים ייראו כך. לא שונה מC או PHP לצורך העניין. ביטויים בוליאניים או-ed יחד ייראה כך. Anded יחד נראה ככה. מתגים ייראו כך. ללולאות תיראה כך. בעוד לולאות ייראו כך. לעשות בזמן שלולאות ייראו כך. זה חדש. אז יש לי JavaScript אינו foreach לבנות כשלעצמו, אבל זה לבנות עבור i משתנה במערך, ואני בזה מקרה הופך להיות ערך מדד. אז זה קצת שונה מזה foreach, אם כי גירסאות חדשות של JavaScript הם יוצאים כל הזמן, כך שגם השפה אלה כוללת מתפתחים. וכמאמר מוסגר, JavaScript בימים אלה יכול לשמש גם בשרת בדיוק כמו PHP באמצעות מסגרת הנקראת Node.js. אחד TFS של CS50, קווין, הוביל סמינר על Node.js זה זמין בכתובת cs50.net/seminars. אז אם אתה סקרן, יודע שאתה יכול להשתמש בזה בצד השרת כמו כן, אבל זה טרנד חדש יחסית, אבל אחד חזק בזה. זה קצת שונה. זהו מערך ב-JavaScript. ומה שנראה לך שונה לעומת C או PHP? ישנם כמה סיפורים מהירים אנחנו יכולים לספר כאן. מה חסר לעומת PHP? קהל: [לא ברור]. דוד Malan: כן? מצטער, אומר שוב? קהל: לא הכריז הסוג של משתנה. מלאן דוד: אנחנו לא הצהירו הסוג של משתנה. אז בעצם די כמו PHP, אנחנו לא המפרט את הסוגים של משתנה זה. במקום זאת, אנחנו באופן כללי יותר אומר var למשתנה. אין לנו המטרד של PHP של סימן דולר, שתוך מייגע סוג, אין לעשות יותר ברור כי משהו לא משתנה. ואילו כאן, אנחנו סוג של חזרה ל גישתו של C רק על ידי קורא משתנה בשם שאנחנו רוצים כדי לתת לו, כמו מספרים. וגם כמו PHP, יש לנו סוגריים מרובעים ל ערכים בתוך המערך. כך משתנה גם ב-JavaScript עשוי להיראות כך. שים לב כאן זה הוא מחרוזת הנקראת ים, אבל דומה שאנו לא צוינו שזה חוט. כאן אף היא תכונה שאינה קיימת באותה הדרך בדיוק ב-PHP, אבל קצת דומה. זהו אובייקט ב-JavaScript. ואובייקטים הם סוג של הצבא שוויצרי סכין של מבנה הנתונים שבך ניתן להשתמש בם עבור כל מספר של דברים. הנה, למשל, אנחנו מכריזים משתנים בשם ציטוט. הסוג של משתנה ש הוא אובייקט. אתה יכול לחשוב על זה כstruct C שיש לו מפתחות וערכים. סמל הוא מפתח. FB הוא ערך, ככל הנראה סמל מניית. פסיק. המחיר הוא מפתח נוסף, וערך שלו הוא ככל הנראה נקודה צפה, או באופן כללי יותר במספר JavaScript, של 49.26 $. אז PHP אין - שלא ראו באובייקטי PHP די כמו זה, אבל אנחנו לא רואים אנלוגיים, שהיה מה? קהל: [לא ברור]. דוד Malan: מערכים אסוציאטיביים. אז אילו PHP יש מערכים אסוציאטיביים תחביר שלה הוא אי פעם כל כך מעט שונה - ראינו את סוגריים המרובעים. ראינו את סמלי חצים המוזרים. יש JavaScript אובייקטים, אבל זה בעיקר הבדל סמנטי ו מילה נרדפת שונה לעת עתה. עם זאת, במאמר מוסגר, יש גם PHP אובייקטים באופן שבו ג'אווה ואחרת יש אובייקטים בשפות תכנות מונחה עצמים. אבל אנו נשתמש רק אלה עבור סוגי נתונים לעת עתה. אובייקטים ומערכים אסוציאטיביים. אחד זה יכול לעשות את זה קצת יותר ברור. הנה הסיבה האובייקט שימושי. כאשר אתה רוצה להכריז על תלמיד, כמו Zamyla, אנחנו יכולים למעשה לתמצת כביכול בתוך כי אובייקט באמצעות סוגריים מסולסלים בדיוק כמו לפני כל חבורה של מפתחות וערכים לכאן. יש לנו תעודת זהות, בית, ושם עבור Zamyla, ואחריו פסיק כ כרגיל בסוף. כאן למטה מדי, זה מעט שונה, אבל גם חזק מאוד בימים אלה. הנה מערך, ואני יודע את זה כי יש את סוגר מרובע עליון וסוגר מרובע בתחתית. ואת זה הוא מערך של מה שנתונים הקלד ככל הנראה ב-JavaScript? זהו מערך של זה נראה כמו שלושה אובייקטים. ואני יודע שזה רק אובייקט בגלל הסוגריים המסולסלים. ושימו לב שיש סד מתולתל פתוח, כמה דברים, סד מתולתל קרוב, פסיק, אז עוד קצת, פסיק, ואז עוד קצת. אז זה שלוש טענות מופרד על ידי שני פסיקים. אז זהו מערך של שלושה חפצים. וכל אחד מאובייקטים אלה נראה חבר סטודנט או צוות של כמה סוג, כל אחד עם תעודת זהות, בית, ושם. אבל אני כבר בשם זה משהו נקרא JSON - JavaScript סימון אובייקט. ואת זה הוא פורמט נתונים שלמעשה הוא כל כך פופולרי מאוד וב אופנה בימים אלה, שאם אתה כותב יישום המשתמש בפייסבוק ה-API, API טוויטר, ממש כמעט כל API בחוץ בימים אלה, כולל כמה של CS50, הנתונים שאתה מקבל בחזרה הוא לא ב פורמט CSV בית ספר ישן. בגלל זוכר שCSV הוא סופר פשוט. זה רק עמודות מופרדות בפסיקים. נתונים JSON נותן לך יותר מטה. זה מקשר את מפתח עם כל ערך כל כך הם לא צריכים רק להניח כי עמודת האפס היא ערך אחד, עמודה אחד הוא אחר, העמודה השנייה היא אחרת. הכל באובייקט JSON כאן הוא מעין מתיאור עצמי, כי בכל אחד מהשמות בקובץ זה יש ממש שם לפניו כ מחרוזת מצוטטת. אז בואו נסתכל כמה דוגמאות כאן. תן לי להיכנס למכשיר. ותן לי להיכנס לvhost ספרייה לציבור. ותן לי להיכנס JavaScript מדריך. ובואו נלך קדימה, לפתוח את Dom-0.html, שם DOM רק אומר מודל אובייקט מסמך. זה חומר העץ שאליו אני התייחסתי קודם לכן. והרשה לי להציע את הדברים הבאים. הנה דף אינטרנט ש גוף הוא די פשוט. כאן למטה אז בתחתית, שמתי לב שיש לי טופס. ראינו אותם בעבר. יש לו שתי כניסות, אחת מהן יש זיהוי של שם, שאחד מהם יש סוג של להגיש, והראשון הסוג של אדם הוא טקסט. אז זה באמת נשמע די פשוט. בואו נלך כאן. בואו נחזור לדף זה כאן. בואו נלך לlocalhost, ולהיכנס ל הספרייה שלנו ב-JavaScript, וללכת Dom-0, וכאן יש לנו טופס זה. אז זה כנראה כל הדף הזה עושה. יש לו שם שדה עם שלח כפתור. אבל אני לא הולך להשתמש PHP כאן. אני הולך לעשות את צד לקוח הכל כביכול ב-JavaScript כדלקמן. שים לב שאכן אני כבר קבלתי את השם תחום זה קלט ייחודי מזהה, אשר יהיה למעשה תחסוך לי קצת זמן ברגע. ושים לב שאני פוגש את תג אחר בראש דף האינטרנט שלי,  תג. אז זה במובן זה שהוא JavaScript שפת תכנות בצד הלקוח. במקרה זה, בדיוק כמו CSS, שמתי זה ישר בתוך ה-HTML שלי. אבל שים לב שהכרזתי פונקציה שנראה קצת כמו PHP מבחינה תחבירית, אבל זה בעצם JavaScript, כי שוב, זה בצד לקוח בדפדפן. ותנחש מה זה הולך לעשות, למרות שחלק מהתחביר כאן הוא חדש. קהל: תגיד שלום לכל מי. DAVID מלאן: זה הולך להגיד שלום לכל מי שמבקר בדף זה. אז איך? אז שם לב, מתברר ב-JavaScript יש התראה (פונקציה). זוהי פונקציה מאוד סוג של עצובה כי באמת רק נוטה לעצבן את המשתמשים. זה לא אחד שאתה באמת צריך להשתמש בדרך כלל, אבל זה מהיר ומלוכלך דרך מסוג של הדפסת משהו למשתמש גרפי ממשק, כמו בדפדפן. שים לב כאן שיש לי מחרוזת במרכאות בודדות. מתברר כי בניגוד C, JavaScript בעצם יכול להיות שאתה משתמש באחת מצטט, ולמען אמת זה רק סוג של אמנה הסגנוני בין JavaScript מתכנתים להשתמש בגרשיים בודדים. PHP, הם למעשה יש מעט משמעות שונה. אבל לעת עתה, רק יודע ש זו הסיבה היחידה. הכנס ב-JavaScript הוא לעתים קרובות השתמש בגרשיים בודדים, אבל אנחנו יכולים להשתמש מרכאות כפולות בשני המקומות גם כן. אז זה מעניין. כזכור, בפעם האחרונה שהיו לנו כי תמונה על המסך שמשך את עץ שבו הייתה לך את צומת ה-HTML, ו ראש צומת, וצומת הגוף, ולאחר מכן חלק מטקסט. אבל היה צומת מיוחד אחד ב מאוד עליון שקראתי את המסמך. ובכן, מתברר ב-JavaScript, כל פעם שאתה כותב תכנית ב-JavaScript בדפדפן, יש לך גישה ל משתנה גלובלי מיוחד. דומה ברוחו לsuperglobals של PHP, זה נקרא ב כל המסמך באותיות קטנות. זה כמו struct, אבל struct זה יש גם פונקציות הפנימיים שלו. אז struct C פשוט יש נתונים בדרך כלל. אבל אובייקט JavaScript כמו זה מבחינה טכנית הוא גם פונקציות, הידוע גם בשיטות, בתוכו. ואתה יכול לקרוא לפונקציה פנימית של אובייקט זה ממש ממש עושה שם, נקודה, ולאחר מכן את שמו של הפונקציה, או שוב שיטה. זה פשוט מילה נרדפת, באמת. ומה הפונקציה הזו עושה? סוג של אתה יכול לנחש משמו. קבל אלמנט לפי תעודת זהות. אז זה הולך לחפש את דף האינטרנט, לחפש עץ ש, מחפש כל צומת, אלמנט AKA, יש זיהוי ייחודי של שם סוף ציטוט ציטוט. ואז מה אני הולך לעשות? אני הולך לקבל את הערך הפנימי של צומת שעל העץ, ואני הולך לומר איכשהו שלום לשם הזה. אז לקחת ניחוש, למרות שיש לנו לא ראיתי את זה עדיין, מה לעשות בתוספת סימנים אומר כאן וכאן כנראה? קהל: לשרשר. DAVID מלאן: לשרשר. נכון, ואלה הם רק לעצב סוג של החלטות אנשים עשו לפני שנים. ב-PHP, אתה לשרשר דברים עם נקודות. ב-C, אתה לקפוץ דרך חישוקים כמה ו לקרוא לפונקציות כמו strcopy () או strcat () או פונקציות כגון אחרים. אבל ב-JavaScript, אתה משתמש בפלוסים. אז זה רק שרשור שלושה מיתרים - שלום, שמו, ולאחר מכן סימן קריאה. אז מתי ומדוע היא פונקציה זו קרא אף? ובכן, תנחש מ HTML שבתחתית. מדוע לברך () נקרא, או מתי? ככל הנראה, כטוב ביותר שאני יכול לומר, על להגיש, כאשר טופס זה יוגש, אני הולך לעשות מה שהוא בתוך הציטוטים אלה. ובאופן ספציפי, אני הולך לקרוא לברך () ולאחר מכן בתמורת שווא. ובכן, בואו לראות מה ברשת השפעה כאן היא ראשונה. אז תן לי ללכת קדימה והקלד ב, נניח, לורן, שלח. שלום לורן. בואו לראות אם אולי זה היה רק יישום מזל. לא ולא. אז זה להקליד את כל מה שם אני באמת לשים שם. אבל שים לב מה לא משתנה. כתובת האתר הוא עדיין Dom-0.html. אין register.php. אין קובץ שני. אין תכונת פעולה. אז מה הוא שקר שיבה זו עושה ככל הנראה? למה אני מתקשר לברך () ולאחר מכן חוזר שווא כנראה? מה שבדרך כלל קורה בעת הלחיצה שלח בטופס שיש לנו אפילו ראה בשבוע האחרון? קהל: [לא ברור]. DAVID מלאן: זה הולך לאנשהו, נכון? זה הולך לחלק כתובת אתר יעד. אבל אני לא רוצה שזה יקרה כאן. אני רוצה דף האינטרנט שלי להיות לגמרי דינמי כמו ב-Gmail, שבו ברגע שאתה שם, אתה תישאר שם. כתובת האתר אינו משתנה באופן שבו מציין את הדף כולו מחדש. במקום זאת, אני רק רוצה לשנות משהו כמו הדפסת משהו כאן על המסך. ובכן תנו לי לנקות את זה עד קצת. הרשה לי לפתוח לא Dom-0, אבל הרשה לי לפתוח את dom-2. רק כדי שראית כמה תחביר כאן. מתברר כי מה שאנו פשוט לא הוא באמצעות JavaScript גלם. אז זו באמת השפה ב-JavaScript. חלק מכם אולי מכיר ספרייה נקראת jQuery. אז jQuery היא לא אותו הדבר דבר כמו ב-JavaScript. זה פשוט ספרייה שבאמת חכמה בחור כתב ופופולרי כגון כי כמעט כולם בעולם עכשיו משתמש jQuery בעת השימוש ב-JavaScript. ובמבט ראשון, בכנות, זה נראה קצת יותר ברורים מאליהם. אבל אתה תמצא, במיוחד אם אתה הולך יש לפרויקט הגמר שלך עם אינטרנט פיתוח, תמצא שזה מנקה את דברים וחוסך לך די כמה שורות של קוד. אז בואו רק להציץ בכמה טופס זה עובד. שים לב מה שאני לא יסיר, ככל הנראה, מ-HTML שלי? אין בתגיש מטפל אם אפשר לומר כך. אין שום תכונה. כי אתה יודע, מה אני לא באמת אוהב? הרגשתי כאילו אנחנו נופלים להרגלים ישנים שם. בדיוק כמו שזה התחיל להרגיש מרושל להתערבב גם עם CSS HTML, כי אתה סוג של זריקה שפות שונות בכל רחבי מקום, דומה שזה מתחיל להרגיש כמו כביש רע לרדת בי אני שם את קוד JavaScript בתוכי HTML ולא הפקטורינג אותו החוצה. אז זה הלקח כאן. בDom-2.html, אני הפקטורינג אותו החוצה. ואני עושה מעט דברים באופן שונה. לעת עתה, אני הולך להניף את הידיים שלי על מה זה באמת מתחת למכסת המנוע. אבל רק לעת עתה תניח כי שראשון שורת קוד בספרייה זו נקרא jQuery רק אומר כש המסמך מוכן, לעשות את הדברים הבאים. מכיוון שדפי האינטרנט יכולים לקחת כמה זמן לטעון. אתה יכול להיות על אינטרנט איטי חיבור, וזה יכול להיות מסתובב וספינינג, ולבסוף הוא טעון. קו זה של קוד פשוט אומר לחכות עד העמוד השלם מוכן, המסמך מוכן, לפני ביצוע קוד זה. ועכשיו שמנו לב, זה כנראה השימושיים ביותר הראשון לקחת מן jQuery. הקו הזה כאן הוא דומה מאוד ברוחו לשורה ארוכה הרבה יותר זה כאן. ואילו בקוד JavaScript גלם, יש קיים אובייקט גלובלי מסמך ה יש פונקציה שנקראת getElementById (), האנשים שכתבו jQuery פשוטים שרק אומרים סימן דולר, ולאחר מכן בתוך סוגריים לשים שני ציטוטים, ולאחר מכן לשים סמל חשיש ואחריו זיהוי ייחודי אתה רוצה לתפוס. אז זה שווה ערך ל document.getElementById. בינתיים,. להגיש רק אומר על הגשת כל צורה שאתה מתייחס לצד שמאל, ללכת קדימה ולבצע את זה. אבל גם את זה הוא עכשיו הסקרנות. מה מוזר על מה אני כבר מודגש כאן? לא רק שזה סוג של בחינה תחבירית חדש, יש גם משהו חסר. קהל: זה פשוט נקרא פונקציה? זה לא נקרא התראה? DAVID מלאן: כן. ובכן, כל כך ערני () הוא למטה כאן, כדי להיות הוגן. אבל אין כל אזכור של שם, כמו שאתה יודע, או foo משהו כאן למעלה. ואכן, זו אחת מהתכונות של JavaScript שדי רב עוצמה, אבל גם די חדש. ו-PHP באמת יש את זה גם כן. תן לי ללכת ולעשות משהו ממש מהר. תן לי ללכת קדימה ולשים את זה כאן. תן לי לעשות את זה. פונקציה. בואו לקרוא מטפל זה (). פונקצית מטפל כביכול. משהו שמטפל בפעולה מסוימת. תן לי לנקות הכניסה שלי. ולשים את זה כאן. ולשים את זה כאן. כן. אישור. אז עכשיו יש לי פונקציה שנקראת מטפל () שאני לא ממש יודע מה שהיא עושה עדיין. פשוט יש לה עדיין את הדברים האלה. אופס. לקח יותר מדי. בואו נעשה את זה. בסדר. סליחה. בסדר. תן לי לעשות את זה. אישור. זה נראה נחמד וישר קדימה עכשיו. תן לי לעשות את זה. לעשות את זה. ואישור. אז עכשיו, בואו נשים את זה כאן. תכנות לא יותר על לטוס. אישור. אז עכשיו, בואו נחזור ל שבו התחיל את הסיפור. בעבר, אמרתי כי קו זה כאן כלומר, כאשר המסמך מוכן, ללכת מוזמנים לעשות את זה. מה אני רוצה לעשות? גם באופן ספציפי, אני רוצה ללכת קדימה, בצע את הפעולות הבאות. ביצוע הקו הזה של קוד, ולאחר מכן מה שאני רוצה לעשות הוא לקרוא לזה לתפקד כאשר הטופס נשלח. עכשיו זה מה שהמעניין. זה לא את עצמו לתפקד. שים לב שאני לא לשים סוגריים כאן בדרך הרגילה. אני עובר ממש פונקציה הנקראת מטפל () לפונקציה אחרת קרא להגיש () כטיעון כ למרות שזה כמו משתנה. וזו אחת מהתכונות של JavaScript, הוא פונקציות עצמם הם באמת רק אובייקטים. למעשה, הם באמת רק משתנים מסוג כלשהו. ואם השם של הפונקציה הוא מטפל (), אין שום סיבה שאני לא יכול להעביר את זה כבטיעון כאן. וזה אומר כשאת הטופס עם זיהוי של הדגמה הוא הוגש, קורא בפונקציה זו. אבל עכשיו, אם אני לבטל את כל זה, מדוע אז אולי עשיתי לפני זה רגע? ובכן, זה פונקציה בעילום שם. כי למען האמת, הבנתי למה אני טרח לבזבז זמן הכרזה פונקציה שנקראת מטפל () רק לקרוא אותו באחת ורק במקום אחד? אם אני לא צריך את השם, ואני לא צריך לקרוא לזה יותר ממקום אחד, בואו פשוט ליישם את הפונקציה בדיוק איפה שאני צריך את זה. ו-JavaScript ו-PHP תמיכה אז מה נקראים פונקציות אנונימיות ש הרשה לי לעשות בדיוק את זה כאן. אבל אנחנו רק מגרדים את פני השטח. בואו להקניט עם רק כמה דוגמאות האחרונות כאן. אם אני נכנסתי לquote.php. שים לב שזה בעצם PHP פונקציה, תכנית PHP, שכתבתי שמצפה פרמטר HTTP נקרא סמל, ואני יכול לעבור ב ערך כמו FB. ואם אנחנו באמת מסתכלים על המקור קוד, זה השאילתה לאתר ללא תשלום בשם האוצר יאהו, בדיוק כמו P-סט שבע, וזה חוזר אליי משהו בככל הנראה הפורמט הידוע הוא JSON - סימון אובייקט JavaScript. זה רק אובייקט. שימו לב לסוגריים המסולסלים, את הציטוטים, המעי הגס, ואת הפסיקים. עכשיו בינתיים, זה די מגניב. כי אני כנראה יכול להשתמש בתכנות שפה כדי ליצור את הכתובות שנראים כמו זה באופן דינמי, נכון? אני יכול לשנות את זה ל-Google ולקבל בחזרה של גוגל מחיר מניית של 1,017.55 $. אז בואו נראה אם ​​אנחנו לא יכולים להשתמש בזה עכשיו. תן לי ללכת לAJAX-0 כאן, אשר נראה את הדברים הבאים. זה פשוט אתר שיש בי טופס עם כפתור. תן לי כאן ללכת קדימה והקלד בYHOO לסמל מניית של יאהו, לחץ על קבל ציטוט, ועכשיו שם לב שקבלתי כוננות עם 32.86. תן לי באמת ללכת לגרסה מהודרת של דף זה, גרסה שתיים, ו סוג ביניח מיקרוסופט, MSFT. קבל הצעת. ועכשיו שם לב, לא ערני. שים לב איפה שכתוב מחיר שייקבע? יש הפשוט של דוגמאות מרמז על מה Gchat, ופייסבוק צ 'אט, ו-Gmail, ואחרים, כגון אתרים עושים בפועל על ידי שינוי דף האינטרנט. הודעה זו. הרשה לי לטעון מחדש את הדף. תן לי לפתוח את המפקח של כרום. תן לי ללכת לאלמנטים כרטיסייה כאן למטה. עכשיו שם לב אם אני קרב כאן למטה ו לפתוח את זה, שם לב שזה שלי HTML DOM - מודל אובייקט המסמך שלי. זוהי ה-HTML שלי. אבל עכשיו שם לב, למרות שזה קורה להיות קצת קשה לראות את זה בשניהם מקומות בפעם אחת, אם אני מקליד בFB עד כאן, לראות את התחתית של המסך בלבד. זה בעצם שינוי ה-HTML שלי על לטוס. וזה עושה את זה בפשטות על ידי עושה משהו כזה. אם אני פותח את AJAX-2, שימו לב ליישום משהו סקסי כמו כי, למרות שזה די מכוער, אבל מתוחכם כמו ש פונקציונלי, יש לו חלק HTML בתחתית. אבל שם לב שאני נהגתי לתייג. אנחנו כבר לא בשימוש זה בעבר, אבל זה כמו, אבל זה לא בכוח כל מה שעל קו חדש. זה פשוט הופך את אזור מלבני על אותו הקו במהות. שים לב שאני נתתי לו תעודת זהות של מחיר. ומתברר שעל ידי שימוש באותה ספריית JavaScript, יש לי פונקציה קרא ציטוט () שנקרא בכל פעם הטופס נשלח. ומה שאני עושה הוא זה. אני מכריז על משתנה ב-JavaScript נקרא URL, שמירת הערך quote.php? סמל =. במילים אחרות, אני בעצמי אני מתחיל כדי להכין את בקשת HTTP, ולאחר מכן אני שרשור על זה עם תוספת כל האלמנט עם ID של סמל, שההודעה היא כי שדה טקסט מימין לכאן. אז בדיוק כמו שהיו לנו צורות בעבר. ואז מתברר בjQuery, אם אתה להתקשר. val (), שקורא לval פונקציה, פונקצית ערך, שמקבלת כל מה שהמשתמש הקליד פנימה ולאחר מכן את כל תעבורת הרשת מה שקורה הוא זה. $. GetJSON. ואגב זה, סימן דולר הוא רק סימון מקוצר. זה באמת jQuery.getJSON. קבל אותי לJSON מכתובת אתר זו, וכאשר הבקשה חוזרת, קורא לזה פונקציה ועובר כבטיעון כל מה שחזר מהשרת. אז במילים אחרות, אם אני חוזר ל דפדפן, ואני חוזר לquote.php, מה הדפדפן שלי עושה הוא מקבל נתח זה של נתונים. וכשאני הולך לדף אינטרנט זה כאן, תבחין אם במקום ללכת לרשת כרטיסייה ולנקות אותה, ולאחר מכן להקליד משהו כמו GOOG לגוגל וקבל ציטוט, שים לב הדף לא השתנה. אבל בקשת HTTP נעשתה, ומה חזרתי לכאן אם אנחנו מסתכלים על תגובה היא חבורה של JSON שלמה שאנחנו לגשת לבסוף עם הקו הפשוט הזה כאן. נתונים הוא מה שקבל מהשרת. מחיר הוא שמו של מפתח אכפת לי. אז data.price נותן לי את זה. עכשיו בינתיים, וזה הוא הדוגמא האחרונה. אתה יכול לעשות זאת יותר בדף. אחד למעשה, גם שתיים. אנחנו יכולים להחזיר את לתייג, אם אתה זוכר את זה. זה ב-JavaScript. אנחנו יכולים לעשות את זה. מאוד מרגש. אנחנו נשאיר את זה כמו סחרור מסוכן. אבל יותר מרגש, אתה יכול לעשות דברים כאלה. אם אני הולך למיקום גיאוגרפי-1, מתברר כי Chrome יודע שאנחנו נמצאים ב קווי אורך ורוחב 42.37. -71.10. אז יש אפילו יותר יש לרשותכם. אבל עוד על כך בשבוע הבא. להתראות ביום שני.