>> Для початку, щоб подолати те, що може бути ваш єдиний досвід
з веб-програмування, що я думав, що я зробити, це вкрасти пару
прикладів, які ви Можливо, ви бачили в 50
якщо ви взяли його минуле рік або два або можуть не мати
якщо ви взяли його кілька років тому
що кроки немовляти в сторону піридин знаю, як MBC,
Model View Controller, і що це означає?
Це ми побачимо знову, можливо, це просто спосіб відправною
прибирати дизайн деяких веб-частина програмного забезпечення,
або це може бути на стороні клієнта основі, а також, але ми будемо використовувати його
в контексті PHP, так що ми можемо почати
зробити більш складним проекти та роду
з окремих різних типів Код в додатку;
особливо так що, коли ми є кілька людей, які працюють
над проектом це набагато легше малювати лінії.
Отже, спочатку давайте подивитися на неоптимальним чином
реалізації щось.
Припустимо, що я хотів зробити супер просто Звичайно сайт 50
або будь-який інший клас, і що клас має речі
як лекції та навчального плану.
Я міг би зробити щось подібне тег h1 у верхній частині моєї сторінці
і неврегульований список з елементи списку чи все в порядку
просто мати маркований список Опції меню, так супер просто.
Так як ми можемо це зробити?
Ну, дозвольте мені йти в мій вікно терміналу тут,
і зверніть увагу, що у мене є для читання мене, і ми будемо посилаються на даний код
на веб-сайті ході автора в трохи,
і зверніть увагу, що у мене є Індекс точка HTM - індекс точка PHP.
Отже, дозвольте мені йти вперед і відкрити що, і звичайно ж це частково
нерозумно, що це навіть назвав PHP
тому що все у мене є є PHP коментар
а потім все інше це просто сирий HTML код.
Але знову ж, це версія нулю,
так це крок до щось більш цікаве,
але зверніть увагу, що я жорстко CS50 як назва, CS50 в h1,
і тепер у мене є лекції за посиланням,
тепер у мене є зв'язок програми курсу.
Гаразд, так що не здається все, що нерозумно
поки ви не виконаєте посилання виду лекції, і ви розумієте,
що все в порядку все по-іншому зміст, але це частково
про те ж; це назва сторінки і невпорядкований список.
Я натискаю нулю тиждень з в минулому році, і це частково
про те ж, h1 теги і неврегульований список
і, нарешті, я натискаю це, і я отримую до деякої лист,
який ковзає від що особливо лекція.
Так щось мені підказує, Я збираюся скулитися.
Якщо я відкриваю лекції точка PHP сповіщення
що це в значній мірі копією та вставки з попереднього файлу;
Я тільки що змінив назву на h1, і що ці зв'язки.
Що ще гірше, якщо я йду в тиждень нулю точка PHP,
це те ж саме копіювати вставити робота
за допомогою всього лише трохи Зміст оптимальною.
Так, звичайно, є можливість тут, щоб поліпшити,
і, звичайно, це повинно бути хороше правило;
в будь-який час ви відчуваєте, самі копіювання
і вставки щось більше, може бути, один раз,
червоні прапори повинні сподіваюся почати йти.
Але як же нам йти про поліпшення цього?
Ну, є кілька способів, і методи, які можна використовувати
У PHP розвивалися протягом Час, але давайте спробуємо це.
Відпусти мене в версії однієї, так що наступна ітерація цього,
і дозвольте мені спробувати очистити його небагато.
Право, один з РНР Найпростіші механізми
для вирішення цього завдання є стара школа вимагає функцію,
які значною мірою робить копію і паста змісту
деякого файлу прямо тут, як з різко включають,
та інші мови мають дуже схожі конструкції.
Так це виглядає трохи дивно зараз,
це безумовно не завершити виглядають веб-сторінку,
але імовірно, що це всередині заголовка точка PHP.
Всі інші речі, чи не так, HTML тегів, глава тег,
тег заголовка, весь матеріал це було вище головної суті
сторінки, яка, можливо, просто невпорядкований список,
і в кінці сторінки, ймовірно, як закритого тега тіла,
тег закритому HTML автора; досить нецікаво
але дублюють матеріал.
Гаразд, і впевнений, достатньо, якщо я йду
в заголовку точка PHP це просто вид сирітського фрагмента
зверху, а якщо йти в колонтитула точка PHP,
це сірих фрагмент знизу,
і я використовую ті ж фрагменти в інших моїх файлів,
як лекції точка PHP.
Гаразд, так що краще про це б ви сказали?
Так?
>> Простота.
>> Простота?
Я не знаю, такого роду поглядів багато страшніше для мене зараз, чи не так?
>> Якби я хотів змінити свій заголовок, вам не доведеться
змінити його у всіх попередня як файли.
Ви просто змінити його в заголовку.
>> Ось саме, так що, можливо, в що почуття це простіше,
може бути, я б сформулювати його, оскільки це просто легше оновлювати його.
Це може бути, трохи чистішим
тому що ви оновити це тільки в одному місці.
Так що це досить переконливим; що нестача
цього підходу або що проблема залишається
що ми насправді не вирішена?
Так?
[Off мікрофона коментар]
Так, точно, я маю на увазі, я ще копіювання і вставки;
це трохи менше, але тільки я під'їхав два з цих файлів,
і вони в значній мірі ще виглядали однаково.
Був вимагають, по крайней зверху, вимагають на дні,
і неврегульований Список в середині
який сам по собі був ще Конструктивно той же.
Крім того, зверніть увагу на це, якщо я насправді подивитися цей приклад,
відпустити мене у версії One тепер,
і зверніть увагу, у мене є CS50 Лекція Програма курсу.
Ой-ой, CS50 Тиждень нульовий Тиждень Один і CS50 середу п'ятницю,
Я начебто скоротити кут.
Що було - те, що були ці назви раніше?
[Off мікрофона коментар]
Вони були схожі на лекції в Тиждень нульовий, як це було частково
з сексуальніше, і це насправді було деяке динамізм до нього,
і це свого роду - Я тільки частково понтіровавшего зараз
і просто припускаючи, що весь сайт CS50
і добре це працює, але це звичайно, не так елегантно,
або як свого роду прямий вперед, як це було раніше,
але це має сенс, тому що якщо ви подивитеся на індекс точка PHP
та лекції точка PHP і тиждень нулю точка PHP,
вони все включаючи і той же файл,
так що ми можемо поліпшити це?
Який наступний ітерація цей код, ймовірно, будемо робити?
[Off мікрофона коментар]
Так, точно, так що якщо - і дозвольте мені підвести підсумок
с ми, по суті хочуть для параметризації, що заголовок
так що так є ще жорстко тег h1, але матеріал
між ними, під відкритим небом і закриває тег,
Імовірно динамічним, і виходячи з чогось іншого.
Може бути, "отримати рядок" або річ після знак питання
в URL були десь ще, так що давайте поглянемо.
Так що, якщо я йду в Версія друга,
Тепер зверніть увагу, що у мене є отримав додатковий файл,
це виглядає як помічники точка PHP.
Я дійсно не знаю, де почати, так що я збираюся почати просто
за індексом ніби як завжди, і тепер помітите, що він трохи відрізняється,
так у мене вимагають лінію
вгорі, що вимагає помічники точка PHP,
але я можу назвати це все, що захочу,
але тепер помітити лінію три є виклик функції
надавати заголовок, який є Цікаво лише остільки,
як, що передається в судячи з усього, прийнято назву
для цієї конкретної сторінки.
Тим часом є надавати підвал на дні,
і я не потрібні параметризації є це просто
підвал, але тепер, схоже,
щоб бути кроком до кращих рішення, надавати заголовок бере,
і що робити площі дужки означають для тих,
хто не бачив PHP ніколи або в той час?
[Off мікрофона коментар]
Так, це масив.
Це асоціативний масив або хеш, який пов'язує ключі
зі значеннями; це як Java Сценарії, заперечення позначення,
або інші мови, подібні syntaxs.
Гаразд, так що в помічники точка PHP?
У помічники точка PHP це тільки пару функцій,
надавати заголовок і зробити виноску.
Так пару деталей якщо менш знайомі,
Отже, перш за все на те,
що зробити заголовок бере Аргумент дані, що це, мабуть
призначений порожній Масив Тобто це означає?
Що значить робити рівних відкриває дужка закривається кронштейн
як параметр в PHP?
Це значення за замовчуванням.
Так що, якщо я не здав в масиві або будь-який аргумент б то не було
до візуалізації заголовка або надати функцію нижнього колонтитула,
Я можу принаймні, довіру як автор цих функцій
що дані будуть мінімально бути порожній масив;
він не буде визначено або хибним, або щось на зразок цього,
це буде саме те, що Я дав його за замовчуванням.
Тепер це трохи свого роду витончені спосіб завантаження символів
у вашому просторі імен так сказати,
але він працює досить добре в цьому напрямку
реалізації нашої власної роду шаблони двигун бідняка.
Гаразд, є багато інструментів там для Python Рубін
і PHP, що дасть вам Можливості темплатного
і це саме те, чого ми хочемо.
Ми хочемо, щоб шаблон, який має h1 відкритий тег, h1 закритий тег,
і як би місце Тримач в середині,
і ми хочемо, щоб заповнити ті місця тримачі по шляху цієї функції,
тому ця функція витягти так уже сталося,
щоб дати вам наступне можливості.
Якщо у вас є асоціативну з масиву з пар ключ-значення
як Foo дорівнює бар, екстракт створить локальну змінну
називається ефективно знак долара Foo і дати йому значення барі
так вона вибухає свій асоціативний Масив з пар ключ-значення
в нових змінних з відповідні значення.
А потім вимагають точка заголовок точка PHP така ж, як і раніше,
так що ми, ймовірно, буде щоб побачити всередині заголовка точка PHP?
Це, ймовірно, отримав, що тег h1 і закриває тег; що відбувається
бути всередині нього ймовірно, в між ним?
[Off мікрофона коментар]
Точно, там, напевно, деякі Згадка знак долара назвою
і звичайно ж, якщо я збільшення на цьому є моя тег заголовка,
ось і мій тег h1, а всередині з це динамічна вставка
з знак долара титул, але просто для хорошої заходом,
Я роблю цей HTML спеціальне стягувати звірячому імені
Функція, але це корисно; для чого це потрібно
або що це може захистити?
Насправді це рішення на загрозу ви натякаєте;
ви б привели нас к.
[Off мікрофона коментар]
Саме, тому якщо шкідливий користувач або нічого не підозрює жертву
фішинговій атаці натиснув на посилання
, Що в собі мали знак питання і щось на зразок Foo одно,
і тоді значення взувши було насправді
як відкриває дужки Сценарій, закрита дужка,
а потім деякий код JavaScript;
якщо ви не називаємо це довго основна функція,
ви насправді бути зараження сирої HTML на веб-сторінку,
результатом якого є що вас можуть обманом.
Ви можете бути обманюючи користувача в виконання коду JavaScript
що він або вона зробив насправді не збирається.
І хоча, як правило, ви тільки шкодить собі,
як тільки ви знаєте, ідіот збирається ввести
у відкритому сценарію кронштейна, закрита дужка, і сказати попередження
або щось в цьому роді і зробити його або себе
в з якоюсь загадковий результат, якщо ви стаєте обдуреними
в натиснувши на посилання, яка має сировину JavaScript вбудований в нього
як значення цього атрибута,
Ви можете серед іншого вкрасти чиїсь печиво
тому що є властивість називається документ точка печива
в JavaScript, що дозволяє вам захопити сесійні куки користувача,
і якщо ви пам'ятаєте, що перехоплення сесії атака,
Коротше кажучи, це одна спосіб фактично обманюючи когось
в даючи вам, що віртуальна знач руки, а потім з
над їх рахунок Facebook або деякий інший тип облікового запису.
Гаразд, так що це трохи довго,
але це тільки за допомогою сирої HTML код.
Це еквівалентно виклику відлуння
або роздрукувати ефективно, і ми суттєво вставки
що динамічно.
Так що більше залишається тут?
Ну, дозвольте мені перейти в Версія Три тут,
і ми побачимо кілька різні -
точно такий же файл макета не помітити
що цього разу ми збираємося узагальнити верхній і нижній колонтитули
як шаблони, так що я маю на увазі, що?
Що одна річ, що по-іншому тут?
Що змінилося з остання версія?
Тонка, але це можливо, просто краще чистого дизайну.
Так?
[Off мікрофона коментар]
Так, є тільки один Стандарт надати функцію;
Я не особливий випадок надати заголовок або зробити виноску,
обидва з яких, якщо вам відкликає помічників точка PHP,
ми значною мірою ідентичні їх імена, за винятком
і шаблони вони включені.
Чому б просто не параметризації функція візуалізації
і прийняти один аргумент, це Назва шаблону,
і другий необов'язковий аргумент що ключові пари значень
що ви хочете підключити дюйма
Так що якщо я зараз дивлюся на помічники точка PHP сповіщення
що я, будучи трохи незвичним зараз.
Я насправді перевірки робить файл існує, і якщо так йти вперед
і вимагають його; на всякий випадок випадково користувачем типи
в деякому фіктивному імені шаблону ви не хочу видавати помилку
в програмі, щоб ми могли мінімально зробити їм це
користь тут.
Добре, але ми можемо прийняти це крок вперед?
У цій версії тут зверніть увагу на наступне.
Я тільки що ввели Ls, а що відразу ж переходить
з дещо інша.
Таким чином, є два каталогу, Добре,
і так тепер це крок до що в кінцевому підсумку буде більше
належної бази.
Це свого роду недбалий з мого боку кидати все
моє утримання всередині доступний публічно каталог
що буквально називається громадськості.
І хоча, на жаль, багато рамок,
старі особливо, і навіть деякі веб-повідомлень,
Мрія хостингу серед них, сили розмістити всі ваші файли
в еквіваленті громадського каталог навіть
якщо ваші файли можуть включають паролі баз даних
і імена користувачів або інші такі повноваження,
що зовсім не хороший дизайн.
Набагато краще буде тільки покласти
в громадському каталог що абсолютно має
бути доступно користувачеві, і все інше
що ви в тому числі як помічники точка PHP,
немає ніяких підстав, що, що повинні бути доступні через веб-
браузеру з URL.
Це може бути абсолютно нешкідливим якщо користувач хоче бачити, може бути,
хто пар, але це просто Принцип цього,
і не дай бог насправді робить є ім'я користувача або пароль;
Ви не хочете користувач випадково
або навмисно бути можливість доступу до нього.
Так що ми не зовсім на ідеально підхід тут,
але зверніть увагу на наступне зараз.
В індекс точка PHP, помітити, що Я все ще вимагає помічників,
але я роблю це таким чином, що я свого роду організації всіх
файли, будуть включені
в підкаталозі умовно включає в себе,
а потім я називаю штукатурка для верхній і нижній колонтитули, як раніше.
Так що єдине, Я зробив це свого роду
з реорганізувати свої каталоги щоб бути трохи більш анальний
про файлову структуру.
Але якщо ми тепер переходимо до цей п'ятий приклад,
помітити тут, що ми зараз є тріо папок,
і це трохи оману на даний момент
тому що для простоти заради класу,
Я тільки що кинули всі
в Джон Гарварда Громадська Довідник просто
так що ми можемо перейти його через браузер, але зауважте -
ігнорувати цю частину на мить,
той факт, що я там.
Зверніть увагу, що у мене є три підкаталоги: громадські,
шаблони, і включає в себе.
Ідея зараз є те, що в Правильно налаштований веб-сервер Я
скаже Apache, що це Веб-сайт має загальнодоступним
файли тут, і ніде більше.
Так що файл ви думаєте Я збираюся побачити всередині
громадського якщо я типу LS?
Що хоча б один файл це, ймовірно, там?
[Off мікрофона коментар]
Добре індекс точка PHP, і який файл, очевидно, не
там серед інших?
Як помічники точка PHP, заголовок точка PHP, підвал точка PHP;
всі фрагменти, всі функціональні
що насправді не потрібно щоб бути публічно доступні,
вона повинна бути корисною файлами
що є загальнодоступними, але самі вони,
жоден користувач не повинен бачити або десть URL для помічників точка PHP.
Зверніть увагу, що замість того, щоб, якщо я йду
в включає в себе їсти помічники точка PHP,
і якщо я піду в шаблони,
є підвал і заголовок точка PHP.
Чесно кажучи, я міг би поставити їм у тому ж каталозі,
але я намагаюся бути навіть більш анальний про збереження файлів
, Які тільки вид статичні шаблони відрізняється
від функціональних файлів як помічники точка PHP,
і я просто дотримуючись деяких досить поширених угоди
називаючи каталоги включає в себе і шаблони.
Так що єдине, що змінені, то знову шлях.
Якщо ми йдемо тут помітити що я тепер просто
включити відносний каталог,
точка точка слеш включає помічники точка PHP,
або я можу бути трохи більш власне і зробити щось
як це, PHP і багато
мов є ці спеціальні символи
, Які представляють каталог поточного файлу,
так підкреслюють підкреслення реж підкреслюють підкреслення представляє
будь-який каталог це цього файлу,
і тому, якщо ви просто об'єднати за допомогою оператора точка, що,
які дозволили б досягти такий же результат,
і має тенденцію бути трохи більш ефективний тому, що ви можете отримати
в ситуації з відносною каталоги були просто кажу точку
або точка точка може насправді принесе вам в неправильний місце,
таким чином, це має тенденцію бути трохи більш надійною.
Гаразд, так що хоча і залишається?
Що ви ще не подобається про це?
Що можна було б поліпшити, і ви прокоментував це раніше я думаю,
що є ще деякі питання?
[Off мікрофона коментар]
Право, звичайно, ми не маємо , Щоб почати писати як сайти
що виглядати наступним чином, чи не так?
Це не відчуває все, що набагато краще,
є ще копіювати вставити.
Я до сих пір вимагає прямої у верхній частині.
Я до сих пір надають Тема надати нижній колонтитули.
Там дуже багато дублювання.
Так?
[Off мікрофона коментар]
Так, точно, так що ми взяли крок до роду розщеплення
до "з" з "V", так MVC є Model View Controller;
Контролер є свого роду мізки додатки.
Модель, як правило, дані або деякі загальні функціональні,
і вигляд має тенденцію бути естетика, шаблон,
таким чином, ми зробили крок у бік відокремлюючи "з" з "V"
, Тому що ми зараз принаймні, Каталог цей шаблон, в
але навіть там ми по суті є один контролер на один файл.
Це не виглядає як є набагато логіка тут відбувається,
але індекс точка PHP є ефективно контролер.
Коли ви заходите на URL і закінчуючи в рубрикаторі точка PHP,
всю логіку, яка реалізує, що сторінки правильно
в індекс точка PHP, і те ж саме для лекцій точка PHP.
Те ж саме для тиждень нульовою точка PHP.
Так ми начебто Strone наш Логіка повсюдно,
і він відчуває, як це не збирається
масштабувати дуже добре, як тільки ми є не чотири, але сорок сторінок
якщо кожна сторінка починається з мені копіювання стару версію
файлу і просто налаштування деяких
змісту всередині нього.
Таким чином, ми тільки прийняті крок до цього,
і один з інструментів давайте познайомимося
в середу є фреймер називається "Laravel"
і це дуже популярна база PHP,
Інші включають "Fuelphp."
Там в старший називається "Codeigniter."
Там одна називається "Торт".
Там одна називається "Симфонія".
Я маю на увазі, якщо ви Google фреймворків,
є звіряче кількість як рамок
що люди, які реалізовані.
Laravel є одним з більш і бажаючих;
це один з пилососа ті, і ви знайдете
що в кінцевому підсумку це допомагає зберегти вас зовсім небагато
часу, хоча є трохи кривий навчання,
але, що ми будемо направляти Ви більше в середу.
Крім того, ми будемо вводити те, що називається "ОРЗ".
У цьому випадку, ми будемо використовувати те, що приходить
з цією структурою називається Laravel.
Вона називається "Красномовний" і це всього лише шар коду
що дозволяє серед іншого речі говорити з базами даних.
І тут теж, дозвольте мені вкрасти Приклад, який є або недавнє
або повернення для деякі з вас з 50.
Якщо ви дійсно брали 50, і Ви зробили "CS50 Фінанси,"
Ви, можливо, пам'ятаєте файли, Ви пишете або переписав, які виглядають
як це, це було Ввійти точка PHP, і в той час,
тим більше, що ми не витрачати багато часу
на PHP основи на ранній стадії,
це може саме по собі є був досить складним,
що ми і зробили, по суті, спробувати спростити конструкцію.
Ми дійсно не відокремити "M" від "V" з "C" все, що багато чого
проблем, які "Сім CS50 Фінанси,"
але зверніть увагу на одну річ який, будемо сподіватися почати
найближчим часом терти вас неправильний чином, щось на зразок цього.
Я маю на увазі, не тільки був цей увійти точка PHP контролер.
Було також говорити безпосередньо
до бази даних спеціально використовуючи сіквел, який не збирається
масштабувати дуже добре, коли ніж приступити до роботи з одним
або два або три партнера.
Наприклад, якщо один з партнери відповідає
для створення ваших таблиці бази даних і приходити
з вашими індексів і з'ясувати
, Що має стати ключовим, первинні ключі, зовнішні ключі,
і все, що, вирішивши на імена таблиць і все, що.
Тепер ви інша людина в група повинна знати все
проектних рішень він або вона зробила, і тепер потрібно
на жорсткий коду ці рішення у файл, так що тепер він
або вона досить багато стримує
більше ніколи не змінити ці імена таблиць.
Ніколи більше змінити ті, подані імена
без попередження.
Більше того, ви не можете дійсно легко працювати з тією же файл
не стикаючись один з одним, якщо він
або вона постійно зміна назви,
і у вас є старий версії і так далі,
так що це просто запрошуючи багато-багато головного болю.
Більш того, як ми будемо см. незабаром,
хоча вам не потрібно
зробити особливо складні запити тут,
як тільки ви починаєте Наявність декількох столи, два столи, три, п'ять,
десять таблиці в MySql або як правило, реляційна база даних,
ви повинні приєднатися ті таблиці часто, якщо знайомі, і у вас є
об'єднувати дані з одна з іншого,
і, чесно кажучи ваші запити сиквел почати, щоб отримати більше, і більше,
і довше, і більше комплекс, і він просто починає
отримати набагато простіше робити помилки
і набагато складніше зробити все правильно.
І так інструменти, такі як Красномовний і ОРЗ збирається
щоб допомогти нам змоделювати наші дані і це також ефективно збирається
щоб генерувати код, який ми потрібно, щоб почати запитів до баз даних
у більш складних відносинах.
Так що якщо у вас є первинний ключ сюди і зовнішній ключ
тут, все що вам потрібно зробити, це навчити, що ORM,
Об'єктного відносини Mapper, що ці відносини
і він буде з'ясувати, що запити для виконання, для вас.
І тільки в рідкісних випадки вам потрібно
щоб обов'язково напишу Продовження код самостійно.
Якщо ви дійсно хочете, щоб тонкої настройки щось,
але по більшій частині, ви можете просто почати лікування осіб
в базах даних, як вірно об'єкти, а не ці плоскі ряди
що ви якимсь чином потрібно реконструювати і де нормалізації.