>> [השמעת מוסיקה]
>> דוד י מלאן: בסדר.
זה CS50.
זוהי תחילתה של שבוע שמונה.
ואתם אולי זוכרים שעזבנו את הפעם האחרונה מסתכל על שפה חדשה
לגמרי.
למעשה, אחת במחיר די קל משקל וזה אפילו לא
שפת תכנות.
זו שפת סימון המאפשרת לנו למעשה מבנה ולהפוך את דפי אינטרנט.
וכאשר אתה משהו אחר בשיתוף עם זה--
או שאתה בקרוב, אם כבר אין לך.
אנחנו הולכים להשתמש מדורגים גיליונות סגנון, או CSS, ש
הוא סוג אחר של שפה עם תכונות וערכים
זה הולך לתת לנו לעשות דברים רוצים לשנות את הצבע
ולשנות את המיקום ומינים אלה tweaks.
אבל היום והלאה, אנחנו מתחילים להתמקד בשפות חזקות יותר,
שפות תכנות בפועל כמו PHP.
>> אז PHP בסביבה כבר זמן מה.
וכפי שתראה, זה נועד בעיקר
כבר בשלב מוקדם לבפועל להשתמש בפיתוח אינטרנט
ובעצם יצירת דפי אינטרנט.
אז אילו סוגים של תכונות עושה שפה
צריך כדי להפוך את האינטרנט דפים דינמי עם זה?
>> במילים אחרות, אם אתה רוצה ליצור תוכן dynamically-- כמו פייסבוק של
Newsfeed, שמשתנה כל הזמן, או הודעות מיידיות שצצות מעת
לtime-- כמו מה חתיכה פונקציונלי מפתח
אתה צריך בשפת תכנות שאאפשר לך באופן דינמי
להדפיס מידע חדש על המסך?
>> תלמיד: קוד.
דוד י מלאן: קוד.
אישור.
אנחנו ניקח את זה.
קצת יותר מדויק.
אני מתכוון, אנחנו יכולים לעשות זה עם C, בכנות.
זה יהיה כאב בצוואר.
But-- מחויבות זו?
>> סטודנט: כן.
משתנים, אולי?
דוד י מלאן: משתנה.
אישור, בטוח.
משתנים בהחלט יכולים לעזור לנו.
ואפילו משהו פשוט יותר.
אנחנו השתמשנו בו בראשון תכנית של היום הראשון
כאשר אנו למעשה אמרו "שלום עולם".
>> תלמיד: הדפסה.
>> דוד י מלאן: הדפסה, נכון?
הדפסה, או printf ב עולם של ג אז כל הזמן הזה,
שהיינו לנו בבית שלנו רשות language-- C,
בparticular-- ואפילו שריטה לצורך העניין ש
ניתן להפיק מחרוזות טקסט.
>> ובכן, אם HTML, כפי שראינו בשבוע שעבר, הוא פשוט חבורה של מחרוזות טקסט כולו
גם אם בסוגריים פתוחים וסגור סוגריים ואיזה חרוז
וסיבה מאחורי זה, גם אז אנחנו באמת יכולים
להתחיל לייצר דפי אינטרנט או באופן ידני על ידי הקלדה אותם בgedit
או ב- Microsoft Word, של עניין אנחנו רק צריכים עורך טקסט.
>> או שאנחנו יכולים לכתוב קוד, להצעה שלך
מוקדם יותר, שיאפשר לנו באופן דינמי לייצר HTML,
וזה מה שאנחנו הולכים להתחיל לעשות עם PHP
וסופו של דבר גם עם שפה נקראת JavaScript,
הוא להשתמש בשפה אחת ליצירה אחרת.
ואכן, זה מה שפייסבוק והרבה הרבה אתרים, אחרים
לעשות כדי למעשה באופן דינמי להציג מידע חדש לך.
>> אז בואו נתחיל עם זה-- קו נסתר מחפש, אבל אחד
זה בעצם די חזק.
עד כה, אנו כבר משתמשים C, שהיא שפת הידור.
ורק recap-- מהיר הידור יש שפה מה מאפיין?
ברור שאתה צריך לקמפל את זה, אבל מה זה אומר?
כן?
>> תלמיד: זה צריך להיות התאסף לתוך קוד מכונה.
>> דוד י מלאן: אישור.
זה צריך להיות מורכב לקוד מכונה.
אז אתה לוקח את קוד המקור שלך, אשר הוא כמו סוג של-אנגלית.
לך להמיר את זה ל משהו ברמה נמוכה יותר,
אשר נקרא סופו של דבר אובייקט code-- של 0 ו -1.
וזה 0 של אלה ושל 1 ש מעבד, כמו אלה שנעשו על ידי אינטל,
להבין בעצם.
>> עכשיו, PHP ו- Python ו- Ruby ו JavaScript וצרורות של אחרים
שפות לא הידור שפות אבל פירשו שפות,
מה שאומר שאתה פשוט להקליד אותם ולאחר מכן אתה לא הופך אותם לספרות 0 ו -1.
אתה במקום רק לספק אחר כך כ קלט לתכנית של מישהו אחר,
נקרא מתורגמן.
ושל האדם ש תכנית תוכננה
כדי להבין מה כל אחד ו כל סמל בפייתון או PHP
או רובי או כל מספר של שפות אחרות משמעות.
>> וכך כל מה שאנחנו צריכים זה משהו כזה.
כך שלמעשה, אני הולך ניגש למכשיר
כאן, רק לכל חלון ישן, ואנחנו
הולך קדימה ופתוח קובץ בשם, אומר, שלום.
עכשיו בעבר, שיכולתי להציל את זה אפילו עם סיומת קובץ,
אבל אני הולך לעשות משהו אפילו פשוט יותר כאן.
אני הולך קדימה ולהתחיל קובץ זה עם תחביר נסתר זה.
אז "משתמש, בן, env, לסביבה, php. "
>> זה פשוט שורת קוד אחת ש הולך לספר לי מערכת ההפעלה שלי,
ללכת למצוא במקומי שלך סביבה מה שזה לא,
בכל המקום בי PHP is-- interpreter-- ואתם מוזמנים להשתמש בי המתורגמן ש
לפרש את הקוד הבא.
עכשיו, זה סוג של תכונה מכוערת של PHP.
אבל בשפה זו, כל פעם שאתה כותב קוד PHP,
אתה צריך להיות אחד מאלה מכוערים תגי PHP סימון תחילת
שלך code-- <? php.
>> אבל מתחת כאן, עכשיו אני יכול לעשות משהו כמו פסיק שלום די פשוט, printf
קרוב n הקו הנטוי עולם ציטוט, קרובים סוגריים.
ולאחר מכן רק לטובה מדד, אני הולך
ללכת קדימה וקרוב תג php שלי לכאן
כך שמראה של כל דבר יפה יפה מודפס.
>> וברגע שאני לוחץ על שמירה, gedit הוא חכם בעצם מספיק
להסתכל על זה שורה הראשונה ו מבין, אה, אתה כותב קוד PHP.
הרשה לי להדגיש תחביר זה עם הצבעים
כאן, כך שהוא עומד קצת יותר.
אבל עכשיו אני הולך עד לחלון המסוף שלי.
אני להתקרב.
>> תכנית זו נקראה "שלום," אז אני הולך לעשות לוכסן נקודת שלום,
אבל הרשות נדחתה.
וbash.
אנחנו בעצם שמענו על זה לפני דבר כמה שבועות
בהקשר של Shellshock, אחד מהחרקים אלה.
>> אבל הרשאה נדחתה שראינו בעבר, אולי בהקשר אחר.
האם מישהו זוכר איך ייתכן לתקן משהו
שבו רשות נמנעת כזה?
מה הפקוד, לפחות?
>> תלמיד: chmod.
דוד י מלאן: כן, chmod, לשינוי המצב של קובץ.
ותקבל את כל עוד משמש ל בשבוע הבא זה עם בעיה שלאחר מכן
להגדיר.
אבל לעת עתה, אני הולך לשנות המצב לא להיות קריא,
אבל לתת לכולם executeability הרשאות, היכולת
כדי להפעיל קובץ זה.
ואני הולך להקצות כי לקובץ שלום.
>> אם אני עכשיו עושה קו נטוי נקודת שלום להיכנס, אתה רואה, למעשה, התכנית שלי, שלום עולם.
ומה צעד שעשה אני ברור לדלג לגמרי?
קומפילציה.
אז אני פשוט רצתי בתכנית זו בפשטות.
>> ומתברר שאתה יכול לעשות את זה עם הרבה תחביר מזכיר ג
תן לי ללכת לקוד של היום, שאני מכניס את ספריית vhost שלי
כאן, לסיבות אמיתיות אנחנו נחזור ל.
ואני הולך להיכנס, נניח, תנאי 1.
>> ותראה כאן, ראשונה ו בראשונה, חבורה של הערות כל.
אבל זה בעצם יצירה מחדש ב- PHP
של תכנית שעשינו בשבוע ש 1.c אחד תנאים בשם
שבו המטרה ב חיים של תכנית זו
כנראה לשאול המשתמש עבור מספר שלם
ולאחר מכן לעשות קצת רך ניתוח עליו לפי
אתה אומר אם זה חיובי או שלילי או שווה לאפס.
ואני מביא את זה רק בגלל, למעט אולי פרט אחד קטן,
זה נבדל כל כך רחוק מג
>> מה המאפיין אחד כאן שאולי קופץ
עליך כקצת שונה?
אולי שני דברים.
כן?
>> תלמיד: n סימן דולר?
>> דוד י מלאן: כן.
אז n סימן דולר הוא הווה.
וסימני דולר, כ אנו רואים, הולכים
להיות תיקון לתחילת של משתנה כלשהו בPHP.
זה גם טוב טוב וbad-- ב שזה סוג של המובן מאליו את מה ש
משתנה, רע שבזה עוד משהו להקליד.
ויש אחד אחר דבר שיש לנו לא ממש
ראה, לפחות על ידי כתיב זה. כן?
>> תלמיד: readline.
>> דוד י מלאן: readline.
Readline לא ראו, כשלעצמה, ב ג ', למרות שקיים משהו
דומה, אבל אנחנו כבר בשימוש getstring, ואת זה הוא מקבילו.
אז אם אני נכנסתי לזה ספרייה, אשר קורה להיות,
כפי שאסביר בקצת בvhost שלי ספרייה והמקור שלי בספרייה,
ואני הולך קדימה ולעשות לוכסן נקודה לוכסן נקודת whoops-- conditions--
תנאי 1, תראו, שוב, אותו הרשות issue-- הכחישה.
>> אז תן לי להתקרב ולעשות chmod בתוספת x בתנאים, תנאי לוכסן נקודה.
אני רוצה מספר שלם, בבקשה, 50.
ואנחנו יכולים לשחק את זה כל יום משחק.
זה הולך להתנהג בדיוק כפי שעשה בשבוע אחד.
>> אישור אז לא כל כך שונה, למעט לא רק שקצת קל של תחביר,
אבל בראש, אני שוב היה זה קו ש
אפשרו לי ליצור משהו ש נראה כמו תכנית C הנקראת שלום,
תנאים בשם 1.
אבל זה לא 0 ו אלה אני מבצע ישירות.
זה במקום פועל זה מתורגמן ששמו
קורה להיות זהה לשפה.
התכנית נקראת PHP, והקוד שלי מתחת לקו אחד שעבר אליו.
>> אנחנו יכולים לעשות אחר פשוט למדי דוגמא מזכירה משהו
שעשינו לפני שבועות.
שוב, מדובר בסוג של נתח שרירותי של קוד
שכנראה עושה מה אם מפעיל אותו?
מה זה הולך להדפיס, ככל הנראה?
>> אז בהתחלה על קו 16, זה הולך להגיד x הוא כעת 2, כנראה.
% d הוא בדיוק כמו שאני $ עבור printf.
אז זה עִקוּב, נקודה, הנקודה, נקודה, בקו 17.
ולאחר מכן בשורה 18 מופיע לקרוא לפונקציה בחזקה שלוש.
ושבו מוגדרת בחזקה שלוש?
>> ובכן, זה נראה כמו בקו 25, אז זה לא כל כך שונה.
יש לי כמה הערות מעל זה, אבל על פי רוב,
זה פשוט למדי סבה או המרה
מתכנית ג 'לגרסת PHP.
אבל יש עכשיו כמה הבדלים שאולי צריך לקפוץ החוצה.
מה עוד שונה על איך אתה אולי לכתוב אותה תכנית זו ב- C?
>> תלמיד: [לא ברור].
>> דוד י מלאן: יש אין עליון אב טיפוס למעלה.
אמת שגם PHP-- ו, הרבה languages-- המודרני
הם הרבה יותר חכמים ומועילים יותר מ C מהדרים שב
יכול לשים את הפונקציה כאן, אתה יכול לשים את פונקציה כאן למטה,
והמתורגמן הוא הולך לעשות לך טובה והקריאה
כל הקובץ לפני שהוא מחליט כי כמה פונקציה לא קיימת.
אז שיפורים נחמדים שנים מאוחר יותר.
אבל יש גם משהו שונה אחר או נעדר כאן.
כן?
>> תלמיד: [לא ברור].
דוד י מלאן: אין לנו ל להכריז על סוגי משתנים,
כך נוכל לראות לפני זמן רב ש ישנם סוגים שונים ב- PHP,
אבל אתה לא צריך לציין אותם, שגם הוא טוב וגם רע.
ויש חסר דבר אחד נוספת.
>> תלמיד: אין ספריות.
>> דוד י מלאן: לא נמצא ספריות.
אוקיי, אז זה נחמד.
אנחנו מקבלים הרבה יותר מהקופסה.
אז יש למעשה הרבה יותר דברים ממה שחשבתי היו שונים.
מה דעתך על דרך בגב?
מה זה?
תגיד את זה עוד פעם?
>> תלמיד: פוינטר.
>> דוד י מלאן: לא מצביעים.
אישור, לפחות בדוגמא זו, לא.
זה הוגן.
כך שאין מצביעים ב- PHP למעשה באופן כללי.
ישנן התייחסויות משהו שנקרא, אבל אנחנו לא לבזבז יותר מדי זמן שם.
ומה עוד?
>> תלמיד: ראשי.
דוד י מלאן: ראשי.
אז זה היה ביגי חשבתי.
שים לב שאין נקודת כניסה הראשית.
אתה פשוט להתחיל לכתוב את הקוד שלך.
וזה בעצם הולך להיות יתרון
כאשר אנו מעבר לרגע לשימוש בפועל
מבוססת אינטרנט זה אותה שפה ל תכנות, שעבורו
לא רוצה להיות רק אחד נקודת כניסה.
אנחנו אולי רוצים להיות חבורה של כתובות, חבורה של קבצים שונים
כל לוקח בקלט משתמש והפקת פלט.
>> אבל כאן הוא מאוד מייאש דוגמא שהבטחתי בפעם האחרונה,
כלומר בתיקייה זו כאן, שגיאות כתיב.
אז באיות בקובץ זה, שבו אנו לא לבזבז יותר מדי זמן על, יש
בעצם P-O-R-T porting--. זה פשוט מילת נתונה כאשר, למשל,
לך להמיר משפה אחת למשנהו באופן ידני בדרך כלל.
>> זוהי סבה של מחשב גרסה של איות מPSET 5.
ואני בעצם ניסיתי להמיר קו זה על ידי קו, ככל שאני יכול.
אז אם אתם אוהבים דברים מסוג זה, זה באמת שווה בשלב מסוים
מושך את שניהם צד ב צד ולראות מהו הדבר
ומה שונה.
אבל הם די מעצבנים הזה דומה.
אם אתה זוכר מה איות אפילו נראה כמו,
למרות שאתה לא צריך לשנות את קובץ זה,
זה די דומה מבחינה מבנית עם רק כמה
שינויים פה ושם.
>> אז זה רק אומר שזה די פשוט להמיר איות
מC ל- PHP.
אבל במילון, יש משהו אפילו יותר משכנע.
תן לי להמשיך וליצור קובץ dictionary.php שלי.
אז מעט שונה שב אנחנו קוראים לזה .php במקום .ג.
כיוון שמדובר בקובץ PHP, אני do-- מעט annoyingly-- יש לי
כדי להתחיל את הקובץ עם תג כמו שphp.
ואני הולך קדימה ולהגדיר כמה פונקציות.
פונקציה שנקראת צ'ק, שהוא הולך לקחת במילה כמו לפני.
אבל טענה זו של אצטרך דולר
לחתום כי אנחנו, שוב, באמצעות PHP.
פונקציה נוספת מ dictionary.c היה עומס
וזה לקח בשמו של מילון, אז אני אקבל תפקיד שמוכן ללכת.
>> עוד אחד בdictionary.c היה מה?
גודל היה אחד הרגעים היפים ביותר ב, ב לפחות אם גדלת כמה משתנים בסביבה.
כך גודל פשוט צריך לחזור משתנה.
ואז היה לפרוק.
>> אז היו ארבעה אלה פונקציות בבעיה להגדיר 5
זה שהיית צריך ליישם ב כמה מבנה נתונים או מבנים.
אז הבטחתי שב PHP, אנחנו יכולים להכריז
טבלת חשיש, למשל, כל מה שבקלות רבה יותר.
למעשה, אם אני רוצה שולחן חשיש, אני רק הולך כמו ש
ויש טבלת החשיש שלי.
וזה הפתק, זנב לחבורה, שעזבנו את בפעם האחרונה.
ואתם יודעים מה, אם אני רוצה משתנה לגודל, גם,
זה אחד זה לא הכל שונה מC,
אבל אני הולך להמשיך ולעשות את זה.
ושים לב לא סוג הנתונים.
ואני אחזור מאוחר יותר ו בעצם להוסיף כמה הערות כאן.
אבל מה עם עומס?
>> אם מילון סימן דולר הוא שמו של הקובץ שלי
ואני דווקא רוצה לטעון מילות לשולחן הזה עכשיו,
אני באמת יכול לעשות משהו פשוט למדי.
One-- וזה minorly annoying-- ב- PHP,
אתה צריך לציין בתוך של פונקציה אם אתה
רוצה לגשת לחלק גלובלי משתנה זה מוגדר מחוץ.
>> אבל זה לא במיוחד מעניין עכשיו.
מה מעניין יותר הוא זה עבור כל לבנות שהזכרתי בפעם האחרונה.
ומתברר שPHP יש פונקציה קובץ בשם מטרתו בחיים
הוא לפתוח קובץ ולקרוא ב כל הקווים שלה למערך
ולמסור אותם חזרה ל.
>> כלומר אני יכול לעשות מילון כך כי עכשיו ביעילות כאשר אני קורא קובץ,
זה הולך להחזיר לי מערך של מילות מהקובץ.
זה לא כל כך טוב.
זה עדיין הולך להיות קו מילים, ליניארי משהו.
אבל אני יכול להמשיך ולחזר על כל אחת ממילות אלה באמצעות
תחביר שראינו בפעם האחרונה לזמן קצר.
ואתה רואה את זה יותר בPSET הקרוב.
>> אבל עכשיו יש לי iterating לולאה על כל מילה במילון.
ועל כל איטרציה, זוכר אני קורא את המילה הנוכחית "מילה."
וכל זה הולך לקחת ל לשים מילה למילון זו
הולך להיות מילת ניחוש "נכון."
זה הוספת הפונקציה שלי.
זה פונקצית העומס שלי למילון שלי.
עכשיו זה קצת לרמות, כי, אתה יודע מה, יש למעשה
קו נטוי n של בסוף המילים שאני כנראה צריך להיפטר ממנו,
אבל זה לא בעיה, כי PHP יש קוצצים פונקציה שנקראת שפשוטו כמשמעו
צלעות את הדמות אחת ממש בסוף.
אז אין בעיה.
אנחנו כבר הלכנו קדימה ולמעשה קיצר שרק זה.
ועכשיו אני כנראה צריך לעקוב אחר של גודל, אז בואו לפחות לעשות זה--
גודל ++.
אני יכול לעשות את זה כמו קודם.
ואז זה כנראה הולך עובד בסדר גמור, כך שנחזור אמיתי.
עשה.
PSET 5.
>> [שחוק]
>> דוד י מלאן: אישור.
אנחנו הולכים לעשות את זה שוב עם PSET הבא, מדי.
אז מה לגבי גודל?
ובכן, זה אחד בתקווה הוא על כפי שהיית מצפה בפעם האחרונה,
למרות שאני חייב לעשות הדבר הגלובלי המטופש הזה.
זה רק חפץ מ העיצוב של השפה.
>> אבל הבדיקה היא קצת יותר מעניינת.
אז אם עברתי בדולר ראשון לחתום מילה, אני
רוצה לקבל גישה ל כי שולחן משתנה גלובלי.
ועכשיו אם אני רוצה לבדוק אם מילה היא שם,
אני פשוט יכול לומר אם זה נכון ש הבא מוגדר בטבלה,
אז קדימה והחזרה אמיתי; אחר, בתמורת שווא.
עשה.
החצי השני של PSET 5.
>> בסדר, אז שוב, אני חיתוך כמה פינות.
למען הגינות, אני כנראה צריך להשקיע עוד כמה שניות
ביישום זה.
ואני בטח לא צריך ללעוג כל שעות לך לשים על PSET כל כך הרבה.
אז strtolower היא פונקציה.
אקזיסטנציאליסטי דומה משהו ב- C, לפחות לדמויות,
אבל PHP של לי גרסת מחרוזת שלמה.
>> זה הולך להכריח את כל מה ש לאותיות קטנות, שחלק מכם
אולי היה עושה לcanonicalize מה אתה מעמיד את במילון שלך.
ועכשיו אתה יכול לעשות את זה ב- C, גם.
אין לזה שום קשר עם PHP.
>> אבל כל זמן שיש לך מצב בוליאנית,
כמו משהו על קו 10 שם, וזה רק
הולך להעריך לנכון או שקר, ואם אחר באופן ברור
חוזר אמת או שקר, שיכולתי פשוט באמת לעשות יותר סקסי
ופשוט לעשות משהו כזה.
כך שיש פונקצית הבדיקה שלי.
נכון אם בוליאנית, מחזיר אמת או שקר,
בואו פשוט נחזיר אותו מייד.
>> ויש כמה שיפורים אחרים אני יכול לעשות פה ושם.
לפרוק Load--, דרך אגב, שזה נעשה.
מה לעשות שם.
מאז בכל הזיכרון ב PHP ושפות רבות אחרות
הוא למעשה הצליח לך.
אז אילו בC, כ שלמדת בכאב,
כל דבר או שאתה malloc או calloc להקצות מחדש, אתה צריך לשחרר את עצמך.
כל דבר שאתה fopen, אתה צריך fclose, כך שמשאבים משוחררים סופו של דבר
וכלים כמו Valgrind לא שמתי לב ולא מתלונן,
וזה דבר טוב לרוץ עליהם.
>> אבל אין ספק, שחייב להיות איזשהו מלכוד, נכון?
אחרת, אנחנו סוג של בזבוז חבורה שלמה של שבועות.
אז יש כל מספר של סיבות למה אנחנו סוג של לקחת מסלול זה,
אבל יש trade-off.
נכון, זה היה נושאיות.
>> אז מה עלול trade-off כאן נע, מC ל- PHP?
מרגיש כאילו כל לנצח עד כה מלבד קצת כיעור כאן או שם.
כן.
מה זה?
>> תלמיד: [לא ברור] זיכרון.
דוד י מלאן: מהירות.
אישור.
ובכן, המהירות שלי הייתה די מהירה.
נכון?
אבל מהירות ביצוע של התכנית?
אוקיי, אז זה נקודה טובה.
>> אז כפי שזה יקרה, אני מראש תשמיע את שניהם פתרון נסה, אחד
היה לי על הלוח הגדול היה פתרון מבוסס ניסיון,
ויש לי שבמדריך זה כאן.
אז ברגע, שאני יכול להמשיך ו להפעיל את זה על המלך ג'יימס התנ"ך,
להכות על Enter.
וזה נכון בתקווה יישום בסוף,
נותן לי זמן בסך הכל של 0.38 שניות של
דוגמא שרירותית אחת.
>> ואם אני עכשיו נכנסתי לזה חלון מסוף שני
כאן המקום שבו נפתח gedit ראשון, תן לי לי ללכת לcode-- היום שבו, שוב,
במדריך זה here-- ו תן לי ללכת קדימה ולהפעיל איות.
אז רק שיהיה ברור, זה הוא גרסת PHP.
אני פשוט מראה את החלק העליון שלה כאן.
>> אז אם אני עושה את האיות של CS50 טילדה 5 טקסטים PSET, המלך ג'יימס, להיכנס.
זה עדיין מהיר יותר מכתיבה זה ב- C, אבל הזמן הכולל
הוא, הודעה, 0.93, ואילו שלי יישום מבוסס C היה 0.38.
אז זה הבדל לא טריוויאלית.
>> וזו רק בקובץ אחד.
אם היית מפעיל את שני תוכניות מול הלוח הגדול
ויש חבורה של תשומות כל נבדק, זו הייתה ללא ספק להוסיף עד.
ואם היו לנו ערכות נתונים גדולות עוד יותר, זה, יותר מדי, הייתי מוסיף את כל יותר.
אז כן, משלם מחיר כלשהו מהירות הוא אכן המקרה.
מה עוד?
כן?
>> תלמיד: כמות שימוש זיכרון RAM.
>> דוד י מלאן: הסכום של שימוש זיכרון RAM.
אז לא לתת שנייה אחת חשב בעת כתיבת PHP זה
גרסה עד כמה זיכרון הייתי משתמש בה.
אני דוחה לחלוטין שלPHP עצמו ומי שכתב תכנית ש.
וזה יכול להיות בסדר, אבל אם אני ממש ממש
אכפת לסחוט כמה שיותר ביצועים מתוך התכנית שלי או מאתר האינטרנט שלי
או מתוך מה שכלי אני בונה, אולי
PHP, אכן, הוא לא בשפה הנכונה.
>> ולמעשה, זו הסיבה, ל למשל, servers-- אינטרנט רב
התוכניות בפועל ש לשרת את content-- האינטרנט
לא כתובים ב- PHP או בפייתון או רובי.
הם כתובים, כמו עכשיו אתה תעשה עם PSEt 6,
ב- C, כך שאתה יכול לסחוט כל טיפה של ביצועים מזה
ובאמת לממש את שליטה העדינה תבואה על מה
קורה מתחת ל מכסה המנוע ולא רק לקחת את זה
כמובן מאליו כמה גבוה מבנה נתונים ברמה.
>> לשקול, אחרי הכל, מי ב- PHP מיושם
רעיון זה של חשיש table-- זה בעצם יותר
נקרא array-- אסוציאטיבי כראוי האם הוא או לה מושג איזה סוג
תשומות אתה הולך להיות מכניס לתוך המבנה?
אז ברור שלא, נכון?
זה כלי גנרי בערכת הכלים זה
הניתן לכל מי שרוצה כדי להשתמש בו, וכך אין ספק שזה
לא יכול להיות מותאם סופו של דבר בדיוק את מה שאתה רוצה לעשות.
>> אז אולי זמן פיתוח סחר-offs-- שונה, ביצועים עשויים להיות שונים,
מורכבות או שימוש בזיכרון, עשויות להיות שונה.
ואז מה שאתה תמצא יותר ויותר הוא שיש
הולך להיות שונה כלים למסחר.
ולמעשה למרבית סופר של פרויקטי הגמר של אנשים במעמד הזה,
תאמינו או לא, C לא הולך להיות השפה הנכונה לשימוש.
>> ואכן, אחד מהמזנונים סופו של דבר לכל סוג כזה
הוא לגרום לך לחשוב על, טוב, מה שאתה צריך לשלוף
המדף מתי שאתה רוצה כדי לפתור כמה בעיות.
ואכן, אנחנו נעבור את הגשר הזה אפילו יותר כמו שאנחנו נראים בשפות נוספות
אפילו מעבר להיום.
>> אז בואו מעבר כעת ל אולי הקשר מוכר יותר
לשימוש בשפה כמו PHP.
זה קצת נפוץ לשימוש ב בשורת הפקודה, כתיבת סקריפטים
כמו שאני עשיתי, אבל זה הרבה, הרבה יותר נפוץ.
והוא מיועד לשימוש ב הצורה של קבצים, כי בדרך כלל בסופו של
ב.php-- אבל זה לא prerequisite--
כי עצמם ליצור תוכן אינטרנט.
>> אז תן לי ללכת קדימה ולפתוח כמה דוגמאות שהכנתי מראש.
ואלה הם למעשה סוג של אמת סיפורים שבאחד הדברים הראשונים
שעשיתי אי פעם לאחר שסיימתי את עצמי CS50 ואולי, אני חושב,
שנות CS51 הוא לפניי שותפה ואני עוזר
כדי להפעיל את הביצוע עצמי הלימודים הראשונה תכנית ספורט, ש, בזמן,
הייתה השנה הראשונה הרשמה לשונה ספורט על ידי מילוי פיסת נייר,
כפי שנקרא, הליכה מעבר לחצר לWigglesworth,
והשחרור בכמה דלת הירידה של המשגיח.
ואז הוא או היא יהיה ב שלהם ואז בעצם שלח לנו דוא"ל באופן ידני
שנרשמנו לכמה ספורט.
>> אז ברור, הזדמנות לשיפור.
בימים אלה, אתה עלול להפוך לפשוט טפסים ב- Google, אך חזרה היום,
היו לנו בעצם להגיע for-- זה אפילו לא כל כך הרבה זמן להגיע ago--
לתכנות שפה שלא PHP.
באותו הזמן, זה היה משהו שנקרא פרל,
שיצא מהאופנה מאז.
אבל הרעיון הוא אותו.
>> ואני בעצם התיישבתי לנסות לנמל הולך גרסאות Perl ל- PHP,
אבל בויתור מלא, לא נתן לי כל חשבו לאסתטיקה עדיין.
אז הנה דף אינטרנט.
מקורו של קובץ.
אם אני להתקרב,, ככל הנראה, froshim0.php נקרא
רק בגלל שזה ראשון שלנו למשל בסדרה זו.
ושים לב שיש לה את מה שנראה להיות טופס HTML מכוער מאוד,
אבל צורה מעניינת משום שהיא מאפשרת
שלי לספק קלט משתמש לדפדפן.
>> עכשיו בפעם האחרונה שהיינו לנו צורה, ל מי עשיתי לנו להגיש פרמטר השאילתה שלנו,
פרמטר התור כפי שנקרא?
אז לגוגל, נכון?
אנחנו לגמרי חתרנו במוט על הרעיון של עושה שום דבר עם קלט ש.
>> אבל היום, אנחנו מתחילים לייצר תפוקה.
וההתנהגות שאני הולך לראות כאן בתחילה הוא די טריוויאלי.
דוד, אני אבדוק את מין כאן, אומר מתיוס כאן.
אני לא אהיה קפטן.
אני הולך ללחוץ רישום.
ושים לב שיש לו את כתובת האתר השתנה להירשם-0.php,
ואז יש הטקסט המכוער הזה כאן.
לא הקדשתי כל מחשבה ל העיצוב של זה.
>> אבל מה שמעניין הוא שלוש ש הערכים הועברו ככל הנראה ב.
זהו הסוג של של PHP שווה ערך לprintf--
נראה מה זה באמת נקרא בbit-- שרק מדפיס
מה שאתה עבר לתוכה.
אז זה מצביע על כך שצורה היו לפחות שלושה שדות לזה,
ואתה ראית אותי להקליד אותם.
אחד מהם היה השם שלי, אחד היה מין, אחד היה מגורים.
וקפטן אפילו לא נשלח ל השרת כי אני לא בדקתי את זה.
>> אז זה אומר כנראה, כשאתה מגיש את הדברים באינטרנט,
לא רק עושה את כתובת האתר לפעמים change-- לפעמים לא.
למעשה, שם הקובץ השתנה, אבל מה שנעדר מאת כתובת האתר
כי אנחנו לא רואים בפעם האחרונה עם גוגל.
כן?
>> סטודנט: לא מחרוזת שאילתא
>> דוד י מלאן: אין מחרוזת שאילתא.
אין משהו סימן שאלה.
אין q סימן שאלה שווה חתולים, כפי שעשינו בפעם האחרונה.
ובוודאי אין שם סימן שאלה שווה
דוד או במעונות שווה מתיוס, אז איפה שכולם הולכים?
>> ובכן, תן לי לחזור לgedit כאן ולפתוח הראשון של קבצים אלה
בvhost שלי, מארח מקומי, ציבורי ספרייה כאן ולהיכנס לfroshim0.
אז מתברר שכמעט כל דף זה הוא רק HTML.
וזה בלתי מוכר לך, אבל זה יהיה בקרוב יותר עם PSET 6
וPSET 7 וPSET 8.
אבל זה רק דף HTML.
>> והדברים המעניינים נראה שיש כאן.
תג צורת פעולה שתכונה יש לו ערך של אוגר 0.
זו הסיבה שכאשר אני מגיש זה, זה הולך לקובץ ש.
אבל שיטה היא שלאחר today-- שונה.
אז מתברר שיש לפחות שתי שיטות באינטרנט בשימוש
כדי לשלוח מידע מדפדפן לשרת.
קבל מנסח זאת ב- URL.
ההודעה מעמידה אותו במקום אחר.
ומתי ומדוע ייתכן ש באמת רוצה אתר אינטרנט
להשתמש פוסט אז במקום של לקבל, רק באופן אינטואיטיבי?
כל אתר אינטרנט.
איזה סוג נתונים יש חלף לפי מסקנה עכשיו באמצעות הודעה בניגוד
כדי לקבל, אם ראינו שני ההבדלים?
תלמיד: [לא ברור] לאבטח.
דוד י מלאן: אם אתה רוצה משהו כדי להיות בטוח.
אז תוכל להקליד את הסיסמה לאתר, כרטיס אשראי
לאתר היית סוג של תת-אופטימלי אלה
אם הדפדפן של לשים את זה ערך הפנימי של כתובת האתר.
למה?
אתה רואה את זה, שלא נראה שיש לו עניין גדול,
אבל רוב הסיכויים הם שדי לעתים קרובות ללכת רחוק מהמחשב המחשב או שימוש שלך
מעבדות, ואז מישהו אחר או אפילו שותף לדירה
בקלות יכל לגשת ולראות שמידע פרטי.
כאשר אתה שולח דואר אלקטרוני דרך האינטרנט, אתה כנראה
לא רוצה שסוף הנתונים בכתובת האתר גם כן.
ולכן יש כל מספר של סיבות מדוע אנו עשויים רוצים לשים את זה כאן.
אפילו ותקין photos--, אני לא ממש יכול דמיינו כיצד אתם היו לוקחים גרפיים,
כמו JPEG, והכניס אותו לכתובת אתר.
אתה יכול לעשות את זה.
יש דרכים לקידוד זה, אבל זה פשוט לא פשוט כמו ש.
>> אז לרשום 0 הוא למעשה מאוד משעמם.
כל זה אומר, פשוטו כמשמעו, הוא זו.
היא מדפיסה את חלק פנימי של חלק תגי HTML הבא.
יש לי תג PHP כאן מקונן בתוך של תג מראש.
"מראש" רק אומר שטקסט מעוצב מראש, מונו ברווח, כמו מכונת כתיבה.
>> Printr היא פונקציה רקורסיבית הדפסה.
ויש גם את זה דבר מעניין כאן.
ואנחנו נחזור לזה בגלל שיש לאחרים,
אבל קו תחתון סימן דולר הודעה נראית
משתנה ב- PHP שבו כל דבר אתה שולח מדפדפן לשרת
מקבל מאוחסן בשבילך.
ונראה איך להגיע ב שמידע לא עבר זמן רב.
>> אבל קודם, בואו נחזור ל דוגמא מעט שונה.
הולך לregister-- או ולא, froshims1.php,
שנראה קצת שונה.
לקחתי קצת יותר מאמץ עם עיצוב,
למרות שזה עדיין די מכוער.
אבל אני הולך קדימה והקלד "דוד" עכשיו.
זכר.
אנחנו נבדוק את "קפטן" זה זמן.
אנחנו נעשה את מתיוס.
ולהירשם.
>> והפעם זה אומר, HM, לא ממש.
בסדר, אז מה לרשום 1?
תן לי ללכת לקופה פתוחה 1 HM and--.
בסדר, אז זה , וזה מעניין
הוא קרש קפיצה עכשיו ל תוכניות מעניינות יותר.
>> שים לב שהחלק העליון של קובץ זה יש תג PHP, כמו גם כמה הערות.
ואלה, לעת עתה, הסחת דעת אז בואו פשוט להיפטר מאלה הערות
בדיוק כמו שהם בג ואני טוען עם נתח זה של קוד עם תגובה
שהקוד הזה הוא אימות ההגשה.
>> ובכן, מתברר ש משתנים כמו סימן דולר
מדגיש פוסט הם נקרא globals סופר.
הם כמו אלה משתנים הגלובליים מיוחדים
כי הם פשוט Omni-כיום זמין בתוך התכנית שלך.
ואתה יכול להשתמש בסימון סוגריים מרובע למדד לא באמצעות מספרים
כמו 0, 1, 2, 3, אבל מילים עצמן.
>> אז אתה יכול לחשוב על סימן דולר מדגיש שלאחר כסוג של טבלת חשיש
כי אתה יכול לעבור מפתח ל, בדיקה מילה שבין סוגריים מרובעים,
וזה הולך להחזיר אותך ערך שהמשתמש סיפק למעשה.
PHP יש פונקציה נקרא ריק שרק
אומר כן או לא, זה משתנה ריק או שלא.
יש לנו הברים כפולים הללו, שרק אומר או, כמו בג
>> אז למעשה, קו זה 4 הוא רק אומר אם המשתמש לא נתן שם
או לא לתת מין או לא לתת מעונות, קדימה ולהפנות אותו
או שלה באמצעות הקו הזה כאן.
אז זה קצת סתום, אבל זה רק אומר, פשוטו כמשמעו,
לחזור למיקום זה, כך שסירות המשתמש
בחזרה לכל מקום שהוא או היא באה.
אבל זה קצת לא אלגנטי שבמקודד קשה זה.
>> אבל מה אם זה אם מצב לא מעריך לנכון?
מה אם המשתמש נתן לו או שמה ומעונות ומין?
שאם מצב לא הולך להעריך לנכון,
אז אני לא פגע ביציאה בקו 7.
אז מה קורה?
וזה מה שזה מעניין על PHP.
>> אתם יכולים להוריד לתוך ומחוץ של מצב PHP, אם אפשר לומר כך.
אם אתה רוצה קצת קוד לביצוע, אתה יכול לפתוח ולסגור תג PHP
ולשים את הקוד שם כמו שעשיתי כאן.
ברגע שאתה סוגר תג PHP, השרת
הוא רק הולך לירוק מה לשים לך שם.
ואכן, זה היה חלק מ העיצוב המקורי של PHP,
לטוב ולרע, היה זה ערבוב של קוד וסימון
שפה.
ונראה שזה מאוד מוטל במהירות לתוך בלגן.
וכך יהיה לנו לעשות טוב יותר מ זה סופו של דבר, אבל רק
תבחין הקלות שבה אני תוכל למעשה לבצע קצת היגיון.
>> אבל עדיין קצת משעמם.
בואו לפתוח את גרסה שניים מהפרוש IMs, ש
כנראה מגיש לregister2.php.
אז בקובץ זה באמת קורה להיראות כמעט זהה.
אני הולך ללכת לפרוש IMs 2.
אבל בפרוש IMs 2, בואו לראות מה קורה.
>> דוד, לחץ על לחצן האפשרויות, כ זה נקרא; מתיוס, לא קפטן.
הרשם.
אתה רושמים.
לא ממש.
אה רגע, אנחנו פשוט לא דוגמא ש, לא עשיתי לנו?
בסדר, עומדים על.
אנחנו נעשה את השלושה.
ברור שמשהו עומד לקרות עם Gmail.
אנחנו נגיע לשם.
>> אז פרוש IMs 3 נראה כך.
שונה אין.
אבל כשאני עושה דוד, זכר, מתיוס, ו לרשום, גרסה שלישית ואחרונה זה
טענות, בפשטות, אתה רשומים באמת.
זה סוג של שאינו מהותי.
אבל אני טוען שעם זה גרסה שלישית ואחרונה
יש לי עכשיו מחדש בדיוק את מה ששלי שותפה ואני בניתי לIMs הפרוש
שנות תכנית לפני.
וזה היה פשוט.
לא היו שום בסיס הנתונים, אין גיליון אלקטרוני של Excel.
אבל יותר חשוב, לא היה יותר נייר
בגלל מה שעשינו עם תכנית זו היה למעשה לדוא"ל המשגיח, ש
היה מקבל בעבר את הדברים האלה באמצעות טפסים.
>> וכנראה אנחנו מתוכנתים ב כך שכאשר מישהו רושם,
המיילים חשבונו של ג'ון הרווארד proctor-- או את עצמו במקרה זה,
ג'ון Harvard-- עם הבא text-- "אדם זה רק רשום."
שם הוא דוד, קפטן הוא ריק; מין, גברי; ומעונות, מתיוס.
>> אז מה קרה שם?
ובכן, הקובץ מדובר כאן הוא register3.php כנראה.
ואם אני פותח את זה, תראה גם את הכח של קוד כזה
וגם, למען האמת, חוסר הביטחון של מערכת כמו דואר אלקטרוני.
יש לי רק ביעילות העמיד פנים ש להיות ג'ון הרווארד בדרך הבאה.
>> יש לי את תג PHP הפתוח למעלה, ש רק אומר כאן מגיע חלק קוד PHP.
כאן למטה, מסתבר שיש ספריות ב- PHP.
אתה פשוט לא צריך כולל קבצי כותרת באותה מידה.
אתה מקבל יותר עם כיור מטבח, אם אפשר לומר כך.
>> אבל הפעם בשורה 4, אני עושה רוצה ספרייה מיוחדת שנקראת
מיילר PHP, וזה משהו שאתה יכול להתקין בחינם במערכות רבות.
כאן אני מאמת ההגשה רק
על ידי בדיקה האם המשתמש נותן לי שם, מין, ומעונות.
ואם כן, קדימה, מופע מיילר.
>> אתה יכול לחשוב על זה כעל שורת קוד שפשוט מקצה.
זה כמו malloc, אבל זה קצת יותר סקסי
שבאתה מזכיר לא רק malloc וחלק מספר גנרי.
אתה אומר לי אחד מהם, לתת לי אחד חדש של אלה.
>> ואם אתה כבר מתוכנת ב Java או C ++ או בשפות אחרות,
ייתכן שראית את זה.
אבל הקצר שלו, אם , קו לא מוכר זה
מכניס את דואר סימן דולר struct מיוחד הנקרא
אובייקט שמובנה ב פונקציונלי דוא"ל.
ואכן, לב ותחביר דומה.
>> זה לא מצביע, כשלעצמו.
PHP פשוט משתמש באותו התחביר.
קו זה אומר שימוש העברת דואר אלקטרוני SMTP--
פרוטוקול, שהוא רק פרוטוקול המשמש לשליחת דואר אלקטרוני.
זה המפרט שימוש שרת SMTP של אוניברסיטת הרווארד, ש
הוא איפשהו כאן בקמפוס.
>> שזה אומר מה TCP מספר יציאה לדבר,
ואני פשוט הבנתי שעל ידי googling או על ידי לשאול את מחלקת התמיכה.
ולאחר מכן בגלל הרווארד משתמשת בכמה אבטחה במערכת על server-- הדואר
לפחות כדי להצפין תנועה בינך לבינו,
למרות שכל אחד יכול לשלוח לit-- אני הולך להפעיל את פרוטוקול TLS
לשמירה על זה מאובטח.
>> אבל זה שבו דברים לקבל קצת מפחיד.
אני יכול רק באופן שרירותי להגיד שאני jharvard,
ואני יכול רק באופן שרירותי שלח את עצמי כאן.
ואז אני יכול לציין נושא עם הקו הזה כאן.
>> וזה פשוט נראה מכוער, אבל זה פשוט חבורה של שרשור.
מתברר PHP יש סמל סופר שימושי, כמו כמה שפות, מפעיל הנקודה,
שרק, פשוטו כמשמעו, משרשר מחרוזת אחרי מחרוזת אחרי מחרוזת,
ואין לך לmalloc או דמות מתוך האורך הכולל של המחרוזת.
אתה פשוט עושה את זה.
ואכן, בגלל שאני שרשור בכל הדברים האלה עם נקודות אלה,
זו הסיבה שאני הדואר האלקטרוני נשלח נראה כפי שהוא עשה.
>> ואז לבסוף כאן, אני שולח דואר.
אז אם זה שקר, אני רק הולך למות,
שהיא פונקציה שרק מדפיס למסך כמה הודעת שגיאה.
אבל זה, למעשה, קריאה לפונקצית send.
אחרת, אם כל זה לא מצליח, זה מפנה אותי בחזרה לכאן.
>> ולמה אני לא רואה את זה אני רשום באמת?
ובכן, זה קרה ממש כאן.
אז אני מביא את זה ל כמה סיבות.
>> אחד, זה בדיוק איך אם לבנות איזה אתר לפרויקט גמר
או לעולם האמיתי, זה הוא איך אתה שולח תזכורות בדואר אלקטרוני
ללקוחות שלך או למנויים שלך.
זה איך אתה שולח תזכורות סיסמא.
זה איך אתה שולח הודעות לאנשים שיש להם פייסבוק חדש
הודעה תלויה ועומדת או משהו כזה.
>> אבל הוא גם מדבר ל העובדה שזה יכול
היה טוב מאוד מ דווין או כל אחד אחר.
ואני אומר מסוג זה בחיוך כי אני
די בטוח מה קורה ב כמה מהמוחין שלך בשלב זה.
אבל זה אחד מאותם יעשה מה שאני אומר, לא כמו שאני עושה סוג של דברים,
בגלל זה טריוויאלי ל לזייף מיילים כאלה.
אבל כפי שאתה יכול לראות או לקרוא בCrimson,
לאחרונה זה גם די טריוויאלי לאנשים
לאתר אותם חזרה לחלק מוצא.
ושואל אותי כמה זמן, אולי בארוחת הצהריים CS50, איך אני ראשון
התוודע מקרוב מאוד כמעט לשנים רבות עורך הלוח
לפני כאשר גיליתי איך האינטרנט עובד.
אז בכל מעט case-- לאחר לוח אד עשה.
>> אז בכל מקרה, יש כל חבורה של globals סופר,
כפי שהם מכונים כאן, שאחד מהם אנו saw-- פוסט תחתון סימן דולר.
יש מקבילה בשם גט, מקום שבו דברים מכתובה URL
בסופו הולך.
ויש חבורה של אחרים כל, מושב too-- ושרת ועוגייה.
אנחנו נחזור ל עוגייה בפעם אחרת,
אבל פגישה היא סוג של מגניב משום שזכות now-- עד now--
כל מה שעשינו עם דפדפן אינטרנט הוא סוג של חסר אזרחות, אם אפשר לומר כך.
אני יכול ללחוץ סביב, גישה קבצים בשרת, משהו
קורה על המסך, אבל אז החיבור נסגר.
Internet Explorer או סמל פיירפוקס מפסיק להסתובב
ואתה פשוט רואה מה ש כי דף האינטרנט מכיל.
>> אז HTTP הוא חסר שב ברגע שזה הופך את חיבור,
יקבל קצת נתונים, זהו זה.
לא עוד קשר, שלא כמו סקייפ, שלא כמו FaceTime, Gchat כלשהו בניגוד, ש
שומר מתמיד חיבור לשרת.
האינטרנט הוא ביסודו מנותק, אם כי אנחנו
רואה לפני זמן רב איך אנו יכולים לדמות דברים
כמו צ'אט של פייסבוק וGchat כלשהו, אשר לשמור illusion--
או בעצם לעשות לשמור חיבור קבוע באמצעות
טכנולוגיה מודרנית יותר.
>> אבל אם אני הולך ל, אומר, counter.php, זה עוד דוגמא פשוטה,
כפי שנראה, שחושב כיום ביקרתי בזמן אפס האתר.
אבל אם אני פשוט לטעון את הדף, זה איכשהו יודע שהייתי כאן לפני.
אם אני לטעון מחדש שוב, זה יודע שהייתי כאן לפני.
ושוב ושוב ושוב ושוב.
>> אז יש כמה בתוספת-plussing קורה, אבל הודעה
הדבר הקטן ספינים אי פעם כל כך בקצרה למעלה ולאחר מכן מתנתק,
אז זה לא שיש לי קבוע חיבור למכשיר שלי.
ובכן, אם אני נכנסתי לcounter.php, שם לב כמה זה פשוט.
אני קורא לזה ראשון מיוחד פונקציה שבקרוב
להתחיל לקחת כמובן מאליו נקרא תחילת פגישה.
התחל הפעלה.
>> ומושב מעתה ואילך רק הולך להיות דלי, כמו קניות
עגלה שבו אתה יכול לשים את הערכים וסוג של אמון כמתכנת
שהם הולכים להיות כאן כש משתמש שמגיע back-- שני
מאוחר יותר, שעה לאחר מכן, גם בשנה שלאחר מכן, כל עוד הוא או היא עושה לא ברור
העוגיות שלהם, כפי שאנו רואים את סופו של דבר.
ועכשיו יש לי רק אם מצב כאן.
אז אם המפתח הבא, דלפק נקרא, מוגדר בתוך
של סופר זה global-- חשיש זה שולחן, אם אתה will-- מושב נקרא,
אז קדימה, לתפוס את ערך מחושב session--
זה כמו קניות cart-- ולאחסן אותו
במשתנה זמנית בשם מונה.
>> אחרת, אם כי דלפק הערך היה לא נקבע בעגלת הקניות מה שנקרא,
רק לאתחל אותו ל -0.
לבסוף, כאן למטה, ללכת ולהחזיר לעגלות קניות או הפגישה
הערך של מונה +1.
אז מתברר שזה here-- מיכל מיוחד
אשר, שוב, הוא אחד הקשורים אלה מערכים, מערך שאתה יכול מדד
במילים במקום אחר מספרים נמשך גם לאחר שהמשתמש יוצא משם.
שוב, אני אחזור לדף החברה.
זה היה רגע או כך.
אבל הוא זוכר שיש לי היה כאן 19 פעמים בעבר.
זהו ביקורו ה -20 שלי.
>> וכך זה הולך להיות מפתח ל יישום כל אתר אינטרנט שזוכר
שאתה מחובר, כי אתה מכניס משהו מילולי בסל הקניות שלך
לקנות או שיש לך כמה מספר ההודעות ממתין.
כל פעם שאתה רוצה לזכור מידע,
אנחנו תראו PHP ש, כמו כמה שפות אחרות,
מספק לנו את האשליה הזאת של מדינה למרות, כפי שתראה בPSET 6,
כפי שאתה עושה בקשות HTTP מצד לקוח לצד שרת, זה הכל.
ברגע שאתה מקבל את זה בחזרה תגובה, אין דבר יותר
חוזר מהשרת כברירת מחדל.
אבל אנחנו תראו איך לעקוף את זה.
>> ובכן עכשיו, בואו ננסה תנקה את זה קצת.
ראינו כמה דוגמאות שונות לשם.
אה, וכמו בצד, ל אלה מוכרים או לא מוכרים,
הסיבה ש דוגמא הפרוש IMs הלכה
מהתבוננות באמת מכוער לslightly-- גם,
עדיין ugly-- למעט פחות מכוער אם כי עדיין מכוער
משום שאם אנחנו מסתכלים בקוד המקור כאן,
מתברר שיש לי זה בחלקו העליון של הקובץ.
>> מתברר שbootstrap הוא אחד מרבים ספריות זמינות באופן חופשי בחוץ
שקיימות לא לשפות תכנות תמיד, אבל לCSS או JavaScript ל
או HTML או כל מספר השפות.
>> והאנשים האלה here-- יצא במקור
של Twitter-- רק צריכים חבורה שלמה של סגנונות.
זה קובץ מאסיבי כאן שמישהו כתב,
או של מישהו כתב, לאורך זמן ש מציין צבעים ועיצוב
ומה לא, כך שאני יכול סוג של ללוות התחביר שלהם
ולא צריך להבין איך להניח את טופסי.
זה גם minified כך שיכול מחשב
הבנת את זה אבל לא בהכרח אנושי.
אז זה בדיוק למה את הסגנון יש השתנה.
>> אבל בואו עכשיו לעשות טוב יותר מבחינת עיצוב,
כי אם נשארו למטה הכביש הזה יותר מדי זמן,
הקוד שלנו הולך להתלכלך ומבולגן.
אז בואו נתמקד בדוגמאות אלה כאן.
האחרון להיום.
>> אז הנה הוא סופר פשוט גרסת 1.0 של אתר האינטרנט של CS50.
יש לו רק קישורים ל הרצאות ולימודים,
וזה שימוש שרשימה לא מסודרת tag-- תג UL שהשתמשנו בפעם האחרונה.
ואם אכן, אם אני לפתוח צפה במקור דף,
אתה תראה שזה הוא באמת, HTML ממש פשוט.
ואכן, על אף שזו קובץ PHP מתחת למכסת המנוע,
זה עדיין רק לירוק מתוך HTML רק לעת עתה.
>> אז אם אני לוחץ על הרצאות, אנחנו רואים את זה קורה.
ואם אני לוחץ על שבוע אפס, אנחנו רואים את זה.
ואם אני לוחץ על יום רביעי, אנחנו רואים את זה.
וזה כנראה היה PDF של שקופיות מאותו היום.
כל מה שעשיתי הוא קישור עם תג עוגן לכתובת אתר זו כאן.
>> אז זה רק לומר שזה די גרסה פשוטה של ​​אתר האינטרנט של CS50.
בואו לראות איך זה מיושם.
אם אני הולך לספריית mvc0, אנחנו תראו כמה קבצים.
אחת מהן הוא README, כך שאם חלק מזה הוא מהיר מדי,
רק אתה יכול לחטט יותר נינוח מאוחר יותר.
והודעה לכאן הוא קובץ index.php.
מתברר שאם אתה בעצמך, האדם,
לא תציין את השם אחרון ב כתובת URL, שרת האינטרנט, בדרך כלל
infers כמה שם ברירת מחדל עבורך.
משהו נקודת מדד בדרך כלל ברירת המחדל.
>> אז בגלל זה לפני רגע כשביקרתי את כתובת האתר הזה כאן,
לא שם קובץ, אין קובץ סיומת, אין התקופה ב- URL.
זה פשוט ידע איכשהו באורח פלא לחפש index.php.
זה פשוט כנס.
אפשר לקרוא לכל דבר.
>> אז אם אני עכשיו הולך ל index.php, תראה
ש, indeed-- בואו להיפטר מההערות
כאן בגלל שיש באמת שום דבר מעניין לit--
זה פשוט קשה מקודד HTML.
אז זה עולה בקנה אחד, אם כי, עם הטענה שלי
שאתה יכול להתמזג HTML ו- PHP.
אין בפועל תכנות היגיון כאן.
>> וקבצים האחרים הם די הרבה רק לא מעניין כ.
זה פשוט קשה מקודד-שבוע אחד כאן לשבוע מ 'ושבוע w,
ליום השני ורביעים.
ואז אם אני פותח את השבוע אפס, שם לב שזה כמעט זהה.
>> וזה סוג של אוכל מוכן מפתח.
שים לב עד כמה מיותר זה.
קבצים אלה בקושי לשנות, ובכל זאת אני משכתי אחד מההעתק / דבק עבודות אלה
שבו לקחתי file-- אחד כנראה בשבוע zero-- העתיק אותו
כאשר שבוע אחד בא, וצבט כמה ערכים.
אנחנו כנראה צריכים להיות מסוגלים לעשות יותר טוב מזה.
>> אז בואו נחזור עד MVC ולהיכנס לגרסה אחת.
ושים לב שיש לי כמה קבצים, משום מה
היה משותף לכל אותם התיקים רק רגע ago-- אם אני חוזר לגרסה 0,
בואו נחזור למדד, ורק postulate--
ברגע שאני להיפטר מcomments-- איזה חלק של דף זה
הוא ככל הנראה בכל אחד מהקבצים שלי?
פשוט תקרא את זה.
איזה קווים משוכפלים כנראה בכל אחד מהדפים הללו?
כן?
>> תלמיד: [לא ברור].
>> דוד י מלאן: 1 עד 9.
כן, בהחלט.
1 עד 9, למעט אולי 8 משנה קצת, מפני שCS50
הופך הרצאות או שבוע אפס או משהו.
אבל כמעט זהה.
אז כל הדברים האלה הוא פשוט סוג של להעתיק ולהדביק.
ויש כמה קווים אחרים שאני יכול לחשוב
של שהם כנראה זהים בכל הקבצים.
>> תלמיד: 12 ו -13.
דוד י מלאן: כן.
בטח, 12, 13, ו -14 ככל הנראה, רק בגלל שהדברים המעניינים
קורה על קווי 11 ו -10, כך שזה היה נראה.
אז בואו נסתכל על גרסת 1, אשר מנסה לשפר את זה.
בגרסת 1 של example-- MVC זו אנו להסביר מה MVC אמצעים בmoment--
אם אני נכנסתי למדד, זה סוג של נראה קצת מבלבל עכשיו.
זה לא ממש פשוט כמו שלפני.
>> אבל ברגע שאתה מתחיל לקרוא אותו בזהירות, זה
די פשוט מה שהיא עושה.
כנראה קו 1 ו קו 8 החליף
כל הדברים שאתה פשוט identified-- אם כי רק למען סדר טוב,
עזבתי את ULS שם רק במקרה מסוים לא היו לי ימים רשימה של דברים.
וכך דורש הוא כמו סוג של קילו לכלול בעותקי C. זה ומשחות
התוכן ביעילות ממש כאן בקובץ זה.
>> אז בheader.php, כפי שאתה שמשתמע משמו,
הולך להיות הכותרת של הדף.
זה סוג של יתומים כאן.
יש לו רק את החלק העליון אליו, אבל אין יותר תוכן בהמשך.
>> אם אני מסתכל על כותרת תחתונה בינתיים ו, שהיה הקובץ האחר mentioned--
זה אחד אפילו פחות מעניין, אבל שוב, זה משותף לכל דבר.
אז זה תחתונה.
זה הכותרת.
זהו הקובץ זה שינוי, אז למה לא
מנסה לפרק לגורמים את את המכנה המשותף עם שתי שורות אלה כאן?
>> אבל אנחנו יכולים לנקות את זה קצת יותר.
אני הולך קדימה, לפתוח את הגרסה שתי שבו
אנו רואים שיש קובץ חדש, helpers.php.
נצטרך לראות מה שהוא ברגע.
בואו נלך למדד, כפי ש נקודת כניסה כמו קודם.
>> ועכשיו שמתי לב שאני דורש helpers.php, לא כותרת עליונה או תחתונה.
אבל עוזרים הוא כמו סוג של helpers.c וhelpers.h מPSET 2
או PSET 3 מזמן כאשר אתה בעצם לא לחפש ולמצוא עבור PSET ש,
והיה לך את כל הקוד שלך למיון וחיפוש בקובץ נפרד.
זה מה שקורה כאן.
>> ועכשיו קו 3 נראה קצת שונה.
וזה רק קו אחד.
כדי להפוך את זה אפילו יותר ברור, אני רק יכול
עושה זאת כדי להיות סגנונית עקבית עם כל דבר אחר שעשינו.
אבל זה לא באמת לשנות את הפונקציונליות.
זה רק שורה אחת של קוד אמיתי.
>> ככל הנראה, יש פונקציה נקרא למקום להבהיר כותרת,
וזה שבו דברים לקבל די חזק.
שים לב בתוך שהסוגריים שלה מה קטע של תחביר אחר?
זה כנראה קצת קשה לומר, אבל לב יש-- אני אשים קצת לבן
חלל.
יש סוגריים מרובעים.
>> וסוגריים מרובעים שראינו לפני קצת בהקשר של מערכים אסוציאטיביים,
אשר, שוב, כמו שולחנות חשיש.
ואם אתם חושבים עכשיו לC, סדר טיעונים לפונקציה
יש תמיד להיות אותו הדבר.
אתה צריך לזכור מה להורות x is--, y, z או z, y, x--
ואתה צריך תמיד לספק להם באותו סדר או לחפש אותם
אם שכחת.
>> אבל זה נראה דרך חכמה של העברת ערך מפתח שרירותי
זוגות לפי הכותרת היא השם ויכוח במקרה זה
וCS50 הוא הערך שלה.
והעובדה שיש לי סוגריים מרובעים אלה
כאן אומר שאני יכול גם לעבור במשהו
כמו בשבוע שהוא 1 או 0 או 2 או 3.
אז יש לנו להגדיר להם פרמטרים פונקציה זו באופן כזה
כי זה יכול לקחת מספר רב של תשומות, אך לעת עתה זה רק אחד.
>> אם אני עכשיו הולך לhelpers.php, שים לב למה שהוא עושה.
זה קצת פונקציונאלית חדש,
אך לעת עתה רק לקחת על אמונה שזה
התחביר שבה אתה להגדיר פונקציה ב- PHP.
אתה ממש אומר פונקציה.
לא תציין תמורה הקלד, וזה עולה בקנה אחד
עם הפירוט משתנה קודם לכן שבו אתה לא ממש חזק להקליד.
>> זה רק מציין כי, כברירת מחדל, זה
לוקח אסוציאטיבי מערך כטיעון.
ואתם יודעים מה?
אם המשתמש אינו עובר אחד ב, להניח ערך ברירת מחדל.
>> זוהי תכונה שC אין בשבילנו, וזה נחמד, כי עכשיו
הנתונים, גם אם אתה לא לתת לו שום דבר,
הולך להיות מערך אך ריק אחד.
ואגב זה, תמצית פשוט עושה משהו פאנקי
לאן זה לוקח את כל המפתחות מזה מערך אסוציאטיבי, את כל הדברים
אתה יכול לשים בסוגריים מרובעים, ויוצר משתנים מהם
כך שניתן לנו בסופו של גישה להם בfootet.php וheader.php.
זה קצת מופשט, אז תן לי להצביע על כך.
>> בindex.php, שמו לב שאני עובר בזוג ערך מפתח של כותרת
עם ערך של CS50.
אם אני מסתכל עכשיו בhelpers.php, לב RenderHeader ש
שמחלץ את הנתונים שאני מעביר ב, ולאחר מכן דורש header.php.
מה שעשיתי הוא סוג של הגבר עני יישום עכשיו מאלה.
>> אם אני פותח את header.php, הודעה שאין לי יותר קשה
מקודד את המילה CS50 בקובץ כותרת זו.
שמתי את זה יש להודות להחריד פונקציה בשם, תווים מיוחדים HTML,
שם.
אבל שים לב מה שעשיתי.
יש לי בתבנית HTML.
אז יש לי פתוח בראש וכותרת פתוחה.
>> ואז בתוך ופתוח של הכותרת קרובים תגים, יש לי קצת קוד PHP.
וזה נחמד, אבל של תחביר, שרק אומר הד החוצה.
זה פשוטו כמשמעו זה-- הד following--
אבל זה יותר סקסי לכתוב.
הד את הכותרת זה כבר עבר ב.
>> אבל מה אתה חושב HTML char המיוחד הוא על כל,
במיוחד אם יש לך קצת ניסיון HTML לפני?
מה דמויות יכולה להיות מסוכן לעבור לדף
שבו אתה יוצר באופן דינמי דף האינטרנט עם קוד כזה?
תן לי ללכת לקובץ זה, גרסה שני, ותראו אם אני לא יכול לגרום לזה.
>> גרסה השנייה היא זו.
ושים לב כל מה ש זה בסדר, עובד היטב.
אבל נניח שאני נכנסתי לindex.php ו אני צוין כי הכותרת של הדף שלי
לא CS50.
זה התראת תסריט הסוגר פתוח שלום עולם, ציטוט אחד קרוב,
קרובים סוגריים, פסיק, הסוגר פתוח, תסריט נטוי.
>> תסריט, שכן אנו סופו של דבר לראות, הוא תג
כי אתה יכול להשתמש בו כדי להשתמש אחר שפת תכנות בשם
JavaScript בתוך דף אינטרנט.
ועכשיו שים לב להיגיון כאן.
הנה מפתח נקרא כותרת.
הנה זה ערך ארוך מטורף עכשיו.
>> אבל אם אני הולך לעוזרים בכל דף בנפרד או לייתר דיוק, בעמוד הכותרת,
אני מתקשר בפונקציה זו בכותרת שראשונה.
אז אם אני עכשיו לטעון מחדש את הדף, אני רואה את זה, שנראה מגוחך,
אבל זה בטוח.
זה פשוט נראה טיפשי.
>> אבל נניח שבמקום שכחתי את זה.
וזכרו את הדברים, מספר שאינו אפס שלך לא ישכח לעשות את זה
ותקבל כמה חרוץ סטודנט או חבר מתקרב
לך ביריד CS50 או בעילום שם בלילה לחטט באתר שלך
ובעצם הזרקת קוד וללא הידיעה אותך לאתר שלך
איכשהו.
>> כי אם אני פשוט לירוק הכותרת כאן ושם ב
there-- גם, אם כותרת ממש נראה כך וPHP
כשפה שיכול לירוק מתוך טקסט של שפות אחרות,
זה הולך ממש להחליף תג זה עם,
כמובן, מה ששמתי את במקום אחר.
>> אז אם אני עכשיו הולך כאן וטען מחדש לאחר ביטול מנגנוני בטיחות אלה,
עכשיו יש לי שלום עולם כאן.
עכשיו זה לא כל כך גדול של להתמודד, אבל אתה יכול לעשות משהו
קצת יותר זדוני כאן, כמו שיש
tags-- אחר כפי שנראה ברגע שאנחנו מבלים יותר זמן בJavaScript-- כמו מיקום
נקודת href מקבל, ציטוט, סוף ציטוט, HTTP business.com, אבל ההפך מזה
מהיום האחר.
ועכשיו אתה יכול לגרום לאינטרנט הדף ללכת למעשה באופן מיידי
לדף אינטרנט זה כאן.
>> ובעצם, אני לא רוצה אפילו ללכת לbusiness.com
כי אני לא רוצה ליודע מה זה.
אבל זה, מדי, יפעיל את קוד להיות מוזרק לתוך דף זה.
אז זה רק למרות שאומר ש אנחנו מציגים סופר מוקדם על כמה
של מבנים מורכבים יותר אלה, זה כל כיוון סוף לוודא
שהקוד שלך הוא לא לניצול.
>> אז עכשיו גרסה שלישית כאן.
זה מתחיל להיות קצת יותר מסובך.
אני לא ממש like-- הצד האנאלי שלי
הייתי מקבל קצת מעוצבן על ידי עובדה שיש לי פונקציה שנקראת
RenderHeader וRenderFooter שהיו כמעט זהה.
אז עלתה בדעתי, למה לא אני parameterize פונקציות אלה
לאחד נקרא לדקלם, יש לה לקחת טיעון שני
כמו השם של התבנית, סופי לrender-- או כותרת עליונה או תחתונה?
ולאחר מכן אופציונלי, אם אני רוצה לעבור בכמה זוגות ערך מפתח
כמו שאני עושה על התואר ל כותרת אבל לא לתחתון,
אני יכול לעשות את זה.
>> ואז עכשיו אם אני נכנסתי helpers.php, זה מורכב קצת יותר.
ואני אניף את הידיים שלי ב פרטים, אבל זה רק תפקיד אחד.
אז זה צעד לקראת עיצוב טוב יותר.
>> אנחנו יכולים לקחת את זה צעד אחד קדימה.
אם אני נכנסתי לרביעי שלי גרסה של זה, שם לב עכשיו
שאני עושה משהו אפילו יותר די נסתר.
ואני יודע שזה הרבה לקלוט בבת אחת,
אבל אנחנו פשוט סוג של ניקוי דברים.
עכשיו אני שם את העוזרים שלי קובץ לתיקייה הנקראת
includes-- רק שרירותי שם שבו אני רוצה לשים את הדברים
כי אני רוצה include-- ולאחר מכן שאר זה זהה.
>> אבל אם אני מסתכל עכשיו בgedit, הודעה שאני כבר הצלחתי להיפטר
כל קבצים אחרים אלה ולי העביר אותם, למשל, לכאן.
ולאחר מכן בתבניות, יש לי את זה כאן, מדי.
ואז זה כל פעם לכיוון אחר צעד שימוש בתבנית עיצוב הרבה יותר טובה.
ואנחנו מהר מאוד הולך להתרחק
מפונקציונלי ברירת המחדל של PHP, שהתחלנו כאן עם,
שבו אתה פשוט מתמזג PHP, ו- HTML שלך, וה- CSS שלך,
ואתה פשוט לירוק אותו ואתה הולך על הדרך שלך.
זה לא הולך להיות מאוד לתחזוקה.
בדיוק כמו ב- C, שהתחלנו להשתמש מספר קבצים ופונקציות מרובות
והדברים פקטורינג שיצא.
אנחנו נעשה את אותו הדבר כאן.
ואכן, בחמישי ואחרון גרסה כאן, עשיתי דבר אחד אחר.
אתה יכול אפילו להשתמש בנקודת נקודה, אשר, שוב, הוא פשוט ספריית האב.
כדי להיות עוד יותר ביטחון מודע, כי אם אני מסתכל על ההקשבה
כאן לחמישי וגרסה סופית, הודעה שיש לי מדריך אחד כאן בשם
, ולאחר מכן על הציבור אותה רמה, אם אפשר לומר כך,
יש לי כולל ותבניות ולאחר מכן שreadme קובץ טקסט.
>> והסיבה שאני כבר מובנה זה כמו זה-- וכל כך הרבה אינטרנט
מארחים, במיוחד של $ 5 אלה אלה חודש או אלה 10 $ בחודש,
אם אי פעם היה לכם אחד כזה services-- מה כל כך הרבה מהם לעשות
הוא שהם פשוט מצפים ממך לזרוק את כל של הקבצים שלך לתוך ספרייה אחת,
כמו שכבר עשו עם דוגמא הראשונה זה.
>> אבל ברגע שאתה מתחיל לבנות יותר אתרים מתוחכמים שרק לאחסן
נתונים שאכפת לך וקבצים ש אכפת, בעצם ארגון דברים
בצורה נכונה ועם יותר ביטחון תודעה במוח יכול
אנחנו מתחילים להגן על כנגד כל החברים
שיש לך או או מחוץ לכיתה זו ש,
ברגע שאתה מתחיל לעשות תוכניות עצמך באינטרנט,
הולכים להתחיל לקטוף עליך ועליהם.
>> ואז אנחנו נראים סופו של דבר בעיצוב הזה.
זה רק תמונה שמתאר את הדברים הבאים.
אנחנו הולכים לשים את כולנו תכנות היגיון בקובץ אחד או יותר,
ואנחנו הולכים רק כדי להתחיל קוראים בקרים אלה.
זה מקום שבי מוחם של אתרי האינטרנט שלנו הם למעשה.
ואז אנחנו הולכים ל יש נוף, ונוף
הם פשוט כמו רק נפרדים files-- תבניות הנקראות, לעתים קרובות.
רק שיש להם אסתטיקה של הדף שלי,
מה שאני רוצה שהדף ייראה like-- הצבעים והפריסה
והעמדות של כל אחד מהמשתנים.
>> ואז יותר מעניין שסופו של הדבר יגיע ל
הוא המודל, שהוא הולך להיות פשוט המילה שאנו סטירה על טכנולוגיות אחרות
כי אנחנו מביאים ל תמונה, כמו בסיסי נתונים בפועל,
כך שכאשר אתה רוצה כדי להציל את המידע,
אתה פשוט לא לשלוח דוא"ל למשגיח שלך או לעצמך,
אתה באמת לאחסן אותו במסד נתונים שימוש בשפה אחרת, הנקראת SQL.
ואז אנחנו נצא מכאן היום ו להרים עם זה ביום רביעי
ולהציג את מאגרי מידע ולאחר מכן.
>> [השמעת מוסיקה]