[Powered by Google Translate] [סעיף 8] [פחות נוח] [נייט Hardison] [אוניברסיטת הרווארד] [זה CS50.] [CS50.TV] ברוכים באים לשניים שלנו לסעיף אחרון. בשבוע זה אנחנו הולכים לדבר על PHP, ואז בשבוע הבא אנחנו עושים ביקורת קטנה לחידון 1. אנחנו עומדים להתחיל בעמוד 3 של הבעיה מקובעת חפיסה, ואנחנו נעבוד כל הקטע של שאלות די מהר. בעמוד 3, אנחנו מתחילים לדבר על ההבדל הזה בין C ו-PHP במובן זה שPHP היא שפה דינמית מוקלדת, ואילו C הקלדה סטטי, ואף אחד לא עשה שום קידוד במשהו כמו PHP ממש מהר או Python או Ruby לפני, JavaScript? חדש לגמרי? אוקיי. כל השפות האלה שהזכרתי זה עתה שונים מאוד משפות כמו C ו-C + + וג'אווה במובן זה שכאשר אתה מצהיר על משתנה אתה לא צריך להצהיר על איזה סוג של משתנה זה, ולכן ב-C היינו תקוע לי תמיד לומר זה הולך להיות משתנה int, או שזה הולך להיות משתנה * char, ואילו עם PHP, עם פייתון, עם רובי, עם הרבה השפות המודרניות יותר האלה אתה לא צריך לעשות את זה בכלל. אתה פשוט מצהיר משתנה, ובמקרה של PHP אתה מצהיר שזה משתנה ובהקדים לי סימן $, ולאחר מכן את הסוג משתנה נקבע על ידי כל ערך שהוא מחזיק, שזה די מגניב. לשחק עם זה קצת, יש לנו מדגם קוד PHP ממש כאן בבין תגי ההתחלה וסיום. אנחנו משתמשים בסוג זה של כמו HTML, במובן זה יש לנו הסוגריים האלה כאן כדי לפתוח ולסגור. אתה רואה את זה ב-HTML. אתה תראה אותו הסוג של תחביר עם XML מדי. זה מצביע על תחילתו של בלוק PHP. ? Php זה ספציפי ל-PHP. אנחנו סוגרים את הכל ב?> גם כן. בואו לפתוח את קובץ במכשיר שלנו באמצעות כל מה שהיית רוצה. בחבילה הזאת זה אומר להתקשר dynamic.php. למען אמת, אתה יכול לקרוא לזה איך שתרצה, אבל את שם הקובץ יעלה ויהיו חשוב מאוחר יותר, כך בדיוק זוכרים את מה שאתה קורא לזה. אני הולך לעבור למכשיר, ואני הולך לעשות את ספרייה עבור סעיף 9 אני מאמין שאנחנו בבית עכשיו. וגם תלכו לסעיף 9, ואני הולך להשתמש gedit. בואו נראים, gedit, ואני הולך לקרוא dynamic.php. בום. בתוך dynamic.php, שכן מדובר בקובץ PHP ואני רוצה להפעיל את זה דרך מתורגמן PHP אני צריך להתחיל הכל מעם התגים האלה פתוחים, אז אני הולך להתחיל אלה מייד, לתת לעצמי מקום קטן בבין התגים, ואז הנקודה של התרגיל הזה הייתה לשחק עם פונקציה זו נקראת gettype, כך gettype, פונקציה זו ממש כאן. שימו לב שאין משחקים להבליט או רווח או מקף או משהו כזה להפריד את 2 מילים, לקבל ולהקליד, רק מילה אחת לגמרי. אבל מה שזה יעשה הוא אם אני עובר במשתנה לgettype, אומר var $ או x $, זה יגיד לי בסוג של פורמט ניפוי מה שמו של סוג זה הוא. אנחנו הולכים להתנסות כאן. בפרט, אם אתה מסתכל אחורה בpset המפרט יש לנו כמה קווים שונים של קוד כאן. בשורה הראשונה של קוד אנחנו לאתחל משתנים זה, $ var, להיות שווה ל7, ולאחר מכן יש לנו קו printf זה שאומר היי, var printf הוא ריק. Printf הוא אחת מהדרכים הרבות שאנו יכולים להדפיס דברים ב-PHP. לעתים קרובות אתה רואה את תפקידו ההד להשתמש במקום printf, אבל printf כולנו מכירים לאחר שהקידוד ב-C לזמן מה. מה שאתה בעצם יכול לעשות זה בוא נראה אם ​​עבודות העתקה והדבקה. אני הולך לתת את זה לנסות. אנחנו נחזור שוב למכשיר. אוקיי, ויש לנו ללכת. ומרווח הוא קצת מסריח, אבל הנה זה בא. יש לנו את הקוד הזה בפה. [סטודנטים] האם זה סגנון לא טוב לכרטיסייה זה? סליחה? [סטודנטים] האם זה מקובל לכרטיסייה זה? בסדר, אז סם שואל אם זה כנס לכרטיסייה זה או לא. בדרך כלל כן. במקרה הזה אני בחרתי שלא. בכנות, אתה תראה דברים שונים בקרב מתכנתים שונים. PHP משמש בדרך כלל לעתים קרובות בשילוב עם HTML ובשפות אחרות, ואז לפעמים ההדפסה תיראה קצת מסריח אם כניסה בתחילת PHP ותגי סיום. זה מאוד תלוי. במקרה זה העתק ודבק לא להדביק את הכרטיסיות בבשבילי, אבל זה בהחלט, כמו שאמרת, לעשות את זה ברור יותר. בסדר, אם תשמור את הקוד הזה בdynamic.php אז מה שאתה יכול לעשות זה לבוא אל חלון המסוף שבו אני צודק כאן בgedit, ולעשות את המקבילה של הידור משתמש לבצע ולאחר מכן להפעיל את הקוד שלך ב-C כל מה שאתה צריך לעשות עם קובץ ה-PHP הוא להתחיל מתורגמן PHP, שהיא תכנית קטנה בשם PHP, והטיעון שאתה נותן למתורגמן הוא הקובץ שאתה רוצה לפרש. במקרה זה, dynamic.php. אופס, איפה שמתי את זה? אה, שמתי אותו בסעיף 9, והנה אני כאן. זה למה. עכשיו אם אני מפעיל את זה שוב אנו רואים כי בקריאה לפונקצית gettype הראשונה שלי var הוא מספר שלם. בvar הבא אחד היא מחרוזת, ולאחר מכן בvar השליש הוא בוליאני. מה שמעניין בכל זה הוא אם אנחנו לגלול חזרה אנו רואים כי אלה הם סוגים דומים לאלה שהיו לנו בג היו לנו ints בג אנחנו די היינו מחרוזות ב-C, כך המחרוזות לא היו סוג לגמרי לגיטימי במובן זה מחרוזת CS50 הייתה באמת מה? סליחה? מסים? [מסים] char *. כן, זה היה * char זו עשתה שימוש. ממש בתחילתו של הסמסטר שהיינו באמצעות טיפוס המחרוזת, אבל זה היה באמת דמות * מתחת למכסת המנוע. אנחנו פשוט סוג מוגדר זה, ואילו ב-PHP המייתרים האלה הם סוג של ממש. אין עוד חומר של טיפוס * char זה. אתה תראה שאנחנו יכולים לעשות הרבה יותר דברים עם מחרוזות הרבה יותר בקלות מאשר ב-PHP שיכולנו ב-C, ולבסוף, יש לנו סוג בוליאני זה, וההבדל הגדול כאן הוא ש אם אנחנו לגלול למטה אנו רואים ששמו של סוגים אלה כעת, מחרוזת שלמה, ווליאני במקום int וbool, כפי שאתה לאסוף את שפות תכנות שונות ו, בהנחה שבשלב כלשהו בחייך שאתה בא במגע עם אלה שונים יוכלו להבחין מוזרויות קטנות כמו זה כאשר C קורא ints מספרים השלמים. יש כאלה שקוראים אותו שלמים. יש תנאים אחרים שאתה נתקלת בם. int הגדול שראינו היום ב-SQL. ישנם גם מספר ולאחר מכן bool, וליאני, כל מיני הבדלים שם. זה לא ממש מעניין, אבל עכשיו אני הולך לתת לך קצת זמן אם להתקרב חזרה לעבודה דרך התרגיל הזה בתחתית העמוד 3 שם הוא שואל מה סוגים מתאימים לערכים אלה כאן בתחתית. יש לנו 3.50. יש לנו את הדבר הזה ממש כאן, וזה מעניין. לא ראינו את זה קודם, למרות שאם אתה כבר לאחר יחד בהרצאה אתם בטח כבר יודעים מה זה. אז יש לנו את זה, שזה סוג של פאנקי. אתה מכיר את זה. מה זה ב-C? סם? מה זה נותן לך ב-C? זה יהיה לפתוח קובץ שנקרא dynamic.php ולהפוך אותו לקריא. כן, ומה יהיה הסוג המשתנה שהיינו להקצות לזה? כוכב קובץ. >> בדיוק, היינו להקצות זה לכוכב קובץ. זה לגיטימי מדי PHP. הפעל את זה. ראה מה קורה כאשר אתה עובר את זה לתוך gettype. ואז גם לבדוק מה הוא null, מה שעשוי להיות ב-PHP. אני אתן לך כמה דקות. אתה ממש יכול להעתיק ולהדביק את הערכים הללו ב, ואז אנחנו נעשה את שיחה אקראית קטנה עליך ולראות מה יש לך. [סטודנטים] יש לי שאלה. << כן. באחת ההרצאות שאמר דוד יש משהו שאתה יכול לשים בחלק העליון של הקובץ שלך כך שאתה לא צריך להקליד ב-PHP בכל פעם. מה זה היה? כנראה שהוא מדבר על מפץ הק"ג, מפץ החשיש. זה הוראה שאם אתה מסמן את הקובץ כהפעלה אז מה שהוא עושה הוא כאשר אתה להפעיל את הקובץ את זה יגיד לי תכנית הפגז כדי להשתמש במתורגמן PHP כדי לפרש את תוכנו של הקובץ. השאלה היא מה היה הקו המיוחד הזה שאנחנו יכולים לכלול בחלק העליון של קבצי PHP שלנו לא צריך לכלול קו זה PHP או פקודת PHP זה בכל פעם שאנחנו רוצים להפעיל את הקובץ? ואתה באמת יכול לעשות את זה עם חבורה של קבצים שונים. אני מאמין שזה תלוי במיקום בינארי PHP מאוחסן, אך לעתים קרובות usr / bin / php הוא מקום טוב להתחיל בו. אתה יכול להבין את זה בדיוק על ידי הולך שוב למכשיר שלך ולהקליד בו PHP. הפקודה שחשבה וכשאתה מבצע בינארי או פקודה שבו הקובץ המתאים היא. זה אומר לי שPHP היא באמת כינוי זה קובץ בינארי ששומר בusr / bin, אשר בו הרבה קבצים הבינאריים של המערכת מותקנת. לדוגמה, אם אני לגלול עד למעלה, עכשיו אחרי ששמתי את זה #! קו כאן אני יכול לגלול למטה, ואני יכול לנסות להפעיל dynamic.php, אבל אני מקבל את הודעת השגיאה על אישור שנדחה, ומה שזה אומר זה שקובץ זה אינו כרגע נותן הרשאות הפעלה. זה שאינו מסומן כקובץ שמישהו יכול לרוץ. כשרצת לעשות או קלאנג ויש לך הפעלה מזה המהדר היה חכם מספיק כדי לדעת כי היי, אני בונה הפעלה. אתה כנראה רוצה לבצע את זה, כך שזה יהיה להגדיר באופן אוטומטי את ההרשאות עבורך. אלא שאין זה המקרה, בעת יצירת קובץ רגיל מאפסת, הסיבה שבדרך כלל אתה לא רוצה להיות כל קובץ במערכת שלך תהיה הפעלה, אז אתה בעצם צריך ללכת באופן ידני ולעשות את זה. הדרך הקלה ביותר לעשות זאת היא בעזרת פקודת chmod, וchmod + x אומר להוסיף קצת ההפעלה בגלל שיש קצת הקריאה, קצת כתיבה וקצת ההפעלה, r, W ו-X, ואומר chmod + x יהיה להפעיל קצת ההפעלה אז לקובץ שציינו, שבמקרה זה יהיה dynamic.php. [סטודנטים] שמופעלים לכולם? בואו לבדוק את זה, אז איך אני יכול לבדוק את ההרשאות? אתה יודע כמה הייתי לבדוק את ההרשאות של קובץ? [תגובת תלמיד לא נשמעה] סליחה? >> [סטודנטים] XSD. XSD נותן לנו את הקובץ בפריצות. המפרט את כל הקבצים,-L, יציג את כל קבציי בספרייה שלי סוג של ב, הרישום המפורט הארוך שלהם, ואז הנה אנו רואים כי קובץ זה dynamic.php שונה לאחרונה 5 בנובמבר בשעה 4:21. הבעלים של קובץ זה jharvard. זה המשתמש שנכנס פנימה זה המשתמש אני עובד בתור, ואם אתה גם במכשיר שאתה עובד גם כjharvard משתמש. אתה בקבוצת התלמידים, ואלה הם דברים שאתה רואה לעתים קרובות מספיק. אנחנו יכולים להיכנס לפרטים רבים כאן, אבל על פי רוב מה שאתה רוצה להסתכל כאשר אתה מחפש לראות הפעלה או לא קובץ הוא בעיקר המשתמש שבעלים של הקובץ, הבעלים, כך jharvard זה, ולאחר מכן יש לנו את ביטי הרשאות לכאן משמאל, והדרך לקריאה זו היא שהחלק האחרון בדרך כלל משמש לסימון או לא, לפחות במקרה זה הקטע האחרון לעתים קרובות יוגדר מודעה כדי להצביע שהקובץ הוא ספרייה ולא רק קובץ רגיל. לאחר מכן את 3 הביטים הבאים ממש כאן לקבוע את ההרשאות שהבעלים של הקובץ יש לו, ולכן במקרה jharvard זה, כבעלים של הקובץ, יכול לקרוא ולכתוב בקובץ זה, אבל יש אומר שמקף jharvard לא יכול לבצע את הקובץ. את 3 הביטים הבאים הם לקבוצה, כך שזו קבוצת התלמידים, כך שאם היו משתמשים רבים במכשיר שלי, והיו לנו מספר רבים של משתמשים, כחלק מקבוצת התלמידים, אז כולם יכול לקרוא את הקובץ הזה, אבל הם לא יכולים לכתוב את זה, וכך גם כל אדם אחר, העולם יכול רק לקרוא את הקובץ הזה גם כן. יש writeup טוב, הרבה על זה, כך שאתה יכול לקרוא באינטרנט. במפרט סט הבעיה שנתעמק בזה בפירוט רב יותר. [סטודנטים] האם 218 מתייחסים לעולם? 218 הן, את החלק העליון של הראש שלי אני שוכח, אבל לא. בואו נראים. אני blanking על זה כרגע. לחזור למה שהיינו אמור לעשות עם chmod + x זה שבו אנחנו רוצים לתת הרשאות הפעלת dynamic.php, והשאלה הייתה אם זה היה נותן הרשאות הפעלה לכולם או לסתם jharvard, ואנחנו יכולים לראות את זה על ידי הרצת הפקודות והקלדת ls-l, ועכשיו אנחנו רואים שהיא מסומנת כהפעלה. אתה רואה שיש שינוי צבע. עכשיו dynamic.php מופיע בירוק, וזה נראה כמו התשובה לשאלה היא מה, שרלוט? [שארלוט] רק jharvard. >> רק jharvard, כן. אם אנחנו רוצים להפוך קצת על ההפעלה לכולם איך ניתן לעשות זאת? כל מחשבות? >> + X? כן, בדיוק. שרלוט אמרה שאנחנו יכולים לעשות chmod של + x של dynamic.php, ועכשיו אם אנחנו רצים ls-l אנו רואים שאת ביטי ההפעלה הם פנו אכן בכולם. ואתה יכול בעצם לעשות את ההפך מזה, כך שאתה יכול לכבות אותו לכולם שימוש במינוס. עכשיו הוא כבוי, ועכשיו אנחנו יכולים להפעיל אותו מחדש לjharvard כדי שנוכל להפעיל אותו דווקא עכשיו, ועכשיו אתה רואה כאשר אנו מפעילים את הקוד המיוחד הזה #! קו בחלקו העליון, #! קו, ספר את הקליפה, אמר לנו המסוף היי, כאשר קובץ זה מופעל, להשתמש / usr / bin / php לפרש את הקובץ הזה ולאחר מכן להדפיס את הפלט. [שאלת תלמיד לא נשמעה] בטח, בואו לגלול אותי בחזרה למעלה. בדיוק כמו זה. אתה תראה את כל ההנחיות הללו מתחילות עם חץ ק"ג זה ולאחר מכן הסימן הקריא, המכונה לעתים מפץ עסק, חשיש. [סטודנטים] איך אנחנו יכולים להפעיל אותו עם dynamic.php php לפני שאנחנו עושים את זה לביצוע? השאלה הייתה איך אנחנו יכולים להפעיל את זה באמצעות PHP ינארי בעוד dynamic.php הוא אינם ניתן לביצוע? זה סופר חשוב כי זה בדיוק איך זה הולך לעבוד כשאתה כותב סדרת בעיה 7. רוב קבצי PHP הזמן הם לא באופן ישיר לביצוע. הדרך שעובדת היא בגלל שזה בינארי PHP זה הפעלה. המתורגמן הוא הדבר המוצא להורג, ואז מה שהוא עושה הוא ממש slurping בכל התוכן של קובץ dynamic.php והקו הולך לפי קו וביצוע פקודות אלה, כך שמשתמש בקובץ ה-PHP שלנו כרשימה של הוראות. זה לא ישירות של הרצתו. זה שבו אנחנו אומרים שהקבצים הללו מתפרשים בזמן ריצה. זו שפת זמן ריצה במקום משהו שנקבע בזמן הידור, לא שפת הידור כמו ג האם יש דרך לקבל את שפת זמן ריצה להתנהג כאילו זה שפה לקמפל זמן, כמו שאם יש לך את כל שנעשה בשרת בו פועל ולא, אתה יודע למה אני מתכוון? כן, אז השאלה היא האם יש דרך לקבל שפות זמן ריצה לפעול יותר כמו סוגי הזמן לקמפל של שפות? ויש, אני מתכוון, שהוא אזור פעיל של מחקר להרבה מהחברות הללו. אני מאמין שפייסבוק עשה הרבה עבודה עם PHP והידור אותו, הופך אותו מהר יותר, אופטימיזציה שלה מאז האתר שלהם בנוי על PHP. אם אתה עוקב אחרי node.js בכלל, שהוא סוג של מתורגמן JavaScript כדי להיות מסוגל להפעיל JavaScript מחוץ לדפדפן, מחוץ לדפדפן האינטרנט שלך, משום שאופן מסורתי הייתי פשוט להפעיל JavaScript הפנימי של פיירפוקס או כרום, וזה הייתי לשמש להכנת אנימציות מגניבות יקרו בדף אינטרנט ולהפוך את דף האינטרנט שלך דינמי. זה כבר בנוי על הרבה עבודה שגוגל עשתה כדי להפוך את JavaScript ו-C + + נקשר יחדיו, כך שאין הרבה מחקר הפעיל לקבל השפות הבאות כדי אינטראקציה ולייעל אותם, בעיקר משום שכל כך הרבה אנשים יכולים קוד ב-PHP ו-JavaScript כי זה הרבה יותר קל. זה הרבה יותר נחמד. אתה לא צריך עצות. אין לך סוגים מרחפים. הם רצו לקבל את היתרונות של שפות אלה הזמן לקמפל עם כל סוג הבדיקה ואת המהירות ואת השימוש בזיכרון הנמוך וכל זה תוך שמירה על הגמישות וקלת שימוש של אלה חדשים אלה. בחזרה לתכנית המקורית שלנו להתקפה. יש לנו כמה מהשאלות האלה כאן במפרט סט הבעיה שלנו. בואו נעבור אותם מהר מאוד, ואנחנו נלך מסביב לחדר. שרלוט, איזה סוג היא 3.50? [שארלוט] זה כפול. >> זה כפול. ג'ימי, מה זה הבא? >> מערך. מערך, מדהים, וג'ארד, מה הוא fopen? [ג'ארד] זה משאב. >> זה משאב. זה סוג של אחד חדש, לא כוכב קובץ, ולא קובץ. זה משאב הוא הסוג ב-PHP, ואני מצטער, אלה, null האחרון הם מה? Null. ריק, איך מאיית את זה ב-PHP? >> אותה הדרך. באותה הדרך, בירות? >> כן. כן, בסדר. הנה, יש לנו כפול, יש לנו מערך, יש לנו משאבים, ולאחר מכן יש לנו אפס. בואו נראים עכשיו יש לך לראות, בואו נראים, אז עכשיו אני מניח שאני גם רוצה לעשות היא למשוך את דף אינטרנט זה ממש כאן, זה php.net / ידני, כך שאם אתם מעתיקים את זה ולפתוח את דפדפן אינטרנט. אני הולך למשוך את הכרום, שהכניס פנימה אני רוצה להראות לך את זה לא רק בגלל אנחנו יכולים לדבר כל היום על סוגים וכל זה כיף אלא משום שזה הוא המדריך של PHP, ויש הרבה מתכנתי PHP שם בחוץ. יש הרבה אתרי האינטרנט PHP שם בחוץ, וכתוצאה מכך, יש הרבה תיעוד על PHP, והידני, php.net זה, הוא באמת מקום טוב ללכת בכל פעם שיש לך שאלות על מהי הדרך הטובה ביותר לעשות X ב-PHP או מה פונקציה נראית? פשוט סוג של היכרות עם מה שזה נראה, כי אתה תבוא לכאן לעתים קרובות, קצת לבעיה להגדיר 7. אם בסופו של דבר עושה פרויקט גמר המשתמש PHP זה יהיה מקום שאהיה מכיר היטב. לעתים קרובות כמו שאנשים עושים את זה הוא שהם משתמשים ב-Google לחיפוש באתר, והם לא משתמשים בתיבת החיפוש שנמצאת פה בפינה הימנית העליונה, שהוא סוג של קטנטן. אם אתה Googling מחפש משהו שתוכל לעשות עם PHP ואתה רואה אחד מהקישורים הידניים לצוץ אתה בדרך כלל יכול לסמוך על זה כמשאב טוב למדי. מדהים, זאת מתוך סוגים אלה, רק מתוך סקרנות, אילו האם לא ראה? שום דבר שלא ראה כאן? [סטודנטים] משאבים. >> ראינו משאב עם שיחת fopen. [סטודנטים] אובייקטים. >> אובייקטים שלא ראו בודאות. Callbacks שלא ראו. יש כמה מן פסאודו סוגים אלה. אנחנו בהחלט ראינו רק מספר שלם וכפול. לא ראינו כמה מהאחרים, ולכן, אם נלחץ על מספרים שלמים אנו יכולים לראות האם יש מספרים שלמים אחרים שיש להם כאן? האם הם כל כך שלמים, מספר שלם, מספר שלם. שפות יש סוגים שלמים גדולים יותר, כמו שראינו בMySQL היום היה int ואז int הגדול. מגניב. לכן, מדריך של PHP. בואו נחזור למפרט סט הבעיה שלנו, ואנחנו עכשיו נצטרך לגלול למטה לעמוד 4. אחד הדברים שקורים כאשר אתה מקבל שפות הבאות שאין לי ההקלדה הסטטי הזה, אז השפות הבאות בו אתה צריך להכריז הסוג של חזית את המשתנה הוא שאתה מקבל מקרים שבם ייתכן שתתחילו משתנה מטיפוסים שונים אינטראקציה זה עם זה, וPHP עושה את הדבר הזה שבו הוא מנסה לעשות מה שהיא מגדיר כדבר ההגיוני ביותר לעשות כאשר יש לך 2 סוגים שונים לתקשר אחד עם השני. לדוגמה, אם אנו מסתכלים על השורות האלה של קוד כאן אתה רואה שיש לנו מה קורה כאשר אנחנו מנסים ולהוסיף מחרוזת 1 עד 2 מספר השלמים. מה קורה אם אנחנו מנסים ולהוסיף מחרוזת שאינה ערך מספרי אבל דמויות לא אמיתיות, CS למספר 50? אז נראה האם יש משהו אחר שקורה שם במקום להוסיף את מחרוזת למספר שאנחנו מוסיפים מספר למחרוזת, וכן הלאה וכן הלאה עד לנקודה שבה אנחנו מקבלים איזה דברים מוזרים בדיוק איפה שאנחנו חייבים 7 + אמיתיים. מה לעזאזל זה אומר? אם אתם הולכים קדימה ולהדביק חלק מקוד זה למכשיר שלך. אתה יכול לשמור את זה בdynamic.php. נצטרך לראות מה קורה. [סטודנטים] פשוט להשתמש בהדפסה, ולא printf? כן, אז אתה תמצא שהדפסה היא גם פונקציה תקפה להדפסה ב-PHP. ישנן דרכים רבות ושונות לעשות את זה. נראים עם כמה הדוגמות בהמשך ברגע שנתחיל לדבר על הבעיה הייחודית שאנחנו הולכים לכתוב ואז בעית הריכוזים שאנחנו הולכים לכתוב שלמרות שיש לנו וfopen fclose זה לעתים קרובות לא הדרך הפשוטה לקרוא את התוכן של קובץ. PHP יש הרבה שאריות C-כמו אלה. [סטודנטים] כשאני שם בכל 6 מאותם דברים שאני מקבל מספר אחד כפלט בלבד. [נייט ח] כשאתה שם בכל 6 לדברים האלה. בואו נראים שזה בגלל שזה אולי- דבר אחד הוא ששיחות הדפסה אלה לא הסתיימו בסוף עם קווים חדשים. אין קו חדש של יש להפריד כל אחד משיחות ההדפסה האלה, אז אולי אתה מקבל מספר גדול אחד, וזה באמת רק תערובת של תווים בשורה החדשים. [סטודנטים] אוקיי, איך אני מוודא ש- ובכן, יש חבורה של דרכים שונות. אתה יכול לשים באופן ידני בהדפסה של תו שורה חדשה, הד לתו שורה חדש, הדפסה של קו חדש. [סטודנטים] אז ההד הוא אותו הדבר כמו printf? Printf הוא כמו C printf איפה אתה מדפיס מחרוזת מעוצבת. אתה מספק לו מחרוזת בתבנית ולאחר מכן את כל משתני מצייני המיקום. זה בדרך כלל משהו שלא ישמשו בואו נראים, כהסתייגות, אני פחות מכיר את PHP ממני עם שפות אינטרנט אחרות, וכאשר יש לי לתכנת ב-PHP אני בדרך כלל לא משתמש בprintf משום שאני מוצא את זה יותר מהר כדי להשתמש ביכולות אינטרפולציה המחרוזת שיש לו, שנלך ולאני אראה לך בדיוק שני, ואילו ב-C אנחנו סוג של צריכים לעשות דבר חאקי זה כדי לקבל את זה כדי להדפיס כהלכה. למעשה אתה יכול לשים משתנים ישירות לתוך מחרוזות ב-PHP. Printf הוא סוג של ארוך מדי עבור מה שאני עושה בדרך כלל. כן, אלה. [אלה] באופן כללי אם אתה מקבל שגיאת ניתוח זה אומר- כמו על C זה לא אומר לך בדיוק איפה הטעות היא ומה הוא, אז זה אומר שמבט דרך כל הקוד שלך ולהבין את זה? זה בדרך כלל יותר ממוקד מזה. אני חושב שבמקרה זה היה קצת כבוי, לכן אני חושב שבמקרה שהיו חסר פסיק. הוא מנסה למצוא היגיון בכל דבר, כל כך כמו שפות לפרש אלה, הפרשן הולך לנסות ותעשה כמיטב יכולתה כדי להפוך את עבודת הכל כראוי. תראה, למשל, ב-JavaScript אתה לעתים קרובות אונליין הצהרות קצה עם פסיק בדיוק כמו שהם עושים ב-PHP, בדיוק כפי שהם עושים בג ב-JavaScript חלק מפרשני JavaScript בהרבה מהדפדפנים תהיינה לשים בפסיק בשבילך אם קורים לך להיות חסרים אותם. הם ינסו להתאים לרשלנות כלשהי מצידך. זה המקום שבו ייתכן שהוא מנסה ומנסה ומנסה לעשות דברי עבודה, ואז סוף הסוף זה מגיע לנקודה שבה אומר בסדר, אני לא יכול לגרום לדברים לעבוד על שחרור בערבות, וזה שבו יקבל מספר קו שאולי נראה קצת מהמקום המדויק. אוקיי, אז בואו נעבור את זה ממש מהר. אבל עזב אותי עם אלה, אז בואו נלך למסים, ומסים, מה הדפסה של מחרוזת 1 פלוס המספר 2 ינתנו לך? [מסים] 3. >> 3. האם זה הגיוני? סוג של? האם זה נותן לך מספר? האם זה נותן לך חוט? [מסים] מספר. >> זה מספר. אבל זה להדפיס אותה, אז זה הולך לתת לך איזה חוט. אחד דברים שאנחנו יכולים לעשות כדי לבדוק את זה הוא אם אנחנו עושים $ var = 1 + 2 ואז אנחנו אומרים הד gettype, כך אנחנו משתמשים בסוג שלישי של הדפסה כאן. עכשיו אנחנו יכולים לראות את מה שקורה כאן. הנה מה שיש לנו הוא שיש לנו מספר שלם מתוך זה. למרות שאנחנו מוסיפים מחרוזת זה למספר, אנחנו לא מקבלים את המחרוזת שלו, בדיוק כמו מסים, אמרו. אנחנו מקבלים מספר שלם. אוקיי, אז בואו נראים, הבא למעלה, קווין. CS + 50? >> [קווין] 50. [נייט ח] 50. האם זה הגיוני? [קווין] כן. [נייט ח] למה? למה זה נשמע לך הגיוני? [קווין] כי זה פשוט הזמין את המחרוזת, שערך אפס מספר. כן, נהדר. סוג של מצבים מעורפלים, אבל זה טוב לדעת מה קורה. סטלה, מה קורה עם מספר 1 + מחרוזת 2? [סטלה] 3. >> 3 שוב. ובמקרה הזה, אנחנו מקבלים מחרוזת או מספר? בואו לתת את זה לנסות. אף אחד מהר יותר מאשר לי את התשובה? שרלוט? אה, אני לא ידע-בסדר, בואו נראים, אנחנו הולכים לעשות את אותו דבר איפה שיש לנו מספר בתוספת מחרוזת, ואנחנו הולכים להד הסוג, לראות מה אנחנו מקבלים. כמו כן, אנו מקבלים מספר שלם. זה לא משנה איזה מהם הוא המחרוזת, איזה מהם היא המספר. אנחנו עדיין הולכים לקבל מספר שלם. זה עדיין הולך לעשות את מה שהיינו מצפה. בסדר, אז סם, מה לגבי 90 + 9 בקבוקים של בירה על הקיר? [סם] 99. >> 99. אין בקבוקים של בירה על הקיר, אם כי. זה נותן לנו קצת יותר מידע על מה שקורה. [סם] אם כתב באותיות 9 אז היית צריכים 90, נכון? [נייט ח] כן. השאלה הייתה אם הייתי כתוב 9 מתוך כ N-I-N-E האם היינו מקבל 99 או 90? היינו מקבל 90. זה ממש סתם מחפש תווים ספרתיים. זה לא חכם מספיק כדי לזהות מילים ומספרים שדברים כאלה. כן. [סטודנטים] האם יש דבר כזה כמו ליהוק שחקנים ב-PHP? יש, וזה בדיוק כמו שאתה הייתי עושה את זה בג מה לגבי 10/7, שרלוט? [שארלוט] 1.4285. [נייט ח] כן, אז מה יכול להיות מפתיע בעניין הזה? מה היה קורה אם היית עושה אותו דבר כזה ב-C, אם עשית 10/7 ב-C? [שארלוט] זה יהיה רק ​​לתת לך תלוי על איך אתה typecasted אני מניח זה ייתן לך רק מספר מוגבל של ספרות אחרי הנקודה העשרונית. כן, אז מספר מוגבל של ספרות אחרי הנקודה העשרונית. מה עוד יכול להיות שזה ייתן לך שום ספרות אחרי הנקודה העשרונית? לעתים קרובות לא, אז שוב, תלויים איך אתה ליהוק שחקניה זה יכול או לא יכול להמיר אותו למספר עשרוני. כאן זה היה די נחמד שהיא עשתה. אם הייתי מראה לך את זה בחזרה כשהתחלנו לעשות דברים כאלה ב-C זה כנראה היה עושה קצת יותר הגיוני שזה לא פשוט ללכת 1. ולבסוף, ג'יימי, מה לגבי 7 + נכון? [ג'יימי] 8. >> 8. מה זה אומר? אני מניח שזה רק נותן לי אמיתי ערך 1. כן. מה יקרה אם תשנו את זה שקר? [סטודנטים] 7. כן, כל כך זוכר איפה אנו מדברים על הערכים בינאריים אלה, 1 להיות ב, 0 להיות מעל? עכשיו יש לנו נכון הוא 1, 0 הם שקר, וייתכן שלא ראה את זה בדוגמאות C שעשינו בסמסטר שעבר, אבל מהבחינה הסטורית סוג bool ב C לא היה סוג אמיתי, כך האנשים השתמשו 0 ו 1 במקום של אמת ושקר. זו היא ביטוי לכך. אוקיי, אז חלק חשוב אחד על כל זה הוא שיש לנו סוגים שונים האלה. הם יכולים לתקשר אחד עם השני. לעתים קרובות הם יכולים לתקשר אחד עם השני בדרכים שהן נחמדות, כמו שראינו כאן. זה נחמד להיות מסוגל לקבל מחרוזת 1 ומספר 2, להוסיף אותם יחד ותקבל 3. זה הגיוני. עם זאת, כאשר אתה כותב אתרי אינטרנט, ובמיוחד כשאתה מעבד קלט משתמש, ולכן אומר שכתבת טופס אינטרנט שאוסף מידע מהמשתמש ואז הולך לעבד אותו בקצה האחורי, בצד השרת בקוד ה-PHP אם אתה מצפה שהערך שמשתמש הקליד ובהגשתי לטופס שלך כדי להיות שלם או להיות מספר נקודה צפה או משהו כזה אתה צריך באופן מפורש שהטיל אותו ואז לעשות כמה בדיקות סוג. אתה לא רוצה פשוט להסתמך על מערכת ג'אגלינג סוג זה כדי לגרום לדברים לעבוד, בעיקר מסיבות בטחוניות ורק לחוסנו של אתר האינטרנט שלך. רק משהו שכדאי לזכור שבכל פעם שאתה מטפל בנתוני טופס, כל דבר שמגיע בדואר או את superglobals קבל לוודא שאתה תמיד לאמת אותו ולהפוך אותו ותייגת אותו. ובדיוק כמו שאנחנו מדברים על רגע לפני שליהוק השחקנים בPHP הוא בדיוק אותו הדבר כמו ב-C בו אתה צריך את הסוגריים ולאחר מכן את הסוג. לזכור את זה. פונקציה אחת שתהיה שימושי כשאתה עושה את זה הוא אנחנו כבר משתמשים וזה סוג של כצד- אנחנו כבר משתמשים פונקצית gettype זה ממש כאן כדי להבין את הסוג משתנה, ובזמן הזה הוא שימושי לניפוי ולראות איזה סוג של משתנה הוא אתה לא רוצה להשתמש בו, זה לדוגמה, במצב שבו אתה בודק אם gettype של $ var = שלם לעשות משהו. זה רע, רע, רע. במקום יש הפונקציות הללו נקראים הוא מספר שלם, היא מחרוזת, הוא מערך שאתה רוצה להשתמש במקום, ולכן במקרה זה מה הייתי רוצה לעשות במקום הבחור הזה ממש כאן הוא משתמש הוא var מספר שלם. והם מכונים לעתים קרובות הם * is_ במובן זה שאתה יכול להחליף * עם שלם, מחרוזת, וכולי, ורק כדי לוודא שבאמת מהיר הוא זה int PHP. נראה כאילו אתה יכול לעשות גם הוא int או שיש מספר שלם, כמו גם? כן, כינוי, כינויים שלמים כך int. מגניב. איך אנחנו עושים? בואו להרים את הקצב מעט. עכשיו אנחנו הולכים לדבר על מערכים, אז כפי שאתם יכולים לראות בחלק הבא של המפרט אנחנו מדברים על מערכים איך ב-PHP הם מעט שונים ממה שהם בג למען אמת, הם מעין תערובת של המערכים שאתה כבר יודע ואוהב ב-C בו הכל מאותו הסוג מאוחסן ברציפות וסמיכות בזיכרון, ויש לך מדדים מספריים אלה. יש לך מדד 0, 1, מדד 2, ולך לאחסן ערכים במדדים אלה. גם אתה ב-C, כאשר כתבו מאית, הרבה מכם עשה גישת שולחן החשיש, ואת רואה שיש לנו סוג אחר של אחסון שבו היינו מיפוי מפתח לשווי, ולכן כאשר אתה ניסית לאחסן משהו בשולחן חשיש היית חייב לציין שאתה רוצה לאחסן אותו עם מפתח מסוים, ומפתח שקבע את מיקומו של הערך ובו יאוחסן. סוג של יש לך את שני המושגים האלה קורים באותו הזמן במערך PHP, וכתוצאה מכך, לעתים קרובות אנו קוראים מערכים אסוציאטיביים איפה אנחנו משייכים מפתח בערך. בחלק הבא שאנחנו מדברים על מערך פשוט PHP שם יש לנו את מפתחות, B ו-C, כל המחרוזות, מיפוי למספרים השלמים 1, 2, ו 3. ואתה יכול לקבל את מפתחות מסוגים שונים. אתה יכול להיות כמה מפתחות שמחרוזות, כמה מפתחות שהם מספרים שלמים. אתה יכול לקבל ערכים מסוגים שונים. אתה יכול להיות בעל ערך זה מחרוזת, ערך זה מספר שלם, ערך זה אובייקט או מערך אחר, לדוגמה, כולם באותו אובייקט המערך, שהוא קצת מוזר. אתה לא צריך להיות מערך שפשוט יש לו סוג אחד של אלמנט בו. אתה יכול להיות הרבה דברים שונים קורים שם. הדבר השני שיש לשים לב, שכאשר אתה רואה משהו כזה בקוד שלך, שזה PHP החוקי להכריז על מערך כזה בדיוק, 0, 1, 2, 3, 4, 5, שיכריז arr $ אותחלו להיות זה מערך. אבל מה שאתה באמת מקבל מתחת למכסת המנוע הוא זה סוג של סמוי דור של מקשים בי שיש לנו 0-0, 1 עד 1, 2 ב2, 3 עד 3. ומתברר שגם אם יש לך מערך כמו הבחור הזה כאן שם יש לך, B ו-C כמפתחות ואז אתה מתחיל להשתמש בשיטת דחיפת המערך כדי להתחיל להשתמש במערך זה כמו ערימה, כך שאתה יכול לראות שזה אובייקט מערך, המערך הזה הוא באמת הופך עמוס. אנחנו יכולים להשתמש בו כמגוון. אנחנו יכולים להשתמש בו כשולחן חשיש. אנחנו יכולים להשתמש בו כערימה. כאשר אתה מתחיל לדחוף דברים על מערך זה הדבר הראשון שאתה דוחף אל זה יהיה מדד 0 1 ולאחר מכן מדד ומדד 2. אתה יכול לקבל סוג כזה של דור הסמוי של מפתחות אלא אם כן ציינת אותם במפורש. הדרך שציינת במפורש מפתחות, כמובן, היא באמצעות סימון סוגר זה, בדומה למערכים למעט במקום לאפשר רק מדדים שלמים בפה, אנחנו נאפשר לכל דבר. אם אתה רוצה להיות המפתח שלך למחרוזת, היית מציין את זה ככה. אם אתה רוצה שזה יהיה int, שתציין את זה עם int ברצונך להשתמש. שאלות על זה עד כה? אחד הדברים היפים ברעיון הזה הוא שאתה יחיד שיכול להיות ערך אחד מאוחסן במפתח מסוים. אם אחזור אלינו המכשיר, תן לי למחוק חלק מהחומר הזה. ונניח שאני לאתחל מערך להיות 0, 1, 2, עשה. אם אני עכשיו יודע את זה, לדוגמה, אם אני מהדהד arr $ [0] אני הולך לקבל את ערך 0 הדפיסו, ומכיוון שיכול להיות רק ערך אחד מאוחסן על מקש מסוים אם אני לאחסן משהו בעיבוד $ [0], אומר, אז אני יודע מתי אני חוזר על $ arr [0] שוב אני לא הולך לקבל 0 הדפיסו כמו קודם. אני רק הולך לקבל. אז זה בעצם אומר שאני לא יכול להיות arr $ [0] 2 ערכי אחסון שונים. זה לא יכול לאחסן הוא 0 וחוט, כמו זה ממש מחליף מה שהיה בעיבוד $ [0] בעבר. הסיבה שאני מעלה את זה הוא להפעיל אותו, לראות מה קורה. ראה כאן כי יש לי 0 ולאחר מכן הדפיסו כאן למטה. אין שום קו חדש שם, כי הייתי עצלן ולא כתב את זה פנימה מה מגניב על זה שאנחנו יכולים להשתמש בזה כדרך כדי ללכוד את הרעיון הזה של קבוצה שבו אנחנו לא יכולים לקבל את המפתחות מרובים בתוך מערך. אנחנו לא יכולים לקבל את מפתחות זהים בתוך מערך. אני לא יכול להיות מקש 0 וערך 1 ועל מקש 0 וערך או 0 וערך מפתח נכון. המפתחות הם כל יש רק מקש 1 במערך. למרות שאתה יכול לקבל את אותו הערך המאוחסן מספר פעמים במערך תחת מפתחות שונים זה לא אפשרי שתהיינה מפתחות זהים מספר פעמים במערך PHP שלך. אם יתבונן בבעיה הבאה, unique.php, לאן אנחנו רוצים לפתוח את קובץ ה-PHP המכיל רשימה של מחרוזות, מחרוזת אחת בכל שורה, ואנחנו רוצים למצוא את כל החוטים הייחודיים שבקובץ כל מה שאנחנו צריכים לעשות הוא להשתמש באחד מהמערכים האלה PHP ולהשתמש במחרוזות בקובץ כמפתחות למערך זה ולעדכן באופן שוטף המערך שלנו כמו שאנחנו מאחסנים את המפתחות החדשים אלה. כפי שאנו קוראים כל שורה מתוך הקובץ שאנו יכולים לאחסן אותו במערך, ובסופו יהיה לנו כמפתחות שלנו במערך שלנו את כל החוטים הייחודיים בתוך הקובץ. האם זה הגיוני? בואו לראות איך זה עובד. אנחנו הולכים לפתוח, על פי המפרט, קובץ חדש בשם unique.php. פתח. אופס, סליחה, קובץ חדש. אנחנו הולכים להתחיל אותו עם תגים אותה ההתחלה וסיום. אנחנו הולכים כדי לשמור אותו בסעיף 9, ואנחנו הולכים לקרוא לזה unique.php. אוקיי, עכשיו להתמקד פנימה הרעיון כאן הוא לפתוח קובץ, לקרוא בשורת קובץ אחר שורה. לכל שורה בקובץ יהיה לנו מערך שבו יש לנו  הקו כמפתח שלנו. ואז כשנגיע לסוף כאן המפתחות של $ arr הם קווים הייחודיים מהקובץ מאחר שאנו יודעים שאם אני אשים קו למערך זה פעמים רבות זה תהיה פשוט לשמור על דריסת הערך הישן, ואנחנו באמת יכולים לשים את הקו במערך כעצמו סתם ככה. זה קצת מוזר. אנחנו מאחסנים אותו זוג ערך המפתח שוב ושוב ושוב, אבל מאחר שאנחנו מובטחים שלא יהיו רק מקש 1 נקרא קו כך שאם יש לנו קובץ שאומר-קובץ של קולות של בעלי חיים ויש לו האו, האו, מיאו, מיאו, מו, מו, ובכל פעם שאנחנו קוראים את רעש של חיה כמו האו ולאחסן אותו במערך שלנו אנחנו מקבלים לנבוח, ואז בפעם השנייה אנו מאחסנים וף זה יהיה להחליף את הפעם הראשונה שמאוחסנים בו. בסופו יהיה לנו ערך אחד במערך היחיד לכל אחד מהקולות של בעלי החיים בקובץ הקולות של בעלי החיים שלנו. האם אתם מרגישים בטוחים שאתה יכול להתמודד עם פתיחת קובץ ב-PHP? דרך אחת לעשות את זה, בואו נלך על דרך במהירות, זה לעשות את זה הוא עם fopen, כמו שראינו קודם. אתה יכול fopen some_file.txt. אתה יכול לפתוח אותו במצב קריאה, ממש כמו בג זו דרך מושלמת טובה אחת לעשות את זה. גם לאחר מכן לקריאה בקובץ השורה אחרת שורה אתה יש את אותן פונקציות, רבים מהם, שעשיתם בג יש לך fgets. יש לך feof, למרות שאנחנו לא אוהבים להשתמש בזה משום, לזכור, שלא היה גדול בג אתה יכול לעשות את זה באותה הדרך, אבל כאן זה דבר ממש מגניב. מצטער, אני לא רוצה לעשות $ קובץ, אבל יש פונקציה שנקראת קובץ ב-PHP, ופונקציה זו זכות כאן היא מגניבה כי הוא קורא את כל התוכן של הקובץ שאתה מציין, ולכן some_file.txt, קורא את כל התוכן של קובץ זה במערך ולאחר מכן מאפשר לך לחזר על זה, וזה די מגניב. אם אנחנו הולכים, למשל, לדפדפן האינטרנט שלנו ואנחנו מסתכלים על גוגל לקובץ PHP אתם יכולים לראות כאן שבמדריך שלנו אומר קובץ שקורא כל קובץ לתוך מערך, ואנחנו יכולים file_get_contents להחזיר את התוכן של קובץ כמחרוזת, אבל בדרך כלל פשוט מקבל את זה כמערך הוא באמת נחמד, כי מה שהוא עושה היא אותו שובר אותו, כך שכל רכיב במערך היא שורה אחת של הקובץ, כך שאם אנחנו מסתכלים על קובץ 0, זאת השורה הראשונה של הקובץ. קובץ 1, קו שני, קובץ 2, שורה שלישית, וכן הלאה וכן הלאה. האם לא יהיה זה נחמד אם זה היה כל מה שצריך לעשות ב-C? די מגניב. הדוד הראה את זה בהרצאה, ואת הניב שהוא הראה היה כי בנוסף לסטנדרט שלנו ללולאה ב-PHP שהיו לנו עבור ($ i = 0; i <10; אני + +), ואתה יכול לעשות את זה ב-PHP מדי, אותו דבר, יש לנו גם המבנה המגניב הזה שנקרא foreach. Foreach הוא באמת שימושי כאשר iterating על מערכים או מבני נתונים אלה כי זה מאפשר לך להוציא את כל אלמנט של המערך מבלי לעשות ידני האינדקס עצמך, מבלי ליצור ידני משתנה מדד, להגדיל אותו, לשלוף את הערך במערך בשלב זה, כי זה דבר נפוץ מאוד לעשות. יש לך כנראה עשה את זה טונות של פעמים כשאתה עושה דברי C על הסמסטר, כך עם foreach זה אנחנו יכולים לולאה על מערך קובץ זה, והתחביר הוא שאנחנו רוצים עכשיו לולאה על מערך זה ולציין שהמשתנה שאנחנו הולכים להשתמש לאחסון האלמנט של מערך זה באופן מקומי, המקומי להיקף של לולאת foreach זה, הוא שאנחנו הולכים לקרוא לזה קו. אם זה קובץ של מילים בלבד ויש מילה אחת בשורה אנחנו יכולים לקרוא לו גם מלה, באמת רק לך לתת את זה שם, כל מה שאתה רוצה לקרוא לזה, ואז בתוך הלולאה אתה יכול לעשות מה שאתה רוצה עם קו משתנה זה. אם זה לא מספיק כדי לקבל את הערך של המערך ואתה גם רוצה לקבל המדד יחד עם זה אתה יכול לציין שם למדד כמו גם את הערך, ועכשיו יש לך גישה ל2 משתנה. יש לך $ אני וקו בי $ i הוא האינדקס במערך, וקו הוא הקו שנלקח מהקובץ. לדוגמה, אם אנחנו רוצים להדפיס 0 הד קו של הקובץ כמו זה, אנחנו יכולים לעשות את זה כמו שזה, "קו $ i של הקובץ הוא $ קו," והנה משהו שגם שעוד לא ראה או איפה שאני פשוט דלגתי לחלוטין מעל% של כל% זה ד העסק שיש לנו כדי להתמודד עם ב-C, ובמקום זאת אני כבר הלכתי ישר ל כתיבת המשתנים בשורה במחרוזת שלי. זה נקרא אינטרפולציה משתנית, המחרוזת אינטרפולציה לאן אתה דוחס את המשתנים נכון ובמתורגמן PHP הוא חכם מספיק כאשר הוא קורא דרך שרשרת שמתחילה עם ציטוטים כפולים- לא גרשיים בודדים, עם מחרוזות מצוטטות בודדות אתה לא יכול לעשות את זה, אבל עם מחרוזות מצוטטות כפולות כפי שהוא קורא אותו מחפש משתנים. זה לצוד אותם, ואם הוא רואה משתנה ייקח את הערך של המשתנה ודוחף אותה למחרוזת אם זה יכול להמיר אותו לייצוג מחרוזת, וזה די מגניב. לעת עתה, בואו להגיב את שאר הכל, לשמור את זה, ומה שאנחנו יכולים לעשות עכשיו הם אנחנו יכולים לפתוח את קובץ שאנחנו יכולים לקרוא some_file.txt-בוא ליצור קובץ חדש, ואנחנו יכולים לשים בחבורה של דברי הבל פה רק כדי לבדוק את הכל, לשמור אותו, קורא לזה some_file.txt, כפי שאני עושה כאן בראש, ועכשיו אם אני זום החוצה רק כדי לוודא שהכל נמצא באותה הספרייה, זה נראה כאילו יש לי unique.php וsome_file.txt באותה הספרייה. אם אני מפעיל unique.php php לראות איך זה מדפיס את כל שורה בקובץ שלי ומה השורה? זה די חזק, נכון? תראה, לקח לו 3 שורות של קוד כדי לפתוח את קובץ. ובכן, 4 שורות של קוד. אני לא יכול לספור היום, זה ברור. אבל באמת רק 2 שורות מעניינות של קוד, כי האחרים היו 2 הסוגריים המסולסלים, אבל בהרבה קוד הזה היינו יכול לפתוח קובץ, לחזר דרכו, לשלוף את מספר הקו והקו עצמו ולהדפיס אותו. דברים מגניבים. שרלוט. [שארלוט] יש לי שאלה על התחביר. אז foreach עוסק בכל שורה יחידה של הקובץ שאתה פותח, ואז כשאתה רוצה לעשות דברים עם כל שורה אחת שפשוט עושה את זה כמו ולאחר מכן לשייך את הערך. [נייט ח] מה שאתה יכול לעשות כאן, השאלה הייתה foreach יש לעשות עם המערך, כך תחביר foreach הוא באמת foreach, והודעה שאין מקום או כל דבר בין ולכל אחד. הם צריכים ללכת ממש ליד אחד את השני, ואז זה לוקח במערך, ואז יש לך מילת מפתח אחר זה נקרא כמו שצריך להיות שם, ואז אחרי שאתה יכול לשים את השם של משתנה אחד, בכל מקרה אתה הולך להיות מושך את הערכים של המערך, לא את המדדים, או אם אתה עושה את זה כמו שכתבנו בהמשך אתה מקבל את המפתחות והערכים. יש לך אלמנט foreach של המערך או זוג המערך כרגש לשווי או פשוט כערך. תלוי מה אתה צריך, אם אתה לא צריך את המפתחות, אז אתה יכול ללכת עם הערך. אם אתה רוצה את המפתחות אתה יכול ללכת איתם יותר מדי. [שארלוט] גם הבנו שאנחנו אף פעם לא הצהרנו שאני או הקו. איך בכלל זה יודע מה הם? [נייט ח] מה אתה מתכוון להכריז? [שארלוט] מעולם לא אמרו להם מה אני או קו אמצעי. [נייט ח] מעולם לא אמר את מה שהמחשב או קו המשמעות במונחים של [שארלוט] שהם צמודים למדד או שפזור ב- [נייט ח] מעולם לא אמרו לו שזה אמור להיות מדד או המפתח והערך, וזה בגלל שזה מתורגמן PHP. זה משמש כהצהרה ואומר בסדר, המפתח הולך להיות משתנה בשמי מאוחסן במשתנה בשם. הערך הולך להיות מאוחסן בשורה נקראת משתנית, אז זה משמש כהצהרה על משתנים אלו ואומר לי $ הם מפתח, ושורת $ היא ערך. כן, אלה. [אלה] אם המפתחות לא עשו מבחינה מספרית איך זה להחליט מה סדר זה הולך להדפיס כל דבר? האם זה בדיוק כמו את הסדר שהם נכנסים? [נייט ח] בואו לנסות את זה. בואו ליצור משתנה בשם arr, ואנחנו יכולים לעשות את הולכים 7. תניחו 0 הולכים למערך אחר עם 1, 2, או תפוח. תניחו 7 הולכים ל1, ב הולך ל2, ו 3 הולכים 4. זה סוג של דוגמה מחפשת מטורפת כי אנחנו מערבבים מחרוזות ומספרים שלמים בכל המקום. אין סדר אמיתי למערך זה. אני מתכוון, שנוכל להזמין את כל מה בסדר אלפביתי לפי את המפתחות. אפשר להזמין הכל בסדר אלפביתי לפי הערך. אנחנו יכולים לנסות ולקחת בחשבון שחלקם מחרוזות, חלקם ints, ואנחנו יכולים לנסות ולהמיר את כולם לאותו הסוג ולראות מה קורה, או שאנחנו יכולים לשקול אותם בשווי שבו אנחנו כבר הזנו אותם בו אנחנו שמים את הבחור הזה בהתחלה, הבחור הזה במקום שני, הבחור הזה בשלישי, הבחור הזה ב, וכולי רביעי. בואו לראות מה קורה כאשר אנו מפעילים את הקוד הזה. אם אנחנו לגלול למטה ולעשות את אותו דבר, וכאן זה לא מדפיס את הקווים החדשים. כשקרא את דבריו של הקובץ שכולל את הקווים החדשים בערכים, שלכן הדפיס יפה, ואילו כאן זה לא קרה, זאת הסיבה שמכיל דחוסה יחד. בואו נוסיף שבשורה חדשה, רק כדי לעשות דברים נחמדים. בואו שידור חוזר זה, ואז הנה מסתכל על מה שקרה. הוא הדפיס את הכל בהסדר שבו אנחנו מכניסים אותו למערך. זה לשמור על סדר במובן הזה. יחזור לבעיה זו של uniques איפה אנחנו רוצים להיות מסוגלים לנוע הלוך ושוב על קובץ, ואנחנו ניתן אותו some_file.txt, ואנחנו הולכים לחזר על זה ככה. אנחנו אמרנו שאנחנו רוצים להשתמש במערך כדי לוודא שהיינו מגיע כל קווים ייחודיים משם, ואנחנו יכולים לעשות את זה ממש בקלות רק על ידי האחסון במערך שאנחנו כמובן להכריז מחוץ להיקף של לולאה, ואנחנו אמרנו שאם השתמשנו בשורות בקובץ כמפתחות במערך שלנו אם נכנסנו לקו כפול שהיינו דריסת הערך הקודם. זה לא תמיד אפשרי יש 2 מקשים זהים באותו המערך. אנחנו יכולים לעשות בדיוק את זה. אנחנו הולכים להיפטר מהצהרת הד זה ממש כאן. כאן אנחנו אחסון השורה בקובץ במערך שלנו שימוש עצמו כמפתח. זה שום דבר, ומתברר שאנחנו אפילו לא צריכים את המפתח הזה. אנחנו לא צריכים שאני משתנה. בשלב זה, אם היינו עושה עוד לולאת foreach והיינו ללולאה מעל כל arr ועכשיו, אם קו, אופס הד, מצטער. אנחנו לא יכולים להשתמש בפסיק. אנחנו צריכים להשתמש בזה כמילת מפתח. עכשיו, אם הד קו שאנחנו צריכים לקבל את כל המילים הייחודיות בקובץ. אם תלכו עד some_file.txt, ונניח שאנחנו עושים תפוח, בננה, תפוח, תפוח, בננה, אם אתה מדפיס את כל המילים הייחודיות בקובץ זה אנחנו צריכים רק לקבל תפוח ובננה להדפיס. אם תצילו את זה, עכשיו אנחנו כאן להתקרב בחזרה, php unique.php, וTa-da. אנחנו uniqued קובץ בהצלחה. חלק הסופי של בעיה זו הוא מבקש ממך למיין המערך הזה לפני שהדפסת כי בדוגמא הפשוטה הזה שאנחנו פשוט עשינו היו לנו מזל במובן זה שקובץ עשינו דוגמה המאולצת הזה עם תפוחים ובננות. זה כבר מסודר. אבל שימוש בפונקצית הסוג הפשוטה ניתן למיין מערך, וזה די מגניב. הדבר האחרון שאני רוצה לדבר איתכם על ממש מהר הוא שזה סוג של PHP הוא טוב ויפה, וזה סופר שימושי כדי לדעת איך עושה אם אי פעם תצטרך לעשות דברים קטנים, מהירים תכנותי. לדוגמה, אם אני צריך לכתוב תכנית ש, אומר, מכניס את כולם לחלקים אני לא מתכוון ללכת ולכתוב אותו ב C. זה הולך להיות ארוך. זה הולך להיות סוג של כאב, במיוחד אם יש קבצים המעורבים, בדיוק כפי שאתם רואים. זה כל כך יפה שרק עם הרבה קוד זה ממש כאן היינו יכול לטרוף בקובץ, למשוך את כל הערכים הייחודיים ולהדפיס אותם בחזרה החוצה. עם זאת, למשימות שלך, לפרויקטים שלך, אם אתה בונה אתרים עם PHP הכח הוא כי אנחנו רצים כל קבצי PHP שלנו באמצעות מתורגמן זה, והמתורגמן הוא עיבוד הכל בתוך תגי PHP, וכל השאר לא נגעו וירק את התוצאות. אנחנו יכולים לעשות את זה כדי לבנות HTML תכנותי. עכשיו, אם אחזור למפרט, הבעיה האחרונה במפרט מדבר על הרעיון הזה של ריכוזים ויצירת תפריט נפתח, שאתה יכול או לא רוצה לעשות, תלוי מה פרויקט הגמר שלך עושה, המאפשר למשתמש לבחור מתוך רשימה של כל הריכוזים האפשריים הריכוז שלהם אחד. עכשיו, זה סוג של כאב להקליד את זה וצריך לעשות את כל זה באופן ידני, במיוחד כאשר יש לך כדי לוודא שיש לך את כל סוגריים במקום הנכון ואת כל ציטוטים במקום הנכון, כך עם PHP אתה יכול לעשות את זה באמצעות תכנות, ואתה יכול לעשות את זה ממש מהר. בואו לראות איך עושה את זה. אנחנו הולכים לפתוח את קובץ חדש. אנחנו הולכים לשים בתגי PHP שלנו. אנחנו הולכים לקרוא לזה concentrations.php, ועכשיו כשאתה עושה את זה, זה סוג של משהו טוב לחשוב על כאשר אתה מנסה לערבב ולהתאים PHP ו-HTML שלך שלך הוא להבין, בסדר, מה הוא חלק שאני רוצה תכנותי לייצר? מהו חלק שאני תכנותי יכול לייצר? זה נכון שאתה יכול לעשות את כל HTML שלך בתוך בלוקי PHP. אתה יכול להדהד כל HTML כמחרוזות. לדוגמה, אם אני רוצה להתחיל לעשות את התגים הנבחרים בתוך PHP אני יכול לומר הד, אומרים לבחור בשם = ריכוז, ואז למטה אהיה לי תג הד אחר או הד אחר בשם קרוב לבחור. זו דרך אחת לעשות את זה כי זה מה שממש לא הולך לעשות הוא להדפיס את המחרוזת היום כשזה לרוץ דרך מתורגמן PHP, כך התוצאה תהיה ה-HTML. אם אני שומר את הקובץ הזה כמו שהוא עכשיו ואני רץ concentrations.php php להסתכל על מה שיש לי. יש לי תג בחר הסגור הפתוח הזה. אם היינו צריך לעשות את זה ואני היה להציל את התוצאה הזאת לקובץ, אומרים, concentrations.html-המתנה, זה נראה כאילו אני כבר עברתי לצד השני, עכשיו אם אני פותח כאן concentrations.html אתה רואה יש לי קובץ HTML תקף. זה קצת מוזר? אנחנו משתמשים PHP כדי ליצור HTML, ליצור HTML התקף. כמו שאנחנו עושים זה שאנחנו פשוט סובלים הדפסת PHP HTML שאנחנו רוצים אותו להדפסה. זה ממש כמה אתרי PHP עובדים. כאשר אתה מבקר באתר ששולח לך למשהו כמו משהו, משהו, משהו dot com הלוכסן index.php המחשב, פשוטו כמשמעו, הוא קורא את index.php, מפעיל אותו באמצעות מתורגמן PHP, וכל זבל יוצא היא שולחת חזרה לדפדפן ואומרת היי, דפדפן מפרשת את זה כ-HTML. הדבר הנחמד הוא שזה יכול להיות כאב כל זמן לכתוב הד, הד, הד, הד ולהקיף הכל בציטוטים כמו זה, כך שאם אתה רוצה לכתוב HTML שהולך להיות סטטית עצמך שאתה יכול לעשות את זה ככה, לשים אותו בחוץ, לסגור אותו, ואז אתה מכניס לכאן רק בתוך תגי PHP שבו אתה יודע אתה רוצה תכנות ליצירה, ובמקרה הזה זה אלה תגי אופציות שהם כאב ליצירה. לדוגמה, נוכל לייצר תגי אופציות אלף על ידי עושה משהו כזה, אני $ <1000, אני + + ואומר ערך אפשרות הד = $-אופס, אני לא יכול לעשות את זה. ובכן, בואו לנסות את זה ולראות מה קורה. $ I ואז אומרת לי $