>> За да започнете да се преодолее това, което може да ви бъде единственият опит
с уеб програмиране, което аз Мислех, че ще направите, е да открадне няколко
на примери, които ви Може да сте виждали в 50
ако го взех миналото година или две, или не може да има
ако го взеха преди няколко години
че са бебешки стъпки към пиридин познаваме като MBC,
Model View Controller, и какво означава това?
Това е ще видим отново може би е просто начин на начална
за почистване на дизайна на някои уеб-базирана част от софтуера,
или тя може да бъде от страна на клиента основава, както и, но ние ще го използваме
в контекста на PHP, така че да можем да започнем
да направи по-сложна проекти и сортиране
на отделни различни видове код в рамките на заявлението;
особено, така че когато ние има много хора, работещи
по проект, това е много лесно да се изготви линии.
Така че нека първо хвърлим един разгледаме неоптимално начин
на изпълнителните нещо.
Да предположим, че аз исках да се направи супер прост разбира уебсайт за 50
или всеки друг клас, и този клас има неща
като лекции и конспект.
Бих могъл да направя нещо като h1 етикет в горната част на страницата ми
и неподреден списък с списък Ли елементи в ред
просто да има списък с водещи символи на опции на менюто, така че супер проста.
И така, как бихме могли да направим това?
Е, нека да отидем в моя терминален прозорец тук,
и забележите, че аз имам за четене мен и ние ще се свърже с този код
на интернет страницата на курса в малко,
и забележите, че имам индекс точка HTM - индекс точка PHP.
Така че нека да вървим напред и да се открие това, и достатъчно сигурен, че това е вид
глупаво, че този дори призова PHP
защото всичко, което имам е коментар PHP
и след това всичко останало е само суров HTML код.
Но пак това е версия на нула,
така е стъпка към нещо по-интересно,
но забележете, че съм твърд кодирани CS50 като заглавие, CS50 в h1,
и сега имам лекции сочат,
сега имам връзката конспект.
Добре, така че не изглежда всичко това неразумно
докато следвате линк като лекции, и ти осъзнаваш,
Така добре ли е, че е различен съдържание, но това е вид
на едно и също нещо; това е заглавие на страницата и неподреден списък.
I кликнете нула седмица от миналата година, и това е вид
на едно и също нещо, за h1 тагове и неподреден списък
и след това най-накрая щракнете това, и да стигна до някакъв лист,
което е слайдовете от тази конкретна лекция.
Така че нещо ми подсказва, Аз съм на път да се свият.
Ако се отвори лекции дот известие PHP
че тя е доста много за копиране и поставяне от предходния файл;
Току-що промених заглавието, за да h1, и какви са тези връзки са.
Още по-лошо, ако отида в седмица нулева точка PHP,
това е същото копие паста работа
с малко на съдържание променени.
Така че със сигурност има един възможност тук, за да се подобри,
и със сигурност това трябва да бъде едно добро правило на палеца;
по всяко време да се чувстват себе си копиране
и поставянето на нещо повече, отколкото може би веднъж,
червени знамена трябва се надяваме да започне да изгасне.
Но как да отидем за подобряване на това?
Е, има няколко начина, и техниките, които можете да използвате
В PHP са се развили през време, но нека се опитаме това.
Позволете ми да отида в една версия, така че следващата итерация на това,
и нека да се опитаме да го почисти малко.
Right, едно от на PHP простите механизми
за решаване на този проблем е старата школа изисква функция,
които до голяма степен прави копие и поставяне на съдържанието
на някой файл точно тук, като в е остър включват,
и други езици, имат много подобни конструкции.
Така че това изглежда малко странно сега,
то определено не е завършите изглеждащи уеб страница,
но се предполага, че това, което е във вътрешността на заглавната точка PHP.
Всички други неща, нали, на HTML тагове, етикет на главата,
заглавието маркер, и всички други неща че е над същината
на страницата, която е може би само неподреден списък,
и в долния им край е вероятно като затворен етикет тялото,
тагове затворено на HTML; доста безинтересно
но дублиращо неща.
Добре, и сигурен достатъчно, ако отида
в заглавния точка PHP това е просто вид на сирак фрагмент
от върха, и ако аз отидете в долния точков PHP,
Това е осиротелите фрагмент от дъното,
и аз съм с тези, които същата фрагменти в други мои файлове,
като лекции разпръснати PHP.
Добре, така че това, което е по-добре за това ще ви кажа?
Да?
>> Simplicity.
>> Simplicity?
Аз не знам този вид на външен вид много по-страшно за мен сега, нали?
>> Ако исках да смените хедър, че не би трябвало
да го промените във всички предишния като файлове.
Можете просто да го променят в хедъра.
>> Точно така, така че може би в този смисъл е по-лесно,
може би щях да го натопи, тъй като е Просто е по-лесно да го актуализира.
Това е може би малко по-чист
защото сте се актуализира то само на едно място.
Така че това е доста непреодолими; това, което е недостатък
на този подход или какъв проблем останки
че ние наистина не са решени?
Да?
[Off Mic коментар]
Да, точно така, искам да кажа, че съм още копиране и поставяне;
това е малко по-малко, но само аз спря два от тези файлове,
и те почти все още изглеждаше идентична.
Имаше изисква в отгоре, а изисква в долната част,
и неподреден списък в средата
който от своя страна е все още Структурно същото.
Освен това, забележете, това, ако аз всъщност видите този пример,
позволете ми да отида до версия One сега,
и забележите, имам CS50 Лекция учебната програма.
Ъъъ, CS50 Седмица Нула Week Един и CS50 сряда петък,
Аз съм вид на изрязани от корнер.
Какво е - какви са били тези титли преди това?
[Off Mic коментар]
Те бяха като лекции в Седмица нула, като това е вид
на по-секси, и то действително имаше някаква динамика към него,
и това е нещо - аз съм просто вид punting сега
и просто да се предположи, че целия сайт е CS50
и тя работи добре, но това е със сигурност не е толкова елегантен
или като нещо направо предаде, както беше доскоро,
но това има смисъл, тъй като ако се вгледате в индекса точка PHP
и лекции са разпръснати PHP и нулева точка PHP седмица,
всички те са включително един и същи файл,
И така, как можем да подобрим това?
Каква е следващата итерация на този кодекс вероятно ще правиш?
[Off Mic коментар]
Да, точно така, така че ако - и нека да обобщим
с което по същество искате при задаване на параметри, които заглавна
така, че да има още един трудно кодирани h1 таг, но нещата
между тях, на открито и затварящия етикет,
вероятно е динамичен, и идващ от нещо друго.
Може би "Get низ" или нещо след въпросителен знак
в URL адреса са били някъде друго, така че нека хвърлим един поглед.
Така че, ако аз отида в Version Two,
Сега забелязвам, че съм Има допълнителен файл,
тя изглежда като помощници са разпръснати PHP.
Аз наистина не знам къде да започне, така че аз ще започна просто
с индекс като, както винаги, и сега забележи, че е малко по-различна,
така че аз имам изискват линия
в горната изисква помощници са разпръснати PHP,
но мога да го нарека каквото си искам,
но сега забележите трета линия там е извикване на функция
да направят удар с глава, който е интересна само доколкото
като това, което се предава в Очевидно е, че обичай заглавието
за тази конкретна страница.
Междувременно има да направи букмейкър в долната част,
и аз не се нуждаят от параметризация там това е просто
един букмейкър, но сега изглежда има
е стъпка към по-добро решение, да направят удар с глава на заема,
и това, което правим на площада скоби показват за тези,
които не са видели PHP някога или от време на време?
[Off Mic коментар]
Да, това е един масив.
Това е асоциативен масив или хеш, което свързва ключове
със стойности; това е като Java Scripts, възражение нотация,
или на други езици, подобни syntaxs.
Добре, така че това, което е в помощници Дот PHP?
В помощници са разпръснати PHP това е само на няколко функции,
направи удар с глава и направи букмейкър.
Така няколко подробности Ако по-малко познато,
така че преди всичко на факта,
че направи удар с глава на заема аргумент данни, че е очевидно
назначен празната масив има какво означава?
Какво означава да се направи равни отворена скоба затворена скоба
като параметър в PHP?
Това е стойността по подразбиране.
Така че, ако не премине в масив или който и да е аргумент да било
до горния или направи за да направи букмейкър функция,
Аз мога най-малко доверие, тъй като автор на тези функции
че данните ще минимално бъде празен масив;
тя няма да бъде дефинирано, или неверни, или нещо такова,
тя ще бъде точно това, което Дадох го като неустойка.
Сега това е малко на един вид а hackish начин на товарене символи
в името си пространство така да се каже,
но тя работи доста добре към тази цел
на изпълнителните нашия собствен вид темплейт двигател беден човек.
Добре, че има много инструменти, там за Python Ruby
и PHP, които ви дават темплейти възможности
и това е точно това, което искаме.
Искаме шаблон, който има h1 отворен етикет, на h1 затворен етикет,
и сортиране на място титуляр в центъра,
и ние искаме да запълни тези място притежатели, по пътя на тази функция,
така че тази функция Екстракт просто така се случва
да ви дам следното възможности.
Ако имаш асоциативен на масив с ключови стойност двойки
като Foo равнява бар, екстракт ще създаде локална променлива
нарича ефективно знака за долар Foo и му се даде стойност на бар
така че експлодира си асоциативен масив от двойки ключови стойности
в нови променливи с съответните стойности.
И след това изисква точка заглавна точка PHP е същата, както и преди,
така че това, което са най-вероятно ще , за да видите вътре в заглавния точка PHP?
Той вероятно има, че h1 таг и затварящия етикет; какво се случва
да бъде вътре в него вероятно между него?
[Off Mic коментар]
Точно така, вероятно има някаква споменаване на знака за долар заглавие
и достатъчно сигурен дали я увеличите по този там е моето заглавие тагове,
там е моят h1 таг, а вътре на е динамична вмъкване
на знака за долар заглавие, но само за добра мярка,
Правя това HTML специален зарежда отвратително име
функция, но това е полезно; какво прави той
или какво да го защитите от?
Това всъщност е разтвор до заплаха ли са намеквайки;
ти щеше да ни доведе до.
[Off Mic коментар]
Точно така, така че ако злонамерен потребител или неподозиращата жертва
на фишинг атака кликнали върху връзката
, че в себе си имах един въпрос марки и нещо като Foo равни,
и след това стойността на Foo е всъщност
като отворена скоба скрипт, затворена скоба,
и след това някои JavaScript код;
ако не се обади тази дълго основна функция,
вие всъщност ще се заразили сурова HTML във вашия уеб страница,
в резултат на което е , които може да бъдат подмамени.
Може да се разиграва на потребителя в изпълнение на JavaScript код
че той или тя е направил всъщност не възнамерявам.
И въпреки, че обикновено сте само себе си боли,
като само вие знаете на идиот ще напишете
в отворена скоба скрипт, затворена скоба и да кажа, сигнал
или нещо подобно и го или си направете
с някакъв странен резултат, Ако получите подмамени
в кликване върху линк, който има сурова JavaScript вградена в него
като стойността на този атрибут,
можете наред с други неща, открадне нечии бисквитки
защото има имот наречен документ точка бисквитка
в JavaScript, който позволява да вземете бисквитка сесия на потребителя,
и ако си спомняте какво е сесия отвличане атака е,
Дълга история Накратко, това е един начин на действително разиграва някой
в който ви дава, че виртуалната ръка печат и след това като
над тяхната Facebook акаунт или някакъв друг вид сметка.
Добре, така че това е малко по-дълго,
но това е само с помощта сурова HTML код.
Това е еквивалентът постави ехо
или отпечатате ефективно, и ние сме по същество вмъкване
която динамично.
Така че това, което остава повече тук?
Е, нека да отидат в Версия Три тук,
и ще видим малко по- различен -
точно същата оформление файл но известие
че този път ние ще обобщим горния и долния колонтитул
като шаблони, така че това, което имам предвид с това?
Какво е единственото нещо, че тук е различно?
Какво се е променило, тъй като последната версия?
Фината, но това е може би най- само по-добре чист дизайн.
Да?
[Off Mic коментар]
Да, има само един стандарт оказват функция;
Не съм специален случай правят горния или долния направи,
и двете от които, ако изземване от помощници точка, PHP,
ние сме почти идентичен с изключение на имената им
и шаблоните са включени.
Защо просто не задаване на параметри функцията направи
и да вземат един аргумент, че е името на шаблона,
и втори незадължителен аргумент че са ключовите двойки стойност
, който искате да включите инча
Така че, ако аз сега погледнете помощници са разпръснати известие PHP
че аз съм, че е малко любител сега.
Аз всъщност проверка прави файл съществува и ако е така, давай напред
и се нуждаят от нея; само в случай, на потребителя случайно видове
в някои фалшиво име шаблон Не искам да се хвърлят грешка
в програмата, за да можем да минимално ги направите това
облагодетелства тук.
Добре, но можем вземе това е крачка напред?
В тази версия тук забележите следното.
Току-що написали ли, и това, което веднага скача
навън е малко по-различен.
Така че има две директории, Добре,
И така, това вече е стъпка към което в крайна сметка ще бъде по-
подходяща рамка.
Това е вид на помия на мен да се хвърлят всички
на моето съдържание вътрешността на публично достъпна директория
които буквално се нарича публична.
И въпреки, че за съжаление, много рамки,
особено по-старите, и дори някои уеб мнения,
Сън Host сред тях, сили можете да сложите всичките си файлове
в еквивалент на публичен указател дори
ако вашите файлове може включва пароли за бази данни
и потребителски имена или други такива пълномощия,
това не е изобщо добър дизайн.
Много по-добре се поставя само
в публичен указател какво има абсолютно
да бъде достъпна за потребителя, и всичко останало
че сте включително като помощници са разпръснати PHP,
няма причина, че това трябва да бъде уеб достъпна чрез
браузър с URL адрес.
Тя може да е напълно безвреден ако потребителят иска да види може би
който двойки, но това е просто принципа на играта,
и не дай боже тя всъщност прави имате потребителско име или парола;
вие не искате потребителското случайно
или умишлено е имате достъп до нея.
Така че ние не сме съвсем на перфектен подход тук,
но забележете следното сега.
В индекса точка PHP, забележите, че Аз съм все още се изисква помощници,
но аз го правя по такъв начин, че аз съм нещо като организиране на всички
на файловете, които ще бъдат включени
в поддиректория, наречена обикновено включва,
и след това аз наричам направи за горния и долния, както и преди.
Така че единственото нещо, Аз бях направил е нещо
на реорганизира моите директории да бъде малко по-анален
за структурата на файла.
Но ако сега отидете тази петата например,
отбележим, че ние сега имат трио на папки,
и това е малко подвеждащо в момента
защото за простота за постигане на клас,
Току-що хвърлени всичко
John в Харвард Public Directory просто
така че да можем да го движите през , но известие браузър -
игнорирате тази част само за миг,
факта, че аз съм там.
Забележете, че имам три поддиректории: обществени,
шаблони, и включва.
Идеята е, че сега в конфигуриран правилно уеб сървър I
ще кажа, че това Apache сайт е публично достъпна
файлове тук и никъде другаде.
Така че това, което файл мислиш Отивам да видя вътре
на общественото ако пиша ли?
Какво е най-малко един файл това е може би там?
[Off Mic коментар]
Добре индекс точка PHP, и какво файл очевидно не е
там между другото?
Като помощници са разпръснати PHP, хедър дот PHP, долното точка PHP;
всички фрагменти цялата функционалност
че наистина не трябва да бъде публично достъпна,
тя трябва да бъде използваем от файловете
, които са публично достъпни, а самите те,
нито един потребител не трябва да види или хор един URL за помощници Дот PHP.
Забележете, че вместо да отида
в включва има помощници са разпръснати PHP,
и ако отида в шаблони,
има долен и заглавна точка PHP.
Честно казано, аз можеше да изведе тях в същата директория,
но аз се опитвам да бъда дори повече анален за запазване на файлове
че са само един вид статични шаблони различен
от функционални файлове като помощници са разпръснати PHP,
и аз съм просто се придържат към някои доста общи конвенции
обадите на директории включва и шаблони.
Така че единственото нещо, което промени след това отново пътя.
Ако отидем до тук забележите че сега просто трябва
да включва относително директорията,
дот точка наклонена черта включва помощници са разпръснати PHP,
или мога да бъда малко по- правилното и действително да направим нещо
по този начин, PHP и много
на езици имат тези специални символи
които представляват указател текущата файл е,
така подчертават долна реж. подчертае долна представлява
каквото директорията е на този файл,
и така, ако просто свързвам с оператора на точка, че
че да се постигне на същия резултат,
и има тенденция да бъде малко по- стабилна, защото можете да получите
в ситуации с относителна директории са просто казват точка
или точка точка може действително ви донесе на грешното място,
така че това обикновено е малко по-силен.
Добре, и какво от това макар че останки?
Какво ли още не харесва в това?
Какво може да се подобри и вие коментира, че по-рано Мисля, че
че все още има някои въпроси?
[Off Mic коментар]
Точно така, ние със сигурност не е нужно да започнете да пишете като сайтове
, че изглежда така, нали?
Това не се чувстват всичко, което много по-добре,
все още има копирате паста.
Аз все още имат изискват ред в началото.
Аз все още имам да направят заглавна направи букмейкър.
Има много неща, на дублирането.
Да?
[Off Mic коментар]
Да, точно така, така че ние сме се заели със стъпка към нещо като разделяне
на "С" на "V", така MVC е Model View Controller;
контролер е нещо като мозъците на заявлението.
Модел тенденция да данните или споделена функционалност
и изглед има тенденция да бъде естетика, шаблона,
така сме предприели стъпка към разделяне "С" от "V"
защото ние сега поне има указател този шаблон е,
но дори и там ние по същество има един контролер за файл.
Той не изглежда като там е много логика става тук,
но индекс точка PHP е ефективно контролер.
Когато посетите URL и завършващ в индекса точка PHP,
всички на логиката, че прилага тази страница е прав
в индекса точка PHP, и Същото важи и за лекции Дот PHP.
Същото за седмица нулева точка PHP.
Така че ние сме вид strone ни логика навсякъде,
и тя се чувства като това не се случва
да мащабирате много добре, след като ние не са четири, а четиридесет страници
ако всяка страница започва с ме копира по-стара версия
на файла и просто променяте някои
на съдържанието вътре в него.
Така че ние сме направили само крачка към това,
и един от инструментите ние ще представим
В сряда е Framer нарича "Laravel"
и това е много популярна рамка PHP,
други такива включват "Fuelphp."
Има един по-стар един наречен "CodeIgniter."
Има един, наречен "Cake".
Има една, наречена "Symphony".
Искам да кажа, ако Google PHP рамки,
има един брутален брой като рамки
че хората, които изпълняват.
Laravel е един от по-нагоре и желаещи;
това е един от по-чисти такива, и вие ще откриете,
че в крайна сметка тя помага да ви спести доста малко
от време, въпреки че има малко на кривата на обучение,
но че ние ще ръководи вас през в сряда.
Освен това, ние ще представим какво се нарича "ORM."
В този случай, ще използваме нещо, което идва
с тази рамка наречен Laravel.
Тя се нарича "Впечатляващо постижение" и това е само един слой от код
която ви позволява да наред с други неща говорят за бази данни.
И тук също, позволете ми да открадне Например, че е или наскоро
или като завръщане за някои от вас от 50.
Ако е взел 50, и нали "CS50 Finance,"
можете да си спомните, файлове, които пишете или пренаписаха, които изглеждат
по този начин, това е вход дот PHP, и по това време,
особено след като ние не прекарват много време
на PHP основи по-рано,
това може да се има е доста предизвикателна,
и така направихме, в действителност, опитайте се да се опрости конструкцията.
Ние всъщност не се разделят "M" от "V" от "C", че всички много
за проблеми, които "Seven CS50 Finance,"
но забележите, че едно нещо, че трябва да започне да се надяваме
до скоро разтривайте грешното начин, е нещо като това.
Искам да кажа, не само че е влезете в точка PHP контролер.
Също така се говори директно
на база данни специално използване на продължение, което не се случва
да мащабирате много добре, когато да започнете да работите с един
или две или три партньори.
Например, ако една от партньорите е отговорен
за създаването на своя таблиците в базата данни и идва
с вашите индекси и фигуриращ
какво трябва да бъде ключът, на първични ключове, чуждите ключове,
и всичко това, да вземе решение за имена на таблици и всичко това.
Сега можете другия човек в групата трябва да знае всичко
на дизайнерските решения той или тя е направена, и сега трябва
да твърди код на тези решения във вашия файл, така че сега той
или тя е доста много ограничени
никога повече да не се промени тези имена на таблици.
Никога отново, за да се промени тези, подадени имена
без да ви информира.
Нещо повече, вие наистина не може да лесно да работят по един и същи файл
без сблъсък с всеки друг, ако той
или тя е постоянно промяна на имена,
и имате старата версии и т.н.,
Така че това е просто покана много и много главоболия.
Освен това, както ще виж след дълго,
макар и да не се нуждае от
да се направи особено сложни заявки тук,
след като започнете като множествена маси, две маси, три, пет,
десет маси в MySql или обикновено релационна база данни,
, което трябва да се присъединят към тези таблици често, ако е запознат, а вие имате
да се комбинират данни от един с друг,
и честно казано си продължението запитвания започнете да се дълго и по-дълго,
и повече, и по- комплекс, и то просто започва
за да получите много по-лесно да се правят грешки
и много по-трудно да се получите нещата.
И така инструменти като Красноречив и ORM се случва
да ни помогне да моделираме нашите данни и тя също е ефективно ще
за генериране на код, който ние Трябва да започнем заявки бази данни
в по-сложни начини.
Така че, ако сте се погрижили за първичен ключ тук и външен ключ
тук, всичко, което трябва да направите, е да научи, че ORM,
Object връзка Mapper, какво, че връзката е
и ще разбера какво заявки за изпълнение за вас.
И само в редки случаи ще се нуждаят от
непременно да напишете продължение код себе си.
Ако наистина искате да фина настройка на нещо,
но за по-голямата си част, можете да просто започнете лечение на лица
в своите бази данни, както е вярно обекти, а не тези плоски редове
че по някакъв начин трябва да реконструира и де нормализация.