[Powered by Google Translate] [المادة 8 - أكثر راحة] [روب بودين - جامعة هارفارد] [هذا CS50. - CS50.TV] هذه الملاحظات قسم الاسبوع ستكون قصيرة جدا، لذلك أنا مجرد الذهاب الى الاستمرار في الحوار، يا رفاق ذاهبون للحفاظ على طرح الأسئلة، وسوف نحاول أن تملأ الوقت إلى أقصى حد ممكن. وهناك الكثير من الناس يعتقدون أن هذا ليس من الصعب pset بالضرورة، لكنه طويل جدا. المواصفات pset نفسها يستغرق ساعة للقراءة. نقدم لك الكثير من SQL يمكن أن تحتاج ربما للاستخدام. نسير لكم من خلال الكثير من ذلك، لذلك يجب أن لا تكون سيئة للغاية. وقد أي شخص أو التي انتهت؟ انها pset الماضي. أوه، يا إلهي. عادة هناك سكريبت واحدة بعد ذلك، ولكن تتغير الأمور التقويم 1 أسبوع يجعل كل شيء أقصر، ونحن لم يعد لدينا pset سكريبت. أنا لا أعرف ما إذا كان تأثير ذلك سكريبت من المقرر أن تظهر في الامتحان أو اختبار 1. أتصور أنها ستكون شيئا مثل ما تحتاج إلى معرفته رفيع المستوى الأشياء عن جافا سكريبت، ولكن أشك في أننا سوف تعطي فقط لأنك مستقيم شفرة جافا سكريبت وبما انك لم تكن لديهم pset في ذلك. ولكن ذلك يكون الاشياء للمراجعة مسابقة الاسبوع المقبل. قسم من الأسئلة. وهناك الكثير من هذه الاشياء هو سيئة إلى حد ما اللهجة، ولكن سنناقش لماذا. على عكس C، PHP هو "ديناميكيا المكتوبة" اللغة. ماذا يعني هذا، أنت تسأل؟ حسنا، يقول وداعا لجميع تلك المصقول، شار، وكثافة العمليات، والكلمات الرئيسية الأخرى التي تحتاج إلى استخدام عندما يعلن المتغيرات وظائف في C. في PHP، يتم تحديد نوع متغير من خلال القيمة التي انها تحتجز حاليا. قبل ذلك كنا اكتب هذا الرمز في ملف يسمى dynamic.php، يتم كتابتها بشكل حيوي PHP. هذا صحيح. أنا لا أتفق مع حقيقة أن هذا يعني أننا نقول وداعا لشار، تطفو، وكثافة العمليات، والكلمات الرئيسية الأخرى. الفرق الدقيق بين مكتوب وحيوي بديل، التي يتم كتابتها بشكل ثابت، هو أن كتابة حيوي، كل نوع التدقيق الخاصة بك والاشياء يحدث في وقت التشغيل، في حين كتبته بشكل ثابت يحدث في وقت الترجمة. الكلمة ثابتة بشكل عام يبدو أن تعني أشياء وقت الترجمة. أعتقد أن هناك استخدامات أخرى لذلك، ولكن في C عند تعريف متغير ثابت، يتم تخصيص التخزين لديها وقت الترجمة. هنا، كتبته بشكل حيوي يعني فقط ان - في C إذا حاولت إضافة سلسلة وعدد صحيح، عند ترجمة ذلك، انه سيكون للشكوى لأنه يحدث أن أقول أنه لا يمكنك إضافة الباحث ومؤشر. انها مجرد ليست عملية صالحة. هذا هو آخر شيء أننا سنصل إلى في الثانية. ولكن هذا النوع من التدقيق، وحقيقة أنه يشكو في وقت الترجمة، ثابت تدقيق نوع. هناك لغات حيث لا تحتاج إلى القول شار، تطفو، وكثافة العمليات، وجميع تلك الأشياء، ولكن يمكن أن أقول اللغة من سياق ما هو نوع الشيء أنه من المفترض أن يكون، ولكن هذا لا يزال كتبته بشكل ثابت. لذلك إذا كنت تأخذ 51، OCaml، فأنت لا تحتاج إلى استخدام أي من هذه الأنواع، ولكنه سوف لا تزال في وقت الترجمة يقول لا يمكنك أن تفعل هذا لأنك لخلط الباحث وسلسلة أ. كتبته بشكل حيوي يعني فقط أن في وقت ما خلال وقت التشغيل وأنت تسير في الحصول على الشكوى. إذا كنت قد استخدمت أيضا جافا من قبل، بشكل عام، أي ما يقرب من نوع C-اللغة سوف يتم كتابتها بشكل ثابت، لذلك عادة ما تكون C، C + +، جافا، كل تلك كتبته بشكل ثابت. في جاوة عند ترجمة شيء وأنت تقول كنت سلسلة ق يساوي شيئا جديدا غير سلسلة، أن يجري تقديم شكوى لأن هذه الأنواع فقط لا تصل المباراة. أن يجري تقديم شكوى في وقت الترجمة. ولكن كما أن لديها بعض الوقت ديناميكية الأمور مثل إذا كنت محاولة للادلاء شيء إلى نوع هذا أكثر تحديدا من نوعه الحالي، لا يوجد شيء يمكن القيام به في وقت الترجمة للتحقق ما إذا كان هذا يلقي سوف تنجح. جافا أيضا بعض دينامية التحقق من أن نوع وبمجرد وصوله إلى هذا الخط من التعليمات البرمجية عندما يكون تنفيذ في الواقع، انها تنوي القيام به المدلى بها، تحقق مما إذا كان ذلك يلقي صالح في المقام الأول، وإذا لم يكن، ثم انه سيكون للشكوى من أن لديك نوع غير صالح. نوع دينامية التحقق. اكتب هذا في ملف يسمى dynamic.php. Dynamic.php. أنا بفك ما قمت بعمله. لدينا متغير، وضعنا لال 7 عدد صحيح، ثم ونحن في طريقنا إلى طباعته و٪ S - أوه، نحن طباعة نوع منه، حتى gettype هو الذهاب الى العودة لنوع المتغير. نحن الطباعة فقط نوع مرارا وتكرارا. نحن php.dynamic.php فقط. سنرى أنه يتغير من عدد صحيح إلى سلسلة منطقية لونحن نمضي من خلال. في C لا يوجد اي نوع البيانات المنطقية، لا يوجد اي نوع بيانات سلسلة. * هناك شار ومنطقية تميل لمجرد أن يكون الباحث أو حرف أو شيء. في هذه الأنواع PHP موجودة، وهذا واحدة من مزايا كبيرة من خلال PHP C - أن العمليات هي أسهل بمراحل سلسلة في PHP من C. وهي تعمل فقط. حتى نعود هنا. ركضنا dynamic.php. هذا يحكي مترجم PHP، ودعا PHP، لتشغيل التعليمات البرمجية في dynamic.php PHP. إذا كان لديك أية أخطاء في الملف، وسوف اقول لكم المترجم! المترجم، وهذا هو الفارق الكبير بين آخر PHP وC. في C لديك لتجميع شيء ومن ثم تقوم بتشغيل هذا الملف المترجمة. في PHP أنت لا تجمع أي شيء. وبالتالي فإن مترجم PHP هو أساسا مجرد قراءة هذا سطرا سطرا. كان يضرب فار = 7 ثم يضرب ثم يضرب فار printf ثم يضرب printf وهلم جرا. هناك قليلا من تجميع تقوم به، وأنه وتخزين النتائج حتى إذا قمت بتشغيل البرنامج النصي في وقت لاحق يمكنك أن تفعل بعض، لكن المسألة الأساسية هي خط حسب خط الشيء. وهذا يعني أن الكثير من التحسينات التي نحصل عليها في C، مثل تجميع وانها عموما مجرد مترجم يمكن أن تفعل الكثير من الحيل لك. يمكن أن تأخذ بها المتغيرات غير المستخدمة، يمكن أن تفعل كل هذه أنواع الأشياء، يمكن أن تفعل العودية الذيل. في PHP كنت لن تحصل على هذه الميزة لأنه يحدث فقط للبدء في تنفيذ سطرا سطرا سطرا، وأنها لا تعترف حقا هذه الأمور بالسهولة نظرا لأنه ليس 1 تمريرة تجميع كبيرة على شيء ثم التنفيذ؛ انها مجرد خط سطرا. ذلك أن المترجم. نسخة إلى الكتابة لدينا دينامية: رائع، إيه؟ هل يمكن بالتأكيد أن تفعل ذلك في C! الآن، نرى ما اذا كان يمكنك معرفة نوع كل من القيم التالية. شاهد كمرجع. حتى 3.50. ما هو نوع هل تعتقد أن سيكون؟ وهنا لدينا أنواع. لدينا bools، أعداد صحيحة، ونقاط العائمة، سلاسل، المصفوفات، الكائنات، ومن ثم الموارد، والذي هو نوع من الغموض. أعتقد أن هناك في الواقع مثالا هنا. ثم هناك NULL. NULL هو نوع خاص. على عكس C حيث NULL هو مجرد مؤشر مع عنوان 0، في PHP، NULL هو نوع خاص بها حيث الشيء الوحيد صالحة من هذا النوع هو NULL. هذا هو أكثر فائدة لتدقيق الأخطاء. في C حيث كان لدينا هذه المشكلة حيث اذا رجعت NULL، هل هذا يعني أنك إرجاع مؤشر NULL NULL أو استخدام للدلالة على الخطأ أو كل هذا الخلط كان لدينا عند نقطة واحدة. هنا، والعودة NULL يعني عموما الخطأ. وهناك الكثير من الأشياء أيضا إرجاع كاذبة للخطأ. ولكن النقطة هو نوع NULL، الشيء الوحيد الذي من نوع NULL NULL هو. ثم رد مثل يمكنك تحديد بعض الوظائف مجهول. لم يكن لديك لإعطاء وظيفة اسم، لكنك لن تضطر إلى التعامل مع ذلك هنا. النظر في أنواع أنهم لا يتوقعون منا أن يعرف، ما رأيك في نوع قدره 3.50 هو؟ >> [طالب] عشري. نعم. ذلك ثم هنا، ماذا كنت تعتقد أن هذا النوع من هو؟ >> [طالب] صفيف. نعم. وكان أول واحد المصقول، والثاني عبارة عن صفيف. لاحظت أن هذه المجموعة ليست مثل مجموعة C حيث لديك لديه بعض الفهرس 0 القيمة، الفهرس 1 ديها بعض القيمة. هنا الأرقام القياسية هي أ، ب، ج ووالقيم هي 1 و 2 و 3. في PHP لا يوجد فرق بين مجموعة النقابي وفقط مجموعة والعادية كما كنت التفكير في الأمر في C. هناك فقط هذا، وتحت غطاء محرك السيارة مجموعة العادية هو مجرد مجموعة النقابي حيث 0 خرائط لبعض القيمة بنفس الطريقة على خرائط لبعض القيمة. لهذا السبب، يمكن أن تكون سيئة جدا PHP لأشياء رمز / القياس حقا سريعة منذ C في حين كنت تستخدم مجموعة تعرف أن الوصول إلى أحد أعضاء حان الوقت ثابت. في PHP الوصول إلى الأعضاء هو الذي يعرف كم من الوقت؟ انها ثابتة على الأرجح إذا التجزئة بشكل صحيح. من يدري ما يفعل حقا تحت غطاء محرك السيارة؟ كنت حقا بحاجة للنظر في تنفيذ لنرى كيف يجري التعامل مع ذلك. حتى ذلك الحين الدالة fopen. أعتقد هنا دعونا الدالة fopen دليل PHP فقط أن ننظر إلى نوع الإرجاع. نرى هنا يمكنك البحث عن أي وظيفة الى حد كبير في دليل PHP وهذا هو نوع من الصفحة رجل PHP. نوع الإرجاع ستكون الموارد. هذا هو السبب كنت قد بحثت عنه، لأننا لم تحدد حقا الموارد. فكرة الموارد، في C حصلت نوع من FILE * أو أيا كان؛ في PHP هو المورد الخاص بك * FILE. هذا ما كنت على وشك أن تقرأ من، هذا ما كنت على وشك أن أكتب. انها عادة الخارجية، لذلك فمن مورد يمكنك سحب الأشياء من وإلى رمي الأشياء. وأخيرا، ما هو نوع من NULL؟ >> [طالب] NULL. نعم. وبالتالي فإن الشيء الوحيد الذي هو NULL NULL هو. NULL NULL هو. ميزة واحدة من نوع PHP نظام ل(للأفضل أو للأسوأ) هو قدرته على التلاعب أنواع. عند كتابة سطر من التعليمات البرمجية التي تجمع بين القيم PHP من أنواع مختلفة، سوف PHP تحاول أن تفعل الشيء المعقول. تجربة كل من الأسطر التالية من التعليمات البرمجية PHP. ما تطبع؟ هل هو ما كنت متوقع؟ لماذا أو لماذا لا؟ هذه الحقيقة عن PHP هو ما يجعل من كتابة ما نسميه ضعيفة. كتابة ضعيفة ومكتوب بشدة، هناك استخدامات مختلفة لهذه المصطلحات، ولكن معظم الناس يستخدمون كتابة ضعيفة ومكتوب بشدة يعني هذا النوع من الاشياء حيث ("1" + 2)؛ يعمل ذلك. في C فإن ذلك لا تعمل. يمكنك أن تتخيل هذا لا يعمل. خلط كثير من الناس حتى كتابة دينامية والكتابة ضعيفة والكتابة وكتابة ثابتة قوية. الثعبان هو مثال آخر على اللغة التي كتبتها انها حيوي. يمكنك رمي حول أنواع المتغيرات في وانها سوف تحدد في وقت التشغيل أي checkings الخطأ. في بيثون انه سيكون لتنفيذ هذا، وسوف نرى ("1" + 2)؛ وسوف تفشل هذه لأنه يقول لك لا يمكن إضافة سلسلة وعدد صحيح. في PHP، الذي هو مجرد حيوي كما كتبته، وهذا لن تفشل. الكتابة له علاقة ضعيفة مع حقيقة أنه يفعل أشياء مع أنواع التي لا تجعل حقا معنى بالضرورة. حتى ("1" + 2)، وأنا يمكن أن نتصور أن يكون السلسلة 12، يمكنني أن أتصور أنه يجري سلسلة 3، يمكنني ان اتصور كونها ال 3 عدد صحيح. ليس جيدا بالضرورة محددة، ونحن في طريقنا لرؤية ربما هنا أننا عندما طباعة ("1" + 2)، بل على الارجح في نهاية المطاف كونها مختلفة من الطباعة (1 + "2"). وهذا يميل إلى أن يكون، في رأيي، إلى الأسوأ. هنا يمكننا أن نحاول هذه. آخر خدعة قليلا عن PHP هو أنك لا تحتاج إلى الكتابة فعلا الملف. فإنه قد وضع تشغيل هذا الأمر. حتى PHP-R، ثم يمكننا رمي في الأمر هنا: "الطباعة ('1 '+ 2)؛" وسوف رمي سطر جديد. هذه المطبوعة 3. يبدو فإنه يطبع 3 و انها ال 3 عدد صحيح. حتى الآن دعونا نحاول العكس: "الطباعة (1 + '2 ')؛ نحصل على 3، والحال كذلك أن يكون صحيحا 3؟ بصراحة لدي أي فكرة. يبدو أن يتسق. هناك أبدا أي فرصة لكونها ال 12 سلسلة أو أي شيء من هذا القبيل لأن PHP، خلافا جافا سكريبت وجافا جدا، لديه مشغل منفصل لسلسلة. سلسلة في PHP هو نقطة. حتى الطباعة (1 '2 ')؛ سوف تعطينا 12. هذا يميل إلى أن تؤدي إلى الارتباك حيث يحاول الناس أن تفعل شيئا مثل = + شارع بعض الشيء الآخر أنهم يريدون إضافة إلى نهاية السلسلة الخاصة بهم، والتي يجري عليها بالفشل. ما عليك القيام به شارع. = حتى لا ننسى سلسلة في PHP هو نقطة. أمور أخرى للمحاولة: طباعة ("CS" + 50)؛ لقد قلت لك أنه لا يوجد أمل في هذا أدى إلى CS50 منذ سلسلة ليست +. ماذا كنت تعتقد أن هذا هو الذهاب الى نهاية الأمر؟ بصراحة لدي أي فكرة على الإطلاق. يبدو انها مجرد 50. ترى السلسلة، وأراهن إذا وضعنا 123CS - ترى السلسلة الأولى، فإنه يحاول قراءة عدد صحيح منه أو عدد منها. في هذه الحالة تراه 123CS. واضاف "هذا لا معنى له كعدد، لذلك أنا مجرد الذهاب الى التفكير من 123." حتى 123 + 50 ستكون 173. وهنا يبدأ قراءة هذا كعدد. لا أرى أي شيء، لذلك يعامل ك 0 فقط. لذلك 0 + 50 ستكون 50. هذا أفترض لن يفعل شيئا من هذا القبيل. أنا أفكر 99. نعم، لأنه ذاهب الى اتخاذ أول - حتى 99. هنا (10/7)، لو كان هذا C، ما من شأنه أن يعود؟ [طالب] (1). نعم >>، سيكون من 1 لأن 10/7 يقسم 2 أعداد صحيحة. عدد صحيح مقسوما على عدد صحيح هو الذهاب الى بإرجاع عدد صحيح. فإنه لا يمكن العودة 1 نقطة ما من شأنه أن يكون، لذلك يحدث فقط للعودة 1. طباعة هنا (10/7)؛ انه سيكون لتفسير الواقع ذلك. وهذا يعني أنه إذا كنت فعلا تريد أن تفعل التقريب عدد صحيح وأشياء من هذا القبيل، ما عليك القيام به الطباعة (الطابق (10/7))؛ في C هو على الأرجح غريب التي يمكنك الاعتماد على اقتطاع عدد صحيح بشكل منتظم، ولكن في PHP لا يمكنك لأنه سوف تتحول تلقائيا إلى عشري. ثم (7 + صحيح)؛ ماذا كنت تعتقد أن سيكون؟ انا التخمين 8 إذا انه سيكون لتفسير صحيح ك 1. يبدو انها 8. لذلك أي شيء فعلناه في الدقائق ال 10 الماضية يجب أبدا أن تفعل على الاطلاق. سترى التعليمات البرمجية التي يقوم بهذا. فإنه ليس من الضروري أن تكون واضحة قدر هذا. هل يمكن أن يكون 2 المتغيرات، و 1 متغير يحدث أن تكون سلسلة والمتغير أخرى يحدث أن يكون الباحث، ومن ثم قمت بإضافة هذه المتغيرات معا. منذ يتم كتابتها بشكل حيوي PHP وانها لن تفعل أي نوع فحص لك ومنذ أن كتبت ذلك ضعيفة وفقط لأنه سوف رمي هذه الأشياء معا تلقائيا وكل شيء سوف تعمل فقط، فإنه من الصعب أن تعرف حتى أن هذا المتغير يجب أن تكون سلسلة الآن، لذلك لا ينبغي لي إضافته إلى هذا المتغير، والذي هو عدد صحيح. أفضل الممارسات هو إذا متغير سلسلة، ويبقيه كسلسلة إلى الأبد. إذا كان المتغير هو عدد صحيح، ويبقيه على أنها الباحث إلى الأبد. إذا كنت ترغب في التعامل مع الأعداد الصحيحة والسلاسل، يمكنك استخدام varsint - وهذا سكريبت. Intval. أفعل ذلك في كل وقت. PHP وجافا سكريبت خلط I كل شيء. حتى intval يجري لإرجاع قيمة عدد صحيح من متغير. إذا نحن نمر في "الطباعة (intval ('123 '))؛ تحصل 123. Intval نفسها لن تفعل الاختيار بالنسبة لنا انه حصرا عددا صحيحا. دليل PHP، وهناك وظائف كثيرة جدا المتاحة، حتى هنا أعتقد أن ما أود أن استخدام is_numeric هو الأول. انا التخمين ان عاد كاذبة. هذا شيء آخر علينا أن نذهب أكثر هو ===. is_numeric ذلك (''123df)، وكنت لا أفكر في is_numeric كما ان. في C سيكون لديك لتكرار عبر كل الحروف وتحقق لمعرفة ما إذا كان كل حرف هو الرقم أو أيا كان. هنا is_numeric سوف تفعل ذلك بالنسبة لنا، وانها تعود كاذبة. طبع لذلك عندما طبع هذه، لا شيء، لذلك أنا هنا لرؤية مقارنتها، هل يحدث أن تكون كاذبة؟ وحتى الآن انها الطباعة 1. على ما يبدو فإنه يطبع (1)، صحيح بدلا من طباعة صحيحا على النحو الصحيح. أتساءل عما إذا كان أفعل print_r. لا، انها لا تزال 1. العودة إلى ===، == لا يزال موجودا، وإذا كنت تتحدث الى انه سوف يقول تومي == على ما يرام تماما. انا ذاهب الى القول ان == رهيب، ويجب أن تستخدم أبدا. == الفرق هو أن يقارن == الأشياء حيث يمكن أن يكون صحيحا حتى لو انهم ليسوا من نفس النوع، في حين === يقارن الأشياء وأول مرة الشيكات هم نفس النوع؟ نعم. حسنا، الآن أنا ذاهب لمعرفة إذا كانت المقارنة في الواقع أن تكون على قدم المساواة. تحصل أشياء غريبة مثل 10 يساوي - دعونا نرى ما تقول. حتى ('10 '== '1 E1')؛ هذا يعود صحيحا. هل لديها أي التخمينات يعود السبب في هذا صحيح؟ فإنه لا يقتصر فقط على ذلك. ربما هذا هو تلميح. ولكن إذا قمت بتغيير ذلك إلى أنه كان F - الرتق! I الاستمرار في استخدام علامات اقتباس مزدوجة. السبب علامة التنصيص والصراخ في وجهي لأنني قد وضعت هذا في علامات اقتباس مزدوجة. لذلك يمكن أن الهروب من علامات الاقتباس المزدوجة في هنا، ولكن علامات الاقتباس المفردة تجعل من السهل. حتى ('10 '== '1 F1')؛ لا يطبع صحيح. ('10 '== '1 E1')؛ يطبع صحيح. [طالب] هل عرافة؟ انها ليست >> عرافة، لكنه وثيق أنه مثل - 1E1، العلمي. تعترف 1E1 ك 1 * 10 ^ 1 أو أيا كان. تلك هي أعداد صحيحة متساوية. اذا لم نفعل === بعد ذلك ستكون خاطئة. أنا فعلا أي فكرة إذا فعلنا == ماذا عن (10 و ''10abc)؛؟ حسنا. ذلك أن هذا صحيح. تماما مثل ذلك عندما كنت فعلت (10 + '10abc ')؛ وسيكون 20، هنا (10 == '10abc ')؛ صحيح. أسوأ من الأشياء مثل (== كاذبة NULL)؛ صحيح أو (كاذبة == 0)؛ صحيحا، (كاذبة == [])؛ هناك حالات غريبة من - هذا واحد من تلك الحالات غريبة. تلاحظ أن (كاذبة == [])؛ صحيح. ('0 '== كاذبة)؛ صحيح. ('0 '== [])؛ غير صحيح. == ذلك هو بأي حال من الأحوال متعدية. يمكن أن يكون مساويا لب ويمكن أن يكون مساويا لج، ولكن قد لا تكون ب يساوي ج. هذا رجس لي، ويجب عليك دائما استخدام ===. [طالب] هل يمكن أن تفعل! == كذلك؟ >> [بودين] نعم. وما يعادل يكون! = و! ==. يتم إحضارها فعلا هذا الأمر في المواصفات pset فيها الكثير من وظائف العودة - دليل PHP جيدة حول هذا الموضوع. فإنه يضع في مربع أحمر كبيرة، "وهذا سيعود كاذبة إذا كان هناك خطأ." 0 عودة ولكن هو شيء معقول تماما في العودة. التفكير في أي وظيفة التي من المتوقع أن يعود عدد صحيح. دعنا نقول من المفترض هذه الدالة لحساب عدد الأسطر في ملف أو شيء. في ظل الظروف العادية، يمكنك تمرير هذه الوظيفة ملف وانه سيكون لإرجاع عدد صحيح يمثل عدد الخطوط. لذلك 0 هو عدد معقول تماما إذا كان الملف فارغ فقط. ولكن ماذا لو كنت تمريرها ملف غير صالح وظيفة يحدث للعودة كاذبة إذا كنت تمر عليه ملف غير صالح؟ إذا كنت تفعل ذلك تماما == كنت لا التفريق بين حالة وملف غير صالح ملف فارغ. دائما استخدام ===. هذا كل من هؤلاء. في PHP، ونوع الصفيف هو مختلف عما كنت تستخدم لفي C. في الواقع، كنت قد لاحظت بالفعل هذا أعلاه عندما رأيت أن هذا هو نوع من مجموعة. بناء الجملة قوس هو جديد ابتداء من PHP 5.4، وهو الإصدار الأحدث من PHP. قبل هذا كان لديك دائما أن أكتب مجموعة ('A' -> 1، 'ب' -> 2. هو أن منشئ للصفيف. الآن قد حان أخيرا حول PHP لبناء جملة لطيفة من الأقواس فقط مربع، الذي هو مجرد ذلك أفضل بكثير من الصفيف. ولكن بالنظر PHP 5.4 هو الإصدار الأحدث، قد تصادف الأماكن التي لا تملك حتى PHP 5.3. خلال الصيف ركضنا في هذه المسألة حيث PHP 5.3 وكان ما كان لدينا في الجهاز، ولكن الخادم الذي بذلنا كافة الكتاب والصف وتقديم كل ما لالاشياء كان PHP 5.4. دفع عدم معرفة هذا، ونحن وضعت في 5.3، ليصل إلى 5.4، والآن كل من لا شيء مفاجئ من التعليمات البرمجية أعمالنا لأن هناك حدث لكانت التغيرات بين 5.3 و 5.4 التي ليست متوافقة إلى الوراء، وعلينا أن نذهب وإصلاح كافة الأمور لدينا التي لا تعمل لPHP 5.4. لهذه الفئة، حيث أن الأجهزة لديها PHP 5.4، أنه بخير تماما لاستخدام الأقواس المربعة. ولكن إذا كنت تبحث عن أشياء حول الإنترنت، إذا كنت تبحث عن بعض النوع من الاشياء مجموعة، وعلى الأرجح كنت تريد الذهاب لرؤية ولدت موجة من بناء جملة منشئ مجموعة وهذا ما كان منذ حولها منذ PHP وكان قوس مربع بناء الجملة في جميع أنحاء لبضعة أشهر الماضية أو كلما جاء 5،4 حولها. هذه هي الطريقة التي الفهرس. مثلما هو الحال في C كيف سيكون المؤشر ترأسها بين قوسين معقوفين مثل مجموعة $ [0]، $ مجموعة [1]، $ مجموعة [2]، كنت مؤشر بنفس الطريقة إذا كنت يحدث لديها مؤشرات وجودكم السلاسل. مجموعة مجموعة حتى $ ['A'] و $ ['ب']. $ مجموعة [ب]. لماذا يكون هذا الخطأ؟ فإنه سيقوم بإنشاء ربما تحذيرا ولكن لا تزال تعمل. PHP يميل للقيام بذلك. أنه يميل إلى مجرد "أنا ذاهب لتحذير لكم عن هذا، ولكن أنا مجرد الذهاب الى الاستمرار "والقيام بكل ما أستطيع." وسوف يترجم هذا على الأرجح إلى سلسلة، ولكن من الممكن أن في بعض نقطة في شخص قال الماضية تعريف ب أن يكون "أهلا بالعالم". حتى الآن يمكن أن يكون ب ثابت صفيف و$ [b] سوف يكون في الواقع العمل "أهلا بالعالم". أعتقد في هذه المرحلة، أو على الأقل لدينا إعدادات PHP، إذا حاولت مؤشر إلى صفيف وهذا المفتاح غير موجود، فإنه ستفشل. أنا لا أعتقد أنه سوف يحذر فقط لك. أو على الأقل يمكنك تعيينها بحيث لا تحذر فقط لك، فإنه يفشل فقط مباشرة تصل. الطريقة التي تحقق لمعرفة ما إذا كان هناك فعلا مثل هذا المؤشر هو isset. لذلك سوف isset ($ مجموعة ['مرحبا العالم']) عودة كاذبة. isset ($ مجموعة ['ب']) سيعود صحيحا. يمكنك خلط هذه جمل. أنا متأكد من هذه المجموعة ما سيكون في نهاية الأمر هو - يمكننا اختبار بها. أوه، أنا بحاجة PHPWord. هذا هو خلط بناء الجملة حيث يمكنك تحديد ما هي المفتاح ولم تقم بتحديد ما هو المفتاح. حتى 3 الحق هنا هو القيمة. لم تقم صراحة ما قال مفتاحه سيكون. ما رأيك مفتاحه ستكون؟ [طالب] 0. انا التخمين >> 0 لأنه فقط انها أول واحد نحن لم المحدد. يمكننا القيام به في الواقع اثنين من هذه الحالات. ذلك هو print_r طباعة متكررة. فإنه سيتم طباعة مجموعة كاملة. فإنه طباعة subarrays من الصفيف إذا كان هناك أي. print_r ذلك ($ مجموعة)؛ php.test.php. فإنه لا تبدو وكأنها أعطاها 0. هناك في الواقع شيء أن نأخذ في الاعتبار هنا، ولكننا سوف نعود إليها في الثانية. ولكن ماذا لو كنت يحدث لجعل هذا المؤشر 1؟ PHP لا يفرق بين مؤشرات سلسلة مؤشرات وعدد صحيح، حتى في هذه المرحلة قد تعرف أنا فقط فهرس 1 و يمكنني القيام به على حد سواء مجموعة $ [1] $ ومجموعة ['1 '] وسيكون من مؤشر نفس ونفس المفتاح. حتى الآن ما رأيك 3 وستكون؟ >> [طالب] (2). >> [بودين] انا التخمين 2. نعم. انها 2. ماذا لو فعلنا هذا هو 10، وهذا هو 4؟ ما رأيك المؤشر من 3 ستكون؟ أنا أفكر 11. تخميني على ما يفعل PHP - وأعتقد أنني قد رأيت هذا من قبل - وأنها تحتفظ فقط تتبع ما أعلى مؤشر رقمي انها تستخدم حتى الآن. انها لن تعيين مؤشر السلسلة إلى 3. سيكون دوما فهرس رقمي. لذلك بتتبع أعلى أحدا تعيينه حتى الآن، والذي يحدث أن تكون 10، وانها سوف تعطي 11 حتي 3. ما قلت من قبل، لاحظ الطريقة التي يتم طباعة هذه المجموعة. فإنه يطبع 10 مفتاح، مفتاح 4، مفتاح 11، مفتاح د. أو حتى السماح لتفعل - اعتقد انني لم يضع 0، ولكن من الطباعة 1، 2، 3، 4. ماذا لو أتحول هنا؟ أو دعونا التبديل في الواقع هذه 2. الآن فإنه يطبع 2، 1، 3، 4. صفائف PHP ليست تماما مثل الجدول التجزئة العادية. فمن المعقول تماما أن يفكر فيها والجداول التجزئة 99٪ من الوقت. ولكن في الجداول التجزئة وليس هناك من معنى الترتيب الذي تم إدخال الأشياء. وذلك في أقرب وقت كنت أدخله في الجدول الخاص بك التجزئة، تفترض عدم وجود قائمة مرتبطة ويمكن أن نحكم ضمن قائمة مرتبطة التي تم إدراجها الأولى. ولكن هنا لدينا 2 إدراج الأول وكان يعرف عندما يكون طبع هذه المجموعة أن 2 يأتي أولا. لا طباعته من أجل أي فقط. بنية البيانات التقنية التي تستخدم انها هي الخريطة أمر، مخططات لذلك مفاتيح القيم ويتذكر الترتيب الذي أدرجت تلك المفاتيح. انها في الأساس إلى بعض المضاعفات حيث انها في الواقع مزعج ل- دعونا نقول لديك مجموعة 0، 1، 2، 3، 4، 5 وتريد لإخراج مؤشر 2. طريقة واحدة لفعل ذلك، دعونا نرى ما يشبه. 0، 1، 2، 3، 4. إلغاء تعيين يحدث لإلغاء تعيين كل من متغيرات ومؤشرات الصفيف. إلغاء تعيين ذلك ($ مجموعة [2])؛ الآن ما هذا سوف تبدو؟ 2 هو انتهت للتو، لذلك فلا بأس تماما. أكثر مزعج هو إذا كنت تريد أن تكون الأمور فعلا مثل صفيف. أنا وضعت أرقام عشوائية. تلاحظ الآن مؤشرات بلدي. أريد أن يكون تماما مثل مجموعة C حيث يذهب من 0 إلى طول - 1 ويمكنني تكرار أكثر من ذلك على هذا النحو. ولكن سرعان ما فك مكان المؤشر الثاني، ما كان في مؤشر 3 لا تصبح الآن مؤشر 2. بدلا من ذلك فإنه يزيل فقط أن مؤشر والآن تذهب 0، 1، 3، 4. هذا معقول تماما. انها مجرد مزعج، وعليك أن تفعل أشياء مثل لصق مجموعة. نعم. [طالب] ماذا سيحدث لو كان لديك لحلقة وأراد لك أن تذهب أكثر من جميع العناصر؟ عندما وصل إلى 2، هل تحقق أي وقت مضى؟ بالتكرار عبر صفيف. هناك 2 طرق يمكنك أن تفعل ذلك. يمكنك استخدام العادية لحلقة. هذا هو آخر من التعقيد PHP. معظم اللغات، أود أن أقول، يكون نوعا من طول أو ليون أو شيء مما يدل على طول صفيف. في PHP انها العد. العد حتى ($ مجموعة)؛ $ ط +) + دعونا الطباعة فقط ($ مجموعة [$ ط])؛ إشعار: غير محدد تعويض: 2. انها مجرد الذهاب إلى فشل. هذا هو السبب في أن، بالنسبة للجزء الأكبر، فأنت لا تحتاج إلى تكرار عبر مجموعة من هذا القبيل. قد يكون من قبيل المبالغة، ولكنك لا تحتاج إلى تكرار عبر مجموعة من هذا القبيل لأن بناء جملة PHP يوفر لها foreach حيث foreach ($ $ مجموعة والعنصر). الآن إذا كنا طباعة ($ البند) - we'll مناقشته في الثانية - أن يعمل بشكل جيد تماما. الطريقة التي تعمل foreach هي الحجة الأولى هي مجموعة أنك بالتكرار عبر. والحجة الثانية، البند، من خلال تمرير كل من لحلقة انها سوف تأخذ على الشيء التالي في الصفيف. تذكر ذلك الصفيف له النظام. أول مرة من خلال حلقة ل، البند سيكون 123 بعد ذلك سوف يكون 12 بعد ذلك سوف يكون 13 بعد ذلك سوف يكون 23 وسوف يكون 213. الامور غريب حقا عندما كنت تفعل شيئا مثل foreach. دعونا نرى ما يحدث لأنك لا ينبغي أبدا القيام بذلك. ماذا لو أننا إلغاء تعيين ($ مجموعة [1])؛ وكان من المتوقع على الأرجح أن. كنت بالتكرار عبر هذه المجموعة، وفي كل مرة كنت unsetting المؤشر الأول. حتى لمؤشر 0، أول شيء، البند يأخذ على القيمة 0، لذلك ستكون 123. ولكن داخل لإلغاء تعيين مؤشر حلقة نحن 1، بحيث يعني ذهابه 12. طباعة بذلك. PHP_EOL. PHP_EOL هو السطر الجديد فقط، ولكن من الناحية الفنية أكثر المحمولة منذ الأسطر الجديدة في ويندوز يختلف عن الأسطر الجديدة على ماك وUNIX. على ويندوز السطر الجديد هو \ ص \ ن، في حين أنه يميل في كل مكان آخر مجرد أن يكون \ ن. تم تكوين PHP_EOL بحيث يستخدم أيا كان السطر الجديد من النظام الخاص بك هو. طباعة بحيث. دعونا لا print_r ($ الصفيف) في نهاية المطاف. لم يكن لدي أي فكرة أن يكون السلوك. البند لا يزال يأخذ على قيمة 12 على الرغم من أننا إلغاء تعيين 12 قبل وصلنا إليه من أي وقت مضى الصفيف. لا تأخذ كلامي على هذا، ولكن يبدو أن foreach بإنشاء نسخة من الصفيف ثم يأخذ البند على جميع قيم هذه النسخة. لذلك حتى لو قمت بتعديل مجموعة داخل لحلقة، لن أهتم. وسوف تأخذ على البند القيم الأصلية. دعونا نحاول unsetting ذلك. ما إذا كان هذا هو $ مجموعة [1] = "مرحبا"؛ على الرغم من أننا وضع "مرحبا" في الصفيف، البند أبدا يأخذ على تلك القيمة. هناك آخر لبناء جملة foreach الحلقات حيث وضعت لك 2 المتغيرات مفصولة سهم. هذا المتغير الأول سيكون مفتاح من هذه القيمة، وهذا المتغير الثاني سيكون البند نفسه بالضبط. هذا هو رتيبا هنا، ولكن إذا عدنا إلى حالتنا الأصلية من "أ" - 1>، 'ب' -> 1، إذا كنا هنا فقط لتكرار كل مجموعة بوصفه البند، البند سوف يكون 1 في كل مرة واحدة. ولكن إذا كنا نريد أيضا أن نعرف مفتاح المرتبطة بهذا البند ثم نفعل ما قيمته الرئيسية -> $ البند. حتى الآن يمكننا أن نفعل الطباعة ($ الرئيسية. ':'. الآن انها بالتكرار عبر والطباعة على كل مفتاح والقيمة المرتبطة به. شيء إضافية يمكننا القيام به في حلقات foreach هو قد تشاهد هذا النحو. قبل اقحام أسماء المتغيرات تميل إلى أن تكون PHP كيف يفعل المراجع. حيث المراجع متشابهة الى حد بعيد المؤشرات، أنت لا تملك مؤشرات، لذلك لا نتعامل مع الذاكرة مباشرة. ولكنك لديها مراجع حيث 1 متغير يشير إلى نفس الشيء متغير آخر. داخل من هنا دعونا نفعل $ البند. دعونا نعود إلى 10، 1. دعونا نفعل $ البند + +، وهذا لا يزال موجودا في PHP. يمكنك لا تزال تفعل + +. php.test.php. ولا بد لي من طباعته. print_r ($ مجموعة)؛ نحن طباعة 2 و 11. إذا كنت قد فعلت فقط foreach ($ $ مجموعة والبند) ثم سوف يكون العنصر القيمة 1 أول مرة خلال الحلقة. فإنه سيتم زيادة 1 حتي 2 ثم ننتهي. حتى بعد ذلك سوف تذهب من خلال مسار الثاني من الحلقة وهذا البند هو 10. انها زيادات البند إلى 11، وبعد ذلك أن ألقيت فقط. ثم نحن print_r ($ الصفيف)، ودعونا نرى أن هذا هو 1 فقط، 10. لذلك فقد الزيادة فعلنا. لكن foreach ($ & $ ومجموعة البند) الآن هذا البند هو البند نفس هذا الحق هنا. انها نفس الشيء. ذلك البند $ + + يتم تعديل مجموعة 0. في الأساس، ويمكنك أيضا القيام $ ك - مجموعة> $ البند ويمكنك القيام به $ [$ ك] + +؛ حتى طريقة أخرى للقيام بذلك، ونحن أحرار في تعديل البند، ولكن ذلك لن تعديل مجموعتنا الأصلية. ولكن إذا كان لنا أن استخدام ك، وهو أمر أساسي لدينا، فإننا يمكن أن مؤشر فقط إلى مجموعتنا باستخدام هذا المفتاح وزيادة ذلك. هذا أكثر مباشرة يعدل مجموعتنا الأصلية. يمكنك القيام بذلك حتى لو لسبب ما أردت القدرة على تعديل - في الواقع، هذا معقول تماما. هل لا تريد أن يكون لكتابة مجموعة $ [$ ك] + +، أردت فقط أن أكتب $ البند + + لكنك ما زالت تريد أن أقول إذا دولار (ك === 'A') ثم زيادة العنصر ثم طباعة مجموعتنا. حتى الآن ماذا نتوقع print_r أن تفعل؟ ينبغي أن تطبع ما هي القيم؟ [طالب] 2 و 10. >> [بودين] فقط إذا كان المفتاح "A" في الواقع أننا لا طباعة ذلك. ربما كنت نادرا جدا، إذا من أي وقت مضى، وسوف تحتاج إلى تعريف وظائف في PHP، ولكن قد ترى شيئا من هذا القبيل حيث يمكنك تحديد وظيفة مثل أي وظيفة. وعادة ما كنت أقول ($ فو، $ بار) ثم تحديد أن يكون أيا كان. ولكن إذا كنت تفعل هذا، فإن ذلك يعني أن كل ما يدعو أيا كان، ما يدعو باز، وبالتالي فإن الحجة الأولى التي تم تمريرها إلى الباز يمكن تغيير. دعونا نفعل $ فو + +؛ وهنا داخل دعونا نفعل باز ($ البند)؛ الآن نحن استدعاء دالة. يتم أخذ الحجة بالرجوع، وهذا يعني أنه إذا كنا تعديله نحن تعديل الشيء الذي تم تمريره. وطباعة هذا نتوقع - إلا إذا كنت افسدت جملة - وصلنا 2، 11، لذلك تم زيادة بالفعل. لاحظت نحن بحاجة المراجع في 2 أماكن. ماذا لو فعلت هذا؟ ماذا يعني هذا؟ [طالب] وسوف يتغير. نعم >>. البند هو مجرد نسخة من قيمة في الصفيف. لذلك سوف تتغير إلى البند 2، ولكن مجموعة ['A'] سيكون زال 1. أو ماذا لو أفعل هذا؟ الآن يتم إرسال العنصر إلى كنسخة باز. لذلك سيتم زيادة على نسخة من حجة إلى 2، ولكن لم يكن زيادة العنصر نفسه إلى 2. والبند هو نفس الشيء مثل مجموعة قوس أيا كان، لذلك لم يكن زيادة هذا الصفيف. لذلك كل تلك الأماكن في حاجة إليها. PHP هي عادة ذكية جدا حول هذا الموضوع. قد تعتقد أريد لتمرير بالإشارة - وكان هذا في الواقع على سؤال حول واحدة من psets. كان شيئا questions.txt حيث قال: لماذا قد ترغب في تمرير هذا البنية بالرجوع؟ ما هو الجواب على ذلك؟ [طالب] لذلك أنت لا تملك شيئا كبيرا لنسخ. نعم >>. ويمكن لبنية أن تكون كبيرة بشكل تعسفي، وعند تمرير البنية كوسيطة في فإنه يحتاج إلى أن البنية نسخ كامل لتمريرها إلى الدالة، في حين إذا كنت يمر البنية بالرجوع بعد ذلك يحتاج فقط إلى نسخ العنوان 4-البايت كوسيطة إلى الدالة. PHP قليلا أكثر ذكاء من ذلك. إذا كان لدي بعض من وظيفة وأمرر له مجموعة من 1،000 الأشياء، هل هذا يعني انه سيكون لدينا لنسخ جميع تلك الأشياء 1،000 من لتمريرها إلى الدالة؟ فإنه ليس من الضروري أن تفعل ذلك على الفور. إذا داخل هذه الوظيفة أنه لم يعدل في الواقع فو، إذا كان الأمر كذلك ($ === فو 'مرحبا') العودة الحقيقية؛ لاحظت أننا لم فعلا تعديل الداخل حجة هذه الوظيفة، وهو ما يعني أن كل ما صدر في وفو لا يحتاج ليتم نسخها لأنه ليس تعديله. حتى يتم تمرير دائما الطريق PHP يعمل هو الوسيطات حسب المرجع حتى محاولة فعلا لتعديله. الآن إذا قلت فو $ + +؛ وستجعل الآن نسخة من فو الأصلي وتعديل نسخة. هذا يوفر بعض الوقت. إذا كنت أبدا لمس هذه المجموعة الهائلة، فأنت لا تعديل في الواقع، فإنه لا يحتاج إلى جعل نسخة، في حين أننا لو وضعت للتو هذا العطف وهذا يعني أنه لا ينسخ حتى حتى لو كنت لا تعديله. ويسمى هذا السلوك النسخ عند الكتابة. سوف نرى ذلك في أماكن أخرى، وخاصة إذا كنت تأخذ دورة نظام التشغيل. النسخ عند الكتابة هو النمط المعتاد جدا حيث لا تحتاج لعمل نسخة من شيء ما لم يتغير في الواقع. نعم. [طالب] ماذا لو كان لديك الزيادة داخل الاختبار، ذلك أن العنصر فقط 1 من 1،000 تحتاج إلى تغيير؟ لست متأكدا. وأعتقد أنه سيكون نسخ الشيء كله، ولكن من الممكن انها ذكية بما فيه الكفاية أن - في الواقع، ما أنا أفكر هو تصور كان لدينا مجموعة يشبه هذا: $ array2 = [ ثم مؤشر "أ" هو مجموعة من [1 2 3 4]، ومؤشر 'ب' هو مجموعة من أيا كان. أحتاج الفواصل بين كل هؤلاء جميعا. تخيل وجود الفواصل. ثم 'ج' هو 3 قيمة. حسنا. الآن دعونا نقول نفعل $ باز ($ array2)؛ حيث باز لا يأخذ هذا حسب المرجع. حتى $ فو ['ج'] + +؛ هذا هو مثال على ذلك ما نحن فيه تمرير array2 كوسيطة وبعد ذلك يتم تعديل المؤشر المحددة للمجموعة من قبل تزايد عليه. بصراحة لدي أي فكرة عما PHP سيفعل. يمكن أن تجعل من السهل على نسخة من الأمر برمته، ولكن إذا انها ذكية، وستجعل نسخة من هذه المفاتيح حيث سيكون لذلك قيمته متميزة ولكن يمكن أن يشير ذلك إلى الصفيف لا تزال نفس 1،2،3،4 ويمكن أن يشير ذلك إلى الصفيف لا يزال نفسه. وسوف أكون باد عليه. نحن نمر في هذه المجموعة حيث هذا الرجل يشير إلى 3، وهذا يشير إلى الرجل [1،2،3،4]، هذا الرجل يشير إلى [34 ...] الآن أننا في تمرير فإنه إلى باز، ونحن تعديل هذا. إذا PHP ذكية، يمكن أن يفعل - كان لدينا لا يزال لنسخ بعض الذاكرة، ولكن إذا كانت هناك هذه subarrays ضخمة متداخلة لم نكن بحاجة لنسخ تلك. أنا لا أعرف إذا كان هذا هو ما تقوم به، ولكن يمكنني أن أتصور أنه فعل ذلك. وهذا هو أيضا ميزة كبيرة جدا من خلال C PHP. PHP يجعل الحياة أسهل بكثير بالنسبة للكثير من الأشياء، ولكنك النوع من ليس لديهم أي فكرة عن كيفية جيدا أنه سيتم تنفيذ لأنني ليس لدي أي فكرة تحت غطاء محرك السيارة عندما يكون صنع هذه النسخ من الأشياء، أوه، والتي ستكون نسخة وقت ثابت، هل هو مجرد الذهاب الى التغيير 1 المؤشر، وذلك سيكون من الصعب على نسخة خطية يبعث على السخرية؟ ماذا لو لم تتمكن من العثور الفضاء؟ أنها لا تحتاج بعد ذلك لتشغيل جمع القمامة للحصول على المزيد من الفضاء؟ ويمكن جمع القمامة بصورة تعسفية تتخذ طويلة. في C كنت لا داعي للقلق حول هذه الامور. يمكن كل سطر واحد كنت أكتب لك السبب الى حد كبير عن الكيفية التي يجري القيام بها. دعونا ننظر إلى الوراء في هذه. كيف لطيفة هو أن كنت لا تضطر إلى التعامل مع وظائف التجزئة، ربط القوائم، أو أي شيء من هذا القبيل؟ منذ العمل مع الجداول التجزئة من السهل جدا الآن، وهنا لغز متعة للعمل بها. فتح ملف يسمى unique.php وذلك في كتابة برنامج PHP (المعروف أيضا باسم "النصي"). فإننا نميل إلى تسميتها البرامج النصية اذا كانا لا يزالان الأشياء التي تقوم بتشغيل قصيرة في سطر الأوامر. في الأساس، أي اللغة التي لا تجمع ولكن كنت تريد الذهاب لتشغيل قابل للتنفيذ في سطر الأوامر، يمكنك استدعاء هذا السيناريو قابل للتنفيذ. ويمكنني أن فقط كذلك كتابة برنامج C أن يفعل ذلك، ولكن أنا لا نسميها النصي منذ أن جمع لأول مرة ومن ثم تشغيل ثنائي. ولكن هذا البرنامج PHP ونحن في طريقنا للدعوة الى البرنامج النصي. أو إذا كتبنا في بايثون أو بيرل أو Node.js أو أي من تلك الأشياء، كنا ندعو لهم كافة البرامج النصية لأنك تشغيلها في سطر الأوامر لكننا لا يجمع بينها. يمكن أن نفعل هذا بسرعة كبيرة. نحن لن تستخدم argv. دعونا فقط من خلال هذه ضربة. نسميها فريدة من نوعها، كتابة برنامج. يمكنك افتراض أن المدخلات سوف تحتوي على كلمة واحدة في كل سطر. في الواقع، سوف تكون تافهة جدا argv للاستخدام. unique.php. الشيء أولا، ونحن نريد للتحقق مما إذا تم مررنا 1 سطر الأوامر الوسيطة. تماما كما كنت تتوقع argc argv في وC، لا يزال لدينا في تلك PHP. إذا كان الأمر كذلك ($ argc! == 2) ثم أنا لن تتعامل مع طباعة رسالة أو أي شيء. أنا فقط الخروج، رمز الخطأ 1. ويمكنني أن يعود أيضا 1. نادرا ما في PHP أنت في هذه الدولة التي نحن في - عادة كنت في وظيفة التي دعا اليها دالة يسمى من قبل دالة يسمى من قبل وظيفة. وإذا ما سارت الأمور بشكل خاطئ وكنت ترغب فقط في الخروج كل شيء تماما، الخروج تنتهي فقط البرنامج. هذا موجود أيضا في C. إذا كنت في وظيفة في وظيفة في وظيفة في وظيفة وتريد قتل فقط البرنامج، يمكنك الاتصال الخروج، وسوف يخرج للتو. ولكن في PHP، بل انها أكثر النادرة التي نحن في هذا المستوى الأعلى. عادة نحن داخل نوعا من وظيفة، لذلك فإننا ندعو الخروج بحيث لم يكن لدينا للعودة بنسبة 1 الشيء الذي يدرك ثم هناك خطأ بحيث يعود حتى لو يعترف كان هناك خطأ. نحن لا نريد للتعامل مع ذلك، حتى خروج (1)؛ عودة (1)، وسوف يكون في هذه الحالة ما يعادلها. ثم ما نريد لفتح نريد أن الدالة fopen. الحجج سوف تبدو مشابهة جدا. نريد أن الدالة fopen ($ argv [1]، ونحن نريد لفتحه للقراءة. وترجع الموارد التي نحن في طريقنا للدعوة و. هذه تبدو مشابهة جدا لكيفية C يفعل ذلك إلا أننا لا يجب أن أقول * FILE. بدلا من ذلك نقول دولار فقط و. حسنا. في الواقع، أعتقد أن هذا يعطي لنا حتى تلميح الى PHP دالة يسمى الملف. PHP ملف. ما هذا هو الذهاب الى القيام به هو قراءة الملف بأكمله في صفيف. أنت لا تحتاج حتى إلى الدالة fopen ذلك. انها سوف تفعل ذلك بالنسبة لك. حتى $ = خطوط ملف ($ argv [1])؛ الآن كل من خطوط ملف في الخطوط. الآن نحن نريد لفرز خطوط. كيف يمكننا فرز خطوط؟ نحن فرز خطوط. والآن يمكننا طباعتها أو أيا كان. ربما أسهل طريقة هي foreach ($ $ خط خطوط و) صدى $ الخط؛ [طالب] لن نعبر حتى خطوط عن طريق الرجوع إلى شيء نوع؟ هذا هو المكان الذي سوف يتحدد نوع ونوع الوظيفة (& $ الصفيف). عند استدعاء الدالة كنت لم تمر من قبل المرجعية. انها وظيفة التي تعرف بأنها الاستيلاء عليها كمرجع. هذا هو في الواقع تماما ما حدث من خطأ عندما وضعنا كل شيء لخدمتنا عندما ذهبنا 5،3 حتي 5،4. حتى 5.4، وكان هذا معقول تماما. وظيفة لا نتوقع أن أعتبر كمرجع، ولكن يمكنك تمرير فإنه كمرجع إذا كان الأمر كذلك وظيفة لا يحدث لتعديله، انها لا تزال تعديل. ابتداء من 5.4، أنت ليس من المفترض لك أن تفعل هذا. حتى الآن الطريقة الوحيدة التي يمر بها الإشارة إذا كانت وظيفة لا بشكل صريح. إذا كنت لا تريد أن تعديله، ثم ما عليك القيام به $ $ = نسخة ونسخة خطوط المرور. وحتى الآن يمكن الحفاظ خطوط وسيتم تغيير نسخة. php.unique.php. قد افسدت I شيء ما. غير متوقع 'ترتيب'. هناك سيكون ما يفعل ذلك بالنسبة لنا. انها ليست هناك حتى. لاحظت عند قراءة الدليل أنه من المتوقع أن الحجة الأولى أن يكون مجموعة وانها اتخذت من قبل المرجعية. لماذا يشكو هذا لي؟ لأن لدي هذا النوع لا تزال تعمل في هنا أنني لا أريد. حسنا، php.unique.php. لم أكن نقله حجة لأنني لم يكن لديك ملف. انها php.unique.php على test.php. هنا test.php طباعة كافة في أمر لطيف فرزها. تلاحظ أن ترتيب فرزها هو نوع من غريبة عن ملف رمز لأن كل خطوطنا فارغة سوف يأتي أولا ثم سوف تأتي من جميع المسافات البادئة لدينا المستوى 1 تأتي بعد ذلك كل من المسافات البادئة لدينا لا. نعم. >> [طالب] لذلك شفرة المصدر لم مرت عليه بالرجوع؟ والتي مرت عموما من حيث القيمة؟ [بودين] عند استدعاء دالة، أنه لم يحدد ما إذا كان صدر من قبل المرجعية. انها تعريف الدالة الذي يحدد ما إذا كان صدر من قبل المرجعية. وبالنظر إلى تعريف وظيفة من نوع أو مجرد النظر في هذا، فإنه يأخذ حجة حسب المرجع. بغض النظر عما إذا كان ذلك تريد أن تأخذ من قبل المرجعية، فإنه لا أعتبر حسب المرجع. فإنه تعديل الصفيف في المكان. وهذا غير مسموح به فقط. كنت لا يسمح للقيام بذلك. >> [طالب] أوه، حسنا. [بودين] هذا، نوع هو ذاهب الى اتخاذ خطوط بالرجوع وتعديله. ومرة أخرى، إذا كنت لا تريد أن تفعل ذلك، هل يمكن أن تجعل نسخة من نوع ما. حتى في هذه الحالة، ليست في الواقع نسخة نسخة من الخطوط. يشير فقط إلى نفس الشيء حتى يحصل لأول مرة تعديل، حيث انه سيكون أول من يحصل على وظيفة في تعديل نوع، حيث، لأنه النسخ عند الكتابة، والآن نسخة من نسخة يجري في هذا الشأن. يمكنك أيضا القيام بذلك. هذا هو مكان آخر يمكنك ان ترى العطف. أنت ترى ذلك في حلقات foreach، تراها في الإعلانات وظيفة، وسترون ذلك فقط عند تعيين المتغيرات. الآن وقد أنجزنا شيئا من خلال ذلك لأن نسخة وخطوط هي حرفيا نفس الشيء. يمكنك استخدام خطوط ونسخ بالتبادل. يمكنك القيام إلغاء تعيين ($ نسخة)، والتي لا خطوط إلغاء تعيين، تفقد فقط إشارة لنفس الشيء. وذلك من هذه النقطة، والآن خطوط هي الطريقة الوحيدة التي يمكنك الحصول على خطوط. الأسئلة؟ نعم. [طالب] تماما من الموضوع، ولكنك لم يكن لديك لإغلاق PHP مع - >> أنت لا تفعل ذلك. حسنا. [بودين] سأذهب إلى حد القول انها عادة سيئة لإغلاقها. وهذا ربما من قبيل المبالغة، وبخاصة في الكتابة، ولكن دعونا نرى ماذا سيحدث إذا قمت بذلك. فعلت ذلك لاشيء. ماذا لو أردت - [تنهدات] ولست بحاجة لتمرير وسيطة. تبادل لاطلاق النار. دعوت من الخطأ. php.unique.php حتى مع وسيطة. الآن أنا لست بحاجة إلى هذا حتى. أنا تمريرها حجة صحيحة. هذا طبع كل ما هو الطباعة. أنا طباعة نسخة ونسخة غير موجود. حتى خطوط. طباعته كل شيء، وثم لاحظ كل هذا غير المرغوب فيه إلى هنا، لأنه في أي شيء PHP ما هو خارج من العلامات PHP هو مجرد الذهاب لطباعتها حرفيا. هذا هو السبب في HTML، انها لطيفة جدا أن أتمكن من القيام DIV كذا وكذا وكذا فئة أو أيا كان، بلاه، بلاه، بلاه ومن ثم القيام ببعض كود PHP ومن ثم القيام DIV نهاية. وطبع هذا الآن يمكنني الحصول على بلدي لطيفة DIV حتى اعلى، كل ما PHP المطبوعة، DIV في الأسفل. خيمة عندما يكون هناك شيء من هذا القبيل يحدث، وهو أمر شائع جدا، مجرد سطر جديد طائشة في الجزء السفلي من الملف. وكنت لا أعتقد أنه سيكون كبيرا في التوصل الى اتفاق حتى النظر في حقيقة أن مع المتصفحات - كيف الموجهات العمل أو أساسا لأي عمل رؤوس، عند إجراء اتصال إلى موقع على شبكة الانترنت ويرسل مرة أخرى كل هذه الأشياء ورؤوس مثل 200 أو استجابة استجابة إعادة توجيه أو أيا كان، رؤوس صالحة فقط حتى يتم إرسال البايت الأول من البيانات. يمكنك إعادة توجيه آلاف المرات، ولكن سرعان ما يتم إرسال البايت الأول من البيانات لسنا من المفترض أن إعادة توجيه مرة أخرى. إذا كان لديك السطر الجديد طائشة في الجزء السفلي من ملف ودعونا نقول لكم ان استخدام هذه الوظيفة ومن ثم تريد - دعنا نقول انها آخر ملف index.php وهذا شيء كنت require_once - لا أستطيع أن أفكر في مثال جيد على ذلك. قضية يحدث عندما يحصل ردد هذا الخط في الجزء السفلي. كنت لا تريد أي شيء قد رددت بعد. حتى ولو كنت لا تنوي الحصول على أي شيء على صدى، ولم تحصل على شيء وردد وحتى الآن لم تكن من المفترض أن ترسل أي رؤوس أكثر وأنت تسير في الحصول على الشكاوى. انك لا تحتاج هذه العلامات الختام. إذا كنت تخطط لفعل شيء مع HTML - وانه من المعقول تماما أن تفعل كل ما DIV إلى هنا ثم في هذه المرحلة يمكنك أو لا يمكنك إدراجها. لا يهم حقا. ولكن في البرامج النصية PHP انها نادرة لإغلاقه. عندما يكون كل شيء PHP، كل شيء، لا تحتاج حقا لإغلاقه / يجب أن لا إغلاقه. التعامل مع السلاسل هو أجمل بكثير مما كانت عليه في C. في PHP يمكنك تحديد سلسلة مع علامات الاقتباس المفردة أو المزدوجة. مع علامات الاقتباس المفردة لا يمكنك استخدام "الهروب" متواليات. الهروب باستمرار، بلاه، بلاه، بلاه. printf ذلك أمر نادر الحدوث جدا في PHP. اعتقد انني سوف تستخدم printf إذا أردت أن تفعل الشيء - في pset 5 كنت تستخدم sprintf أو أيا كان. ولكن كنت تريد أن تفعل 001.jpg 002.jpg و. حتى لهذا النوع من الاشياء حيث كنت فعلا تريد لتنسيق النص أود أن استخدام printf. لكن على خلاف ذلك أود أن مجرد استخدام سلسلة سلسلة. لم أكن حقا استخدام printf. نحن التفريق فقط بين علامات الاقتباس المفردة تفاصيل وعلامات اقتباس مزدوجة. أكبر الفرق هو أن علامات الاقتباس المفردة، وسيتم طباعته حرفيا. لا يوجد اي نوع البيانات شار في PHP، على عكس C، لذلك هذا هو ما يعادل ذلك. انهم على حد سواء سلاسل. والشيء الجميل في سلاسل اقتباس واحد هو أنني يمكن أن أقول "مرحبا العالم!" بلاه، بلاه، بلاه، $ $ wooo. ماذا يحدث عندما أقوم بطباعة هذا سيكون طباعته حرفيا. دعونا نتخلص من كل الاشياء لدينا. صدى ذلك $ str1؛ انها طبعت حرفيا كل من تلك الأشياء: علامات الدولار، ن مائل، والتي كنت اعتقد سيكون الأسطر الجديدة - كل هذه الأشياء فإنه يطبع حرفيا. الشيء الوحيد الذي كنت بحاجة للهروب من علامات الاقتباس المفردة لأن خلاف ذلك فإنه يعتقد انها إغلاق علامات الاقتباس المفردة. نقلت مزدوجة، مختلفة تماما. ونحن نرى بالفعل تسليط الضوء على تركيب وcluing لنا إلى ما هو على وشك الذهاب ابعد من الصواب. php.unique. غير معروف متغير: wooo لأن يتم تفسير ذلك على أنه متغير يسمى wooo. علامات اقتباس مزدوجة تتيح لك إدراج المتغيرات في - دعونا نقول $ = اسم "روب"؛ صدى ذلك "مرحبا، اسمي $ اسم!"؛ ويعترف هذا كمتغير. عند تشغيل ذلك - وأنا سيتم إدراج سطر جديد - مرحبا، اسمي روب! وأهلا بالعالم! هذا هو لأنني لم إزالة طباعة wooo أعلاه. هناك 1 خطوة أخرى يمكنك القيام به. $ مجموعة = [1، 2، 3]؛ ماذا لو كنت تريد طباعة الفهرس الأول من الصفيف؟ لديك مجموعة $ [0]. وتسليط الضوء على تركيب هو فكرة. ما هذا سيفعل؟ php.unique. مرحبا، اسمي 1!! وهي ليست ما أردت. كذب تسليط الضوء على تركيب لي. دعونا نحاول "أ" -> 1، 'ب' -> 2. هذه هي الطريقة التي كنت قد لكتابتها. اقتباس واحد غير متوقعة (T_ENCAPSED كذا وكذا وكذا وكذا وكذا). والفكرة هي أنه ليس الاعتراف هذا كجزء من مجموعة. انها لا تعترف هذه مجموعة وفهرستها من قبل رسالة. تريد أن تفعل ذلك تحيط بها الأقواس المتعرجة، والآن سوف كل ما هو في هذا متعرج يكون محرف، التي هي الكلمة التي نستخدمها لإدراج هذه المتغيرات بطريقة سحرية في الأماكن الصحيحة. به الآن هذه، php.unique، ومرحبا، اسمي 1!! كما هو متوقع أو مرحبا، اسمي روب! شيء واحد وهذا النوع من لطيفة عن علامات الاقتباس المفردة هو أن - هناك بعض التكاليف إلى التحريف. إذا كنت تستخدم علامات الاقتباس المزدوجة، المترجم يجب أن يذهب أكثر من هذه السلسلة، التأكد من أن: "أوه، وهنا متغير. الآن أنا بحاجة للذهاب الحصول على هذا المتغير وأدخله هنا." حتى لو كنت لا تستخدم أية متغيرات، لا شيء داخل هذه علامات الاقتباس المزدوجة يجب محرف، ولكن فإنه لا يزال أبطأ لأنه يحتاج للذهاب أكثر من علامة التنصيص أبحث عن الأشياء التي تحتاج إلى محرف. يمكن الاقتباس واحدة بحيث يكون أسرع قليلا كأن شيئا يحتاج إلى محرف، وأنا أميل إلى استخدام علامات الاقتباس المفردة حتى ل، 'مرحبا، اسمي ". $ مجموعة ['A'] على أي حال. وهذا سوف يكون معادلا لما كان لدينا من قبل. ولكن من مسألة تفضيل. إذا كنت تستخدم PHP، وربما كنت لا تهتم الفرق السرعة. لا يوجد ما يكفي لسبب بها لتبدأ. أي أسئلة النهائي؟ ونحن في الواقع لم تحصل حتى من خلال كل ذلك، ولكن هذه الأشياء كانت مملة. وآخر شيء هذا النوع من طيبة في PHP هو عندما كنت تتعامل مع HTML، عليك استخدامه قليلا، وبالتالي فإن بناء الجملة المختصرة لطيفة لطباعة متغير. دون وضع PHP هنا، وهذا ما يسمى به القصير. رسميا اعتبارا من PHP 5.4، تم إهمال هذا. ينصح لك لوضع PHP. لا يزال يتم اعتماد هذا، والعلامات قصيرة جدا مع <؟ = لا تزال بخير تماما. ومن جانب دعم الافتراضي، بحيث يمكنك استخدام هذه كما يحلو لك، وانهم مريحة جدا. أي أسئلة؟ حسنا. البقاء أنيق، سان دييغو. [يضحك] وداعا. [يضحك] [تصفيق] [يضحك] [CS50.TV]