Дэвід Малан: Добра. Гэта CS50, і гэта канец тыдня дзевяці. Гэта быў віхура над за апошнія некалькі дзён. І праблема ўсталяваць сем, калі вы калена глыбока ў яе, зразумець, ці ёсць даволі трохі новага, што там унутры. Але давайце паглядзім, калі мы не можам сабраць ўсе разам тут коратка да гэтага згортвацца ў яшчэ іншае напрамак і бачанне дзе яшчэ мы можам пайсці. Так да гэтага часу, мы гаварылі пра HTML. Мы гаварылі аб CSS. Мы гаварылі пра PHP. Вы пачалі адчуваць SQL. Сёння мы пагаворым крыху аб JavaScript. Але як усе гэтыя разрозненыя мовы спалучаюцца адзін з адным? Таму мы гаварылі на мінулым тыдні пра Паняцце які мае сервер. Так што давайце проста намаляваць гэты прастакутнік якасці вэб-сервера тут. І вэб-сервер служыць, безумоўна, файлы. І некаторыя з гэтых файлаў можа быць HTML файлы. Такім чынам, адна з рэчаў, якія вэб-сервер можа выплюнуць можа быць файл, які быў мы проста маляваць, як гэта які змяшчае некаторы HTML. Так з пункту гледжання непрафесіяналы, што робіць HTML дазволіць вам зрабіць? Залы: добра выглядаць. Дэвід Малан: Добра, зрабіць старонку выглядаць прыгожа, хоць я думаю, я даказаў што ў адваротным выпадку. Так HTML браўзэр дазваляюць выкласці старонак структурна, і гэта дазваляе роду эстэтычна звярстаць старонку, пазначаць статычнага кантэнту, так што вы Затым можна праглядзець з дапамогай вэб-браўзэра. Але гэта ключ. Гэта статычны кантэнт. Вы пішаце, вы захавайце яго, а затым вы грузіце яго. І вэб-сервер затым служыць гэта да вашых наведвальнікаў. Але мы стылізаваць рэчы, выкарыстоўваючы розныя мова ў цэлым. Мы пачалі выкарыстоўваць атрыбут стылю на пэўных тэгаў. І атрыбут стылю пакладзем рэчы, як памер і колер шрыфта. І вы, верагодна, адкрылі для сябе, ці вы хутка для канчатковага праекты патэнцыйна, ўсё ж іншыя ўласцівасці, якія можна выкарыстоўваць у CSS. І так з пункту гледжання непрафесіяналы, што сапраўды ж тады CSS рабіць? Гэта ўсяго толькі прыклады іх. Што гэта дазволіць вам зрабіць гэта HTML здаецца, не ад таго, што мы бачылі да гэтага часу? АЎДЫТОРЫЯ: Вызначыць стылі самастойна. Дэвід Малан: Вызначыць стылі самастойна. Так вызначаюць рэчы, як класы, як вы напэўна сустракалі, або адназначна ідэнтыфікаваць вузлы ў дакуменце так што вы можаце стылізаваць іх. Але больш канкрэтна, я б сказаў, што CSS сапраўды дазваляе рабіць рэчы апошняй мілі і дазваляе задаць шмат дакладней эстэтыка, у той час як HTML па большай частцы дазваляе структураваць свае старонкі. І хоць ёсць некаторыя змаўчанні, як мы ўбачылі пазнаку для загаловак тэг, які, груба кажучы, зрабіў рэчы вялікі і тоўсты. Гэта даволі агульнае вызначэнне тэга - вялікі і тоўсты. Які памер шрыфта з'яўляецца тое, што? Што гэта колер? Як смелы гэта? І CSS дазваляе вам больш дакладна наладжваць такія рэчы. Гэтак жа як размяшчэнне, так як некаторыя з вас бачылі. І, шчыра кажучы, CSS трохі Бязладна мове. Гэта вельмі магутны ў тым, што вы можаце зрабіць літаральна любы вэб-сайт, што вы бачыў у Інтэрнэце сёння з ім, але гэта выгляд болю ў шыі. І некаторыя з вас ударыў галавой супраць сценаў ужо проста зрабіць глупства як цэнтра па меню Праблема ўсталяваць сем, калі вы дайшлі да што кропка ўжо. Але зразумейце, тыя рэчы, становіцца лягчэй з часам. Вы пачынаеце заўважаць заканамернасці. І зноў жа, Google будзе вашым сябрам для розных спосабаў, якімі вы можаце вырашыць падобныя праблемы. І я адважуся сказаць, з CSS, і HTML больш звычайна, вы можаце вырашыць праблемы ў шмат іншых спосабаў, кожны з якіх мог бы вельмі добра быць правільным, чым вы маглі б у чымсьці накшталт C, нават Цяпер PHP або JavaScript. Ёсць толькі шмат розных спосабы ляжалі рэчы. Але гэта пачаў атрымліваць брудны, мы сказалі. Проста выгляд змешванне ваш HTML і ваш CSS з атрыбутам стылю было трохі неахайны. І такім чынам мы замест сказаў, свайго роду абстрактна кажучы, што вы павінны па меншай меры, пачаць фактару з вашага CSS, верагодна. Атрыбуты не ваш стыль, але па меншай меры выкарыстоўваць тэг стыль ўнутры таго, што частка вэб-старонкі? АЎДЫТОРЫЯ: заг. Дэвід Малан: У галаве. Да гэтага часу ў нас быў толькі тытул да там, але вы таксама можаце дадаць стыль пазначыць, і вы можаце пакласці ваш CSS прыкладна кажучы да верхняй частцы старонкі. Але тады мы ўзялі рэчы на ​​адзін крок далей і мы ўлічылі, што больш ў асобны файл. І вось гэтыя два файла былі неяк цяпер звязаныя. І на самай справе гэта было тэг, які зрабіў гэта. І тое, што быў адным з ўсёабдымных Матывы факторынгу наш CSS тым больш? АЎДЫТОРЫЯ: Пры частым выкарыстанне. Дэвід Малан: Пры частым выкарыстанне. Ці не так? Магчыма, вы бачылі ў р-ўсталяваць сем ужо што шмат старонак, купля старонка, старонка продаж, Партфель старонкі, верагодна структураваная некалькі аналагічна. Там у CS50 фінансаў лагатып у верхняй калі вы не вырашылі змяніць гэта. Там у падвал на Дно старонак. І CSS дазваляе затым да фактару яго гэта ў асобны файл, так што калі Вы хочаце нешта змяніць у глабальным маштабе праз увесь сайт, вы можаце сапраўды проста змяніць яго ў адным месцы. Але ёсць цана, якую вы плаціце патэнцыйна Маючы факторизовали CSS ад майго HTML файла ў асобны падаць на яго спасылаюцца з тэг, які мы бачылі ў панядзелак. Што можа недахоп быць гэта? Успамінаючы тыдзень таму, калі мы казаць пра HTTP і TCP / IP і як Інтэрнэт працуе. Нешта тут? АЎДЫТОРЫЯ: Гэта займае больш часу. Дэвід Малан: Гэта займае больш часу. Чаму? АЎДЫТОРЫЯ: [неразборліва]. Дэвід Малан: Так. Так што, магчыма, зойме трохі больш часу. Таму што адзін, CSS, відавочна, не ў тым жа файле. Так што цяпер вы павінны зрабіць ня адзін, але два запыту. І кожны з гэтых запытаў, як мы бачылі ў Chrome ў так званай інспектара, і мы глядзелі на ўкладцы сеткі, кожны з гэтых файлаў патрабуецца адзін HTTP Запыт, які мы бачылі бярэ некаторы колькасць часу. Цяпер, можа быць, гэта не так шмат. Можа быць, гэта ўсяго ў 20 мілісекунд. Можа быць, гэта 200 мілісекунд. Але думаць пра старонку, як Facebook, або CNN, або Google, якія нашмат больш, чым прыкладах, якія мы паглядзеў на да гэтага часу. Гэтыя старонкі могуць мець дзясяткі файлаў, кожны з якіх можа запатрабаваць загрузка файла. Так рэчы могуць патэнцыйна пачынаюць запавольвацца. І асабліва ў гэтыя дні, калі ўсе мы ёсць мабільныя тэлефоны ў нашых кішэнях і нізкахуткаснаму падключэнні да Інтэрнэту, маючы неабходнасць пачакайце яшчэ некалькі мілісекунд, некалькі больш мілісекунд для дадатковага файлы могуць быць на самай справе павольна. Затрымка гэтае слова, якое апісвае выгляд чакае, што ў вас ёсць, што вам выпрабаваць пры чаканні некаторыя частка інфармацыі. Але ёсць і станоўчая бок. Так што гэта не ўсё накшталт - на самай справе гэта крыху арэлі тут. Ніжняя бок цяпер, але тое, што браўзэры могуць зрабіць калі яны разумныя, каб пазбегнуць таго, каб прасіць ж styles.css падаць зноў можа быць, каб рабіць тое, што? Кэш яго. Так кэшавання - C-A-C-H-E - як правіла, азначае тут толькі, каб захаваць файл, які вы прасілі ў першы раз, і затым праверыць кэш для яго. Праверце, што ты накшталт кантэйнера для захоўвання, і калі ў вас ужо ёсць копія styles.css, нават калі некаторыя іншыя старонкі ў р-набору, або любога вэб-сайта, просіць яго зноў, проста каб даць Карыстальнік ў тым жа захаваная копія. Не турбуйцеся патрабуючы яго. Ніжняя бок ёсць, хоць, як некаторыя з вас ўжо спатыкнуўся ў р-набору. Калі вы ўносіце змены на серверы і вы ідзяце назад у браўзэр, і вы перазагрузіць, часам браўзэр робіць Вы ласку і не турбуе паўторна загружаючы ваш styles.css файл таму што, давай, якія шанцы што гэтыя стылі, якія выкарыстоўвае Facebook збіраемся змяніць гадзіну, каб гадзіну ці з дня ў дзень? Гэта даволі нізкі. Яны могуць мяняцца з цягам часу, але не з кожнай хвілінай або па гадзінах. Так трук, проста FYI, робячы вэб- развіццё, часта утрымліваючы перакласці ключ, напрыклад, і затым націсніце кнопку перазагрузіць ў вашым браўзэры, і гэта будзе звычайна сказаць перазагрузкі браўзэра усё, нават калі ў вас ужо ёсць гэта ў кэшы. Такім чынам, яшчэ раз, плюсы і мінусы, але ўсе яны у канчатковым рахунку, праектных рашэннях. Так што цяпер, мы не зрабілі ўсяго скончыць гісторыю тут. Калі б я цяпер вярнуцца назад і назад і назад і таму, мы пачалі ўкараняць не толькі HTML, але PHP. Так з пункту гледжання непрафесіяналы, што робіць PHP давайце рабіць? АЎДЫТОРЫЯ: [неразборліва]. Дэвід Малан: Што гэта? АЎДЫТОРЫЯ: Представьтесь логіку у код. Дэвід Малан: Так, увесці Логіка ў код. Так што гэта праўда мова праграмавання з завес, і зменныя, а таксама функцыі і ўмовы, і ўсё рэчы мы выкарыстоўвалі шлях назад калі з нуля. І PHP, мы бачылі, могуць быць выкарыстаны альбо ў камандным радку - гэта не павінен мець нічога агульнага з Інтэрнэту, хоць гэта сапраўды яго паходжанне і тое, што яна мае тэндэнцыю быць добрым і спрыяе - але вы можаце выкарыстоўваць PHP проста па сваёй прыродзе аб тым, што ён мае пячатку () функцыя, а Е функцыя (), або рэха () функцыю. Там у пучкі спосабаў, якімі Вы можа друкаваць тэкст з PHP. Такім чынам, вы можаце выкарыстоўваць гэтую праграмаванне мова для вываду дакладна пра што мы гаварылі раней. Вы можаце дынамічна генераваць ваш HTML. Можа быць, не ўсё гэта. Можа быць, вы жорсткія код рэчы, як загаловак, а ў ніжнім, і лагатып, і вашы табліцы стыляў, і ўсё гэта. Але за тое, як у я-ўсталяваць сем, дзе вы манипулируете запасаў і паказваючы партфель карыстальніка, які з'яўляецца збіраецца дынамічна змяняць, можна , Вядома, выкарыстоўваць PHP і логіку, ён дае Вы ў якасці мовы праграмавання для Выхад дынамічна падмноства старонкі. Таму, калі вы кажаце пра дынамічных вэб-сайтаў, або вэб-праграмаванне, вось тое, што вы на самай справе гаворым пра. Выкарыстанне мовы як PHP, або рэчы называецца Python, або Рубі або Java, або пакуль іншыя мовы, запыт да базы дадзеных часта, або іншы сервер, і затым дынамічна выплюнуць HTML. Цяпер канчатковы вынік, як у баку, з'яўляецца што HTML большасці вэб-сайтаў, у тым ліку ваш п-ўсталяваць сем, гэта, верагодна, будзе велізарны беспарадак, калі вы паглядзіце на крыніцу код у браўзэры. Гэта не мае вялікага значэння. На дадзены момант, калі мы клапоцімся пра стыль, мы клапоцімся аб рэчы, якія вы пішаце. Мы не будзем клапаціцца пра рэчы што тое, што вашы выхады код. Так што не турбуйцеся аб водступу тут, калі гэта PHP гэта на самай справе вываду рэчы. У рэшце рэшт, браўзэр не будзе клапаціцца, і чалавек не будзе глядзець каля крыніцы ў любым выпадку. Мы супрацоўнікі, напрыклад, былі б быць гледзячы на ​​ваш PHP. Такім чынам, дазвольце мне даць хуткі прыклад зараз яшчэ аб тым, чаму гэта можа быць карысна. Так што, шчыра кажучы, я не магу ўспомніць, калі апошні раз я выкарыстаў C, каб вырашыць праблему ў рэальны свет. Гэта было, верагодна, у аспірантуры, калі Я павінен быў выкарыстоўваць мову, які быў даволі нізкім узроўні, і даў мне магчымасць зрабіць што-то вельмі высокае выканання, каб сапраўды захаваць як шмат CPU цыклы, як мог, у значнай ступені таму што я выкарыстаў велізарныя наборы дадзеных, і кожны CPU цыклу ўлічваецца. І, шчыра кажучы, нават у тым, як тэлефоны гэтыя дні і іншыя прылады дзе вы не дастаткова мець столькі памяці, і вы не дастаткова мець у якасці шмат рэсурсаў працэсара, выкарыстоўваючы больш хуткія мовах па-ранейшаму прывабным. Аднак у рэальным свеце, калі вы проста хачу кінуць нейкую праграму разам, каб прааналізаваць некаторыя дадзеныя, ці вы сабралі цэлая куча рэгістрацый некаторыя групы студэнтаў, і вы хочаце вельмі хутка аўтаматызаваць адпраўкі электроннай пошты па адным для кожнай з гэтых рэгістрацыю, вы збіраецеся дасягнуць за на мове высокага ўзроўню З чым, так бы мовіць. Нешта накшталт PHP або Python, ці Сячы, або паўтузіна іншых, якія існуюць у гэтыя дні. Але тыя тры, верагодна, самы модны цяпер. А што гэта азначае, што вы можаце адкрыць да тэкставым рэдактарам, напрыклад Gedit або ў нешта яшчэ, а затым проста пачаць напісанне кода, не турбуючыся аб кампіляцыі, без неабходнасці сапраўды турбавацца аб кіраванні памяццю, маючы на ​​ўвазе, што хоць трохі разгільдзяйства, у канчатковым рахунку вярнуцца , Каб ўкусіць вас, калі набор дадзеных атрымлівае больш або праблема становіцца вялікі. Але што гэта азначае для нас заключаецца ў наступным. Дазвольце мне ісці наперад і працаваць спеллер з няшчасных ўсталяваць шэсць. Так што гэта мой сінтаксічнага дрэва на аснове рэалізацыі , Які я выкарыстаў на вялікім дошка, на якой я выступаў не вельмі добра. Мы вернемся праз тыдзень і вярнуцца тых, хто ў канчатковым выніку на вяршыні вялікая дошка на нашай апошняй лекцыі. Але цяпер, дазвольце мне ісці наперад і проста маё рашэнне працаваць у тэкставым, і мы зробім Бібліі караля Джэймса, і тут мы ідзем. Такім чынам, гэта ўсё, маўляў, словы з памылкамі з Бібліі караля Джэймса. І ўзяў маю рэалізацыю паўсекунды ў агульнай складанасці. Так што не так ужо дрэнна на гэтым канкрэтнага кампутара. Але падумайце пра тое, колькі код, які я павінен быў напісаць. Падумайце, колькі кода трэба было пісаць. Падумайце, колькі гадзін вы правялі ў D-зале або ў інтэрнат ці там, дзе на самай справе кадавання да гэтага рашэння. Ну, калі я на самой справе маюць больш высокі ўзровень мова, як PHP, прыняць да ведама што я магу зрабіць тут. Выкажам здагадку спачатку, што гэта замест вашага дыстрыбутыва кода. Гэты файл называецца правапісу. Яна даступная як частка сённяшняй Размеркаванне кода. І я збіраюся махнуць рукой не больш пра дэталі, але гэта на самай справе цікавы прыклад таго, як Вы маглі б партаваць мовы як C да PHP. Я літаральна адкрыў два тэкставых вокнаў, адзін з маёй версіяй C speller.c, і я проста пачаў перакладаць яго ў маёй накіравацца ў PHP і набраўшы яго з дапамогай Бліжэйшым эквівалентам функцыі. Такім чынам, некаторыя з іх усё па-іншаму. Мы бачылі ў апошні раз, што PHP не выкарыстоўвае ўключыць у цалкам гэтак жа. Ён выкарыстоўвае звычайна патрабуюць, хоць ўключаюць існуе. Вызначыць гэта мала чым адрозніваецца ад # Вызначыць ў C, але гэта як мы робім пастаянна. $ ARGC аказваецца, існуе ў PHP, Такім чынам, мы разгледзелі, што раней. Гэта толькі зменныя, усё якія пачынаюцца са знака даляра. Нагадаем, гэта проста куча лікаў з якая плавае кропкай. Так карацей кажучы, вы заўсёды можаце прагортваць гэта, калі цікава, гэта Амаль лініі для лініі пераўтварэнні C версіі speller.c ў PHP. І вы можаце зрабіць гэта зноў паўтузіна іншых мовах. Але што цікава, гэтая. Ці тое, што адкрыта роспач гэта. Дазвольце мне ісці наперад і аб тыпе dictionary.php, і сцвярджаюць, што я збіраюся ісці наперад і паўторна рэалізаваць Праблема тут ўсталяваць шэсць. Такім чынам, давайце спачатку, што прапанаваць у гэтым файл, які будзе ажыццяўляцца ў PHP, таму дазвольце мне адкрыць мой тэгі, як, што. Дазвольце мне прывесці сябе глабальную зменную $ памерам атрымлівае нуля. І я збіраюся даць сябе хэш-табліцы. Я буду выкарыстоўваць хэш-табліцу для гэтай рэчы. Як заяўляюць хэш-табліцы на PHP? Гатова. ОК. Так адкрытыя кранштэйны кранштэйны ўяўляе блізка Тое, што ў PHP, як мы ўжо бачылі? Масіва, але масіў, які мог быць асацыятыўным масівам. Асацыятыўны масіў структура дадзеных, якая асацыіраваных са значэннямі ключоў. Зараз у найпростых лікавымі індэксамі Масіў гэтыя клавішы, і што? Нуль, адзін, два, тры, ці не так? Старыя рэчы назад са школы С. Але яна можа таксама радкі тыпу Foo, і бар, або Максвелла, або чаго-небудзь падобнага радка. Так што я магу выкарыстоўваць гэта праз хвіліну. Дазвольце мне пайсці далей і аб'явіць функцыі, як - давайце зробім нагрузкі () першым. Так функцыі Load (). І PHP трохі адрозніваюцца тым, што вы літаральна ўвесці функцыю, але вы ня ўводзьце тып якое вяртаецца значэння. Я збіраюся пайсці далей і сказаць, што нагрузка () павінна ўзяць у Аргумент $ слоўніку, проста як C версіі зрабіў. Я раблю гэта з памяці. І я прапаную, што я збіраюся зрабіць гэта. Я проста збіраюся зрабіць па кожнаму элементу. Я збіраюся выклікаць функцыю названую File (), перадаўшы яму імя гэтага файле, які з'яўляецца зменнай $ $ Слоўнік як словы. А потым ўнутры майго цыклу тут, я збіраюся ісці наперад і захоўваць у маім $ $ Табліцы, слова атрымлівае сапраўднае. Гатова. Ой, пачакайце. Гатова. ОК. Гэта значыць нагрузка () функцыя кажуць у PHP. Цяпер, чаму гэта працуе? І я накшталт падману тут. Так, адзін, мы бачылі Еогеасп коратка апошні раз. Гэта проста азначае, што вы можаце перабору Масіў не турбуючыся я і п і плюс плюс, і ўсё такое. Слоўнік, вядома, імя файла, нешта накшталт вялікага ці малога, два Слоўнікі мы выкарыстоўвалі ў апошні раз. Выява з'яўляецца функцыяй, якая адкрывае тэкст файл, счытвае яго ў радок за радком, і рукі рэзервовае велізарны масіў, кожны з элементаў якога радок з гэтага файла. Дык вось спалучэнне FOPEN і FREAD, і ў той час цыкла і FCLOSE, і ўсё гэта. Нарэшце, як слова проста азначае, што гэта пераменная Я збіраюся мець доступ да на кожнай ітэрацыі ў гэтым цыкле. Карацей кажучы, гэта адзін лайнер тут азначае адкрыць файл, імя якога знаходзіцца ў слоўнік, зменная, перабор яго радок за радком, і кожны раз вы атрымаеце лініі, захоўваць ў зменнай словам, а затым зрабіць што-то са словам. Што я хачу зрабіць? Я хачу паставіць слова ў мой хэш-табліцу. Ну, я магу пакласці што-то ў маёй хэш-табліцы як і ў C выкарыстоўваючы квадратныя дужкі. Гэта імя для майго хэш-табліцу. Я збіраюся індэкс ў хэш стол у гэтым месцы. Так што не кранштэйнам нуль, а не аднаго кранштэйна. Кранштэйн двукоссях нешта, што б гэтае слова. І гэтак жа, як вы маглі б мець у сваім Хэш сінтаксічнага дрэва працоўны стол, вы проста захоўваць эфектыўна лагічны, няяўна ці відавочна. Гатова. Я захоўваю праўдзівае значэнне. Зараз ёсць некалькі рэчаў, Я зразання кутоў на тут. Тэхнічна, гэта будзе раздражняе новы радок, / п, у канцы кожнае з гэтых словаў. Так што я, верагодна, варта выклікаць функцыю PHP называецца Чоп (), які будзе літаральна секчы, што па-за. І я на самой справе трэба зрабіць яшчэ адну рэч. Я, верагодна, варта павялічыць памер на кожнай ітэрацыі, так што я адсочванне глабальна, што гэта такое. І, шчыра кажучы, і гэта з'яўляецца адной з дурней аспектаў PHP, калі вы з дапамогай глабальнай зменнай, неабходна відавочна сказаць, што вы. Так што я збіраюся надрукаваць адвольны глабальнай $ Памерам, глабальныя табліцы $, а цяпер мой функцыі завершана. Так што не так проста, як раней, але , Верагодна, заняў менш часу, чым C версіі, можа быць? ОК. Такім чынам, зараз давайце зробім Check () функцыю. Давайце паглядзім, калі гэта па меншай меры ўзяў гадзін запар, што ён узяў нас у С. Так Дазвольце мне пайсці далей і аб'явіць праверыць як функцыя. Прымае аргумент ў слова, будзе зыходзіць ад правапісу. І я проста хачу, каб праверыць, калі Наступны пераменная Исеть, настольны Кранштэйн strtolower слова - давайце збалансаваць усе мае дужках - затым вярнуцца праўда. Астатняе - , Які быў сапраўды жорсткі частка гэтай праграмы. У адваротным выпадку, вяртанне ілжывым. Гатова. Гэта праверка (). Цяпер, чаму гэта працуе? Ну, той, які я прайшоў у слове, які з'яўляецца радком. Два, я правяраю ўнутры хэш табліцу, якая называецца табліцай $. Я прымушаючы яго ў ніжні рэгістр па тэлефоне Функцыя вельмі падобная ToLower () у C, але гэта ўсё словы, Не адзін знак. І калі ўстаноўлена, іншымі словамі, ўяўляе сабой зададзенае значэнне, іншымі словамі, калі гэта праўда, то так, гэтае слова. Таму што я паклаў яго туды з грузам (). А калі не, я збіраюся вярнуцца ілжывым. Цяпер іншыя лёгка. Функцыя памер (), як я магу гэта зрабіць? Я па сутнасці сапраўды вяртаюцца $ памеры. Але я тэхнічна трэба зрабіць гэта раздражняльная рэч. А на самай справе да пачуць, я рэзаў адзін кут занадта шмат. Я сапраўды трэба зрабіць глабальную $ табліцы. Але гэта, як той казаў, выгрузка). Выгрузіць () з'яўляецца дзіўным. Функцыя выгрузкі (). Як жа я хачу ажыццявіць разгрузку ()? Гатова. ОК. Так выгрузіць (), кіраванне памяццю цалкам клапаціцца для вас у нешта накшталт PHP і многае з моў высокага ўзроўню. Так што гэта дзіўна. Напрыклад, чаму, чорт вазьмі, мы правялі мінулае плюс восем тыдняў пісаць C мабыць вельмі павольна, вельмі шмат часу шмат праблем з дзясяткаў гадзін працы пад нашымі паясамі? Ну, з аднаго боку, гэта можа працаваць штраф за невялікія праграмы. Гэта, вядома, паскорыла маё час распрацоўкі. Але давайце паглядзім, што адбудзецца у рэальным свеце. Адпусціце мяне ў гэты каталог у акне тэрмінала. Там у арфаграфіі. І звярніце ўвагу, як у баку, і вы можаце сутыкнуліся з гэтай праблемай у камплекце шасці або праблема ўсталяваць сем. Вы не павінны строга канец PHP файлаў з пашырэннем. PHP. Калі вы змесціце радок, што першая на самага верху, гэта адмысловая лінія сінтаксісу, якія па сутнасці азначае знайсці праграма пад назвай PHP і выкарыстоўваць яго для інтэрпрэтаваць гэты файл. Так што цяпер ніхто не ведае, што Я бягу PHP праграмы. Я магу запусціць яго проста, як быццам гэта былі чымсьці складзена ў C. Але вось у чым справа. На самай справе, давайце зробім гэта зноў. Dropbox/pset6 /. Там у арфаграфіі. ОК, 0,44 секунд. Ён атрымаў на гэты раз хутчэй. Зараз давайце ўвойдзем у версіі PHP. Прыемная рыса. Але падумайце, колькі часу Я захаваў у офісе гадзін. ОК. Так 3,59 секунд, што на самой справе Гучыць не дакладныя небудзь. Але гэта таму, карацей кажучы, калі вы друкуеце з велізарнай колькасці матэрыялу на экран, што Сам запавольвае працу. Што гэта сапраўды ўзяў працэсар у Прыбор быў 3,59 секунды, у У адрозненне ад C, які адбыўся 0,44 секунд у апошні час. Гэта сапраўды на парадак Велічыня розныя. Дык дзе ж, што кошт прыходзяць? Чаму гэта так значна больш павольна? Чаму PHP выконваць так дрэнна? Даніэль? АЎДЫТОРЫЯ: Вы сапраўды не выкарыстоўваць хэш-табліцу. Дэвід Малан: я сапраўды не выкарыстоўваць хэш-табліцу. Так я накшталт зрабіў. Так што гэта асацыятыўны масіў. Хутчэй за ўсё, калі людзі на PHP з'яўляюцца вельмі разумныя, яны выкарыстоўвалі пад капот фактычны хэш-табліца рэалізаваны у чымсьці накшталт C ці C + +. Але. Так. АЎДЫТОРЫЯ: [неразборліва]. Дэвід Малан: Так. Такім чынам, кожны з функцый я напісаў цяпер - на самай справе, вы можаце сказаць, што яшчэ раз трохі гучней? АЎДЫТОРЫЯ: Кожная з функцый, якія Вы ўключылі мае нашмат больш поўны Ёмістасць, чым - Дэвід Малан: Дык вось вельмі дакладна. Там вельмі шмат больш накладныя выдаткі, што мы на самай справе не бачачы, засяродзіўшы ўвагу толькі на dictionary.php, якія я толькі што напісаў. З іншага боку, ёсць цэлы перакладчык збіраецца ў фонавым рэжыме. На самай справе, калі я запусціў гэтую праграму, яна ня быў запушчаны, складзеныя з нулёў і адзінак прызначаны для майго Intel CPU. Хутчэй, гэта быў бягучы радок за радком PHP код, які выглядае гэтак жа, як мы ўвялі яго. І таму, калі вы карыстаецеся інтэрпрэтаваная мова, вы на самай справе заплаціць гэтую цану. Гэта зойме некаторы час, каб прачытаць Ваш файл зверху ўніз, злева Добра, а затым выканаць кожны лінія зноў і зноў. Зараз на самай справе, асабліва ў Інтэрнэце, Вы можаце фактычна паскорыць гэты працэс за кошт кэшавання вынікаў PHP код інтэрпрэтуецца. І гэта мае сэнс у Інтэрнэце, таму што калі ў вас ёсць не адзін карыстальнік, як мяне тут, але 1000 або 10000 карыстальнікаў, то можа быць, у першы раз файл Доступ гэта павольна, але пасля гэтага гэта нашмат хутчэй. Але гэта таксама, зноў жа, кампраміс. І за тое, як навуковых дадзеных ўсталяваць, ці нават нешта вялікае, як гэта, вашы карыстальнікі ў канчатковым выніку пачынаеце адчуваць, што запаволенне. Карацей кажучы, інтэрпрэтаваць мовы вельмі ў модзе, вельмі папулярныя, і адкрыта, верагодна, мовы, якія павінен дасягнуць для пры вырашэнні задач пасля CS50. Але разумееце, колькі вы на самой справе прымаючы як належнае пад капотам сапраўды гэтыя апошнія некалькі тыдняў у хэш сталы, і дрэвы, і спрабуе, якія выкарыстоўваюцца ў канчатковым рахунку, на самай справе рэалізаваць такія рэчы, як якая адкрывае дужкі, квадратныя дужкі, якую мы можам зараз з удзячнасцю ўспрымаем як належнае. Такім чынам, давайце паглядзім цяпер на гэтым вэб-кантэксце. І я ўжо казаў у мінулы раз, што ёсць куча суперглобальных ў PHP, што на самай справе не актуальныя у камандным радку. Яны больш актуальным у кантэксце выкарыстання PHP ў вэб-кантэксце. Так працуе PHP на вэб-серверы для таго, для стварэння рэчы, як HTML. І мы зірнуў на $ _GET і $ _POST, вось дзе аўтаматычна карыстальнікі ' ўваход заканчваецца проста, калі вы прадставіць сфармаваць ў файл з пашырэннем. PHP на вэб Сервер, як машыны. Але давайце коратка разгледзім $ _COOKIE І $ _SESSION. З пункту гледжання непрафесіяналы, што такое печыва, як Вы разумееце гэта ў кантэксце з дапамогай вэб? АЎДЫТОРЫЯ: Выява на кампутары. Дэвід Малан: Так. Гэта файл на кампутары карыстальніка пасаджаныя ўсё вэб-сайт вам пашчасціла наведаць. Так што, калі вы ідзяце ў Facebook, калі вы ідзяце каб bankofamerica.com, калі вы ідзяце на google.com, калі вы ідзяце ў амаль любы сайт у свеце ў гэтыя дні, у тым ліку cs50.net, печыва пасадзіў на вашым кампутары, які з'яўляецца альбо значэнне, якое захоўваецца ў аператыўнай памяці ў вашым Кампутар у памяці браўзэра, або часам сапраўды файл, які захоўваецца на цвёрдым дыску. І што, як правіла, захоўваецца ў гэтым файле не імя карыстальніка, не ваш пароль, як правіла, ня тое, адчувальныя, калі сайт не не так добра з іх бяспекі, а хутчэй гэта вялікі унікальны ідэнтыфікатар сярод іншае. Гэта вялікая выпадковы лік пасадзілі на вашым кампутар, але вы можаце думаць аб якасці роду віртуальны ручной штамп, як ад клуб ці некаторыя парк атракцыёнаў, што дазваляе персаналу, уладальнікі, што абслугоўванне, каб памятаць, хто ты. Такім чынам, калі вялікая выпадковае лік, як 12345678, хоць гэта, відавочна, не надта выпадковым, думаюць пра тое, што, як ручной штамп, што пры наведванні facebook.com ўпершыню, яны друк гэты нумар на вашай руцэ. А потым, таму што вы кажаце HTTP, вы быўшы браўзэру, і таму Facebook відавочна, кажа тое ж самае, вэб сервер, пратакол HTTP кажа, што у любы час вы пасля наведаць facebook.com, няхай гэта будзе другая пазней, праз гадзіну, нават на наступны дзень, да таго часу, пакуль у вас ёсць відавочна не выйшлі з, якія эфектыўна , Як мыццё рук. HTTP кажа, што вы павінны прадставіць свой ручной штамп кожны раз, калі вы вярнуцца на гэты сайт. Што Facebook ж тады, яны паглядзіце на гэтую ручной пячаткай і яны кажуць, о, 123456789. Я не ведаю, на першы погляд, што гэта Дэвід Малан ў Кембрыджы, Масачусэтс, але яны могуць праверыць іх базы дадзеных і кажуць, о, чалавек на чыёй кампутарнай мы пасадзілі 123456789 Дэвід Малан з Кембрыджа, Масачусэтс. Давайце пакажам, што карыстальнік затым яго профіль старонкі або яго Экспарт навін. Але ёсць праблема тут, калі гэта то, як вэб-сапраўды працуе. Давайце зірнем на просты прыклад. Давайце на самай справе пайсці сказаць facebook.com. Але перш чым мы маглі пайсці туды, хай мяне ісці наперад і адкрыць у Chrome Інспектар сюды. Дай мне паглядзець на ўкладцы Сетка. А цяпер давайце ісці наперад і ўвесці у https://facebook.com. І я раблю гэта так, што мы не бачым ўсе гэтыя рэдырэкты і адходаў раз, гледзячы праз тых. Дазвольце мне націсніце ўвод. Добра. Мы бачым цэлую кучу запытаў. Там прыходзіць Facebook. Там цэлая куча файлаў. І тут, на мой згадванні Затрымка ў апошні раз, гэта шмат HTTP-запытаў. Але першы з іх, верагодна, самае цікавае. Так што давайце пракруціць ўніз тут, і Я павелічэння ў секунду. Гэта будзе свайго роду беспарадак, але давайце паглядзім. Facebook пасылае нам цэлая куча рэчаў. Але эй, цікава. Яны пасадкі не адзін, а чатыры ручныя штампы на маю руку тут. Set-Cookie, Set-Cookie, Set-Cookie, Set-Cookie. І ёсць некалькі асаблівасцяў тут. Усе яны згадаць некаторыя выгляд заканчэння. І, падобна, Facebook спадзяецца не помніць мяне да 2015 года. Дык вось, як мяркуецца, час, па якім Я павінен выйсці ці яны проста аўтаматычна меркаваць, што я не вернецца. Так што на самай справе нядрэнны колькасць часу. І ёсць некаторыя іншыя рэчы тут адбываецца. Гэта печыва, здаецца, гвалтоўна выдалены кажучы ён скончыўся ў 1970 годзе да з'яўлення печыва. Такім чынам, браўзэр проста збіраюся выказаць здагадку Добра, гэта як прамывання друк рукі. Але цяпер, калі мой браўзэр робіць наступны запыт - дазвольце мне ісці наперад і рабіць гэта зноў і перазагрузкі. Цяпер дазвольце мне вярніцеся да лепшых запыт і спусціцца тут, прасіць загалоўкі. Заўважым, што гэта. Так што цяпер я ў ня загалоўкаў адказу, але звернеце ўвагу, гэта кажа загалоўкі запытаў. І заўважце, што мой браўзэр у рамках сваю просьбу пасля ўдару перазагрузкі мае адпраўлена па меншай меры наступныя інфармацыя. Ці не Set-Cookie, але печыва. Так што гэта лінія, загаловак HTTP так сказаць, дзе мой браўзэр з'яўляецца свайго роду з без майго ведама ён прадстаўляючы мая рука для агляду Facebook. Такім чынам, гэтыя печыва можа быць выкарыстоўваецца, то для чаго? Каб памятаць, хто ты ёсць, ці ўспомніць, як шмат разоў вы былі там, або сапраўды што-небудзь. Дык вось counter.php. І дазвольце мне павялічыць на шрыфце. І кожны раз, калі я перазагрузіць гэтую старонку, апавяшчэнне гэта успамінаючы, колькі разоў Я быў там. Ну, гэта яшчэ не ўсё, што ўражвае. Давайце проста зачыніць гэтую ўкладку, а цяпер давайце вернемся да http://localhost/counter.php. О, гэта цікава. Гэта да гэтага часу памятаюць, нават хоць я зачыніў ўкладку. І, шчыра кажучы, калі б я закрыць браўзэр, у выпадку iх ажыццяўлення ў правільным кірунку, я яшчэ можа памятаць, што гэты карыстальнік якія ён або яна быў першы раз, і толькі адзін раз я іду ў меню Chrome, які тут тут, і перайсці да Гісторыя, і націсніце Ачысціць дадзеныя праглядаў, як некаторыя з вас, магчыма, у апошнія, толькі тады вашы печыва на самай справе быць выдаленыя падчас вэб- развіццё. Так што, калі мы ідзем - давайце зачыніць Gedit тут. І калі мы ідзем цяпер да гэтага файла. Дазвольце мне ісці ў наш віртуальных даменаў / лакальны / грамадскасці, і зробім counter.php. Звярніце ўвагу, што гэта даволі простая праграма. Гэта даволі просты вэб-сайт. Такім чынам, верхняя частка файла знаходзіцца ўсяго ў каментары. Але вось новая лінія, што вы можаце ўжо бачылі ў р-ўсталяваць сем, session_start (). Гэта лінія PHP кода, які істотна паведамляе вэб-серверу, робяць Абавязкова друк рукі і зрабіць пачытаць ручныя штампы. Вось і ўсё, што лінія робіць, і гэта робіць усё гэтага працэсу для нас. Тады звернеце ўвагу, я толькі што атрымаў дзве галіны тут. Калі ключ Лічыльнік ўнутры гэтага спецыяльная глабальная пераменная называецца $ _SESSION Усталяваны, - іншымі словамі, калі ёсць нейкая каштоўнасць там - давайце яго і захоўваць яго ў мясцовы зменная з імем $ лічыльніка. У адваротным выпадку, давайце прызначым $ лічыльнік значэнне па змаўчанні 0. Зараз вось адзін з аспектаў PHP гэта і дабраславеньне і праклён. PHP трохі неахайна. Так у той час як у З, што б Аб'ём лічыльніка былі альбо тут, альбо тут? Было б былі абмежаваныя тым фігурныя дужкі. Ведаеце, што? У PHP, ён існуе нават за межамі тых, фігурныя дужкі, тут, і тут, і тут, і тут, і нават ўнізе. Таму я кажу, што гэта дабраславеньне ў тым сэнсе, што вы не павінны думаць, як складана, як мы зрабілі некалькі тыдняў таму. Але гэта таксама трохі пра праклён у тым, што незалежна ад таго, дзе вы выкарыстоўваеце зменную ў PHP, па меншай меры, у праграме, як гэта, гэта глабальна даступнай для Добра гэта ці дрэнна. Такім чынам, вы павінны мець на ўвазе, цяпер, вашыя зменныя не могуць быць нявызначанымі. Вы, магчыма, вызначаецца іх у іншым месцы. Але тое, што я буду рабіць у канчатковым рахунку? Я збіраюся захоўваць ўнутры, што глабальнае зменная ў якасці значэння Лічыльнік ўвесці вынік робіць лічыльнік плюс 1. Так што гэта проста арыфметыка што робіць прырашчэнне гэтага лічыльніка. І тое, што я захоўваю, што значэнне яшчэ ў тут гэта значыць істотна абнавіць базу дадзеных, каб памятаць, што карыстальнік 123456789 быў тут у два разы. І калі я зрабіць гэта зноў у наступны раз я перазагрузіце старонку, ён збіраецца праверыць мой штамп руку і сказаць, о, Карыстальнік 123456789 мае цяпер быў тут тры разы. І так, што PHP і падобныя мовы робяць для нас яны высвятляючы , Як і дзе і як доўга для захоўвання значэнняў у гэты асаблівы суперглобальная. І гэта суперглобальные ў наступны раз я наведайце старонку з'яўляецца свайго роду магічным папярэдне пэўны, запоўненыя значэннямі, што былі там у апошні раз вы наведвалі, ці было гэта секунду назад, на тыдзень таму, ці ў 2013 годзе, і мы зараз гаворым пра 2015. PHP і вэб-сервер сыход ўзяцце ўсяго гэтага для вас. АЎДЫТОРЫЯ: [неразборліва]. Дэвід Малан: Зменныя у PHP з'яўляюцца практычна заўсёды глабальная калі вы аб'яўляць іх унутры функцыі, і тады яны з'яўляюцца лакальнымі для толькі функцыя. Але таму, што я не напісаў любой функцыі, то зараз яны эфектыўна глабальная працягу ўсёй маёй файла тут. АЎДЫТОРЫЯ: Ці ёсць спосаб каб зрабіць іх мясцовы? Дэвід Малан: Ці ёсць спосаб зрабіць іх мясцовы? Толькі, абгарнуўшы іх у функцыі. Што ў апошняй версіі PHP, вы можаце зрабіць гэта з ананімная функцыя. Але пра гэта ў кантэкст JavaScript. Але Кароткі адказ: не. Больш так. Добры. Добра пытанне віктарыны. Добра. Такім чынам, нарэшце, сама старонка на самай справе даволі проста. Звярніце ўвагу, што, як толькі я выхаду з рэжыму PHP, водгук што ўсе гэтыя рэчы ўніз ніжэй толькі збіраецца атрымаць пляваць з сыравіны ў браўзэр. Які прыгожы, таму што я хачу, каб адправіць карыстальнік некаторыя HTML, але я хачу для дынамічнага абнаўлення, што HTML. І адзін з спосабаў я магу зрабіць гэта, каб разабрацца вельмі хутка ўпасці назад у PHP Рэжым, выкарыстанне якая адкрывае дужка знак пытання Знак роўнасці, а затым вывесці значэнне лічыльніка. Ці, калі гэта выглядае трохі загадкава, гэта Знак роўнасці на самай справе толькі некаторыя сінтаксічны цукар для гэтага Е ($ лічыльнік). Але, шчыра кажучы, гэта крыху непрыгожа і трохі раздражняе, каб надрукаваць. Такім чынам, PHP вельмі прыгожа прапануе гэтую функцыю дзе можна проста сказаць, што гэта больш коратка такім жа чынам. Так што ж адбываецца пад капот? Давайце хутка паглядзім на сеткі Ўкладка тут counter.php. І дазвольце мне ісці наперад і першым давайце ачысціць печыва. Давайце Ачысціць дадзеныя праглядаў пачынаючы з пачатак часу. Зараз давайце вернемся сюды. Зараз давайце перазагрузіце старонку. І я вярнуўся ў нулі. Таму што мая рука штамп быў помытые, Зараз я атрымаць новы печыва. Сапраўды, калі б я паглядзець на ўкладцы сеткі і паглядзець на загалоўкі адказу, паведамлення што прыбор пасылае мяне печыва, чыё імя некалькі адвольна, але выгляд разумна, PHPSESSID. І гэта мне гэта адпраўка сапраўды вялікі выпадковы лік. Гэта не зусім шэраг. Гэта не зусім шаснаццатковае. Гэта свайго роду алфавітна-лічбавая радок але па-відаць гэта выпадковым чынам. І гэта ручной штамп так казаць, што я маю на ўвазе. Між тым, калі я націсну перазагрузку, а затым паглядзець на гэтай другой лініі для майго другога просьба, апавяшчэнне зараз, што мой запыт загалоўкі ўключаюць PHPSESSID роўна гэта, ня Set-Cookie, а проста печыва. І вось прэзентацыя майго браўзэра маёй ручной штамп. Так што зараз у якасці тізера, і мы пагаворым больш пра гэта на працягу тыдня або каля таго, але якім чынам гэта робіць вам ўразлівыя, ваш рахунак Facebook уразлівымі, і іншай такой даводзіцца ўразлівыя? АЎДЫТОРЫЯ: Калі хтосьці мае свой печыва. Дэвід Малан: Так, калі хтосьці мае свой печыва. Я маю на ўвазе сапраўды, гэтак жа, як некаторыя з вас магчыма, паспрабавалі ў падобным клубе ці парк забаў, калі вы паспрабуеце нешта як гэта скапіяваць штамп, хоць таму на руку іншага чалавека, і тады ён ці яна прадстаўляе яго як самастойна, калі ён на самай справе выглядае ідэнтычныя, 123456789, то вэб сервер, па-відаць проста збіраюся спадзяюся, што гэты карыстальнік вы. І гэта сапраўды фундаментальная пагроза ў любы час выкарыстоўваць печыва бо, калі хто-то проста падроблівае так, каб гаворым на Вашым печыва, высвятляе, што гэта ёсць, альбо сапраўды капіюючы яго гледзячы на ​​кампутары і быць як, ў парадку. Печыва Дэвіда JJ3JIK і гэтак далей, а затым яны досыць разумныя, каб ведаць як свайго роду ўручную адправіць, што печыва з браўзэра або з Праграма яны пішуць, яны маглі цалкам увайсці ў вэб-сайт, як вы. Гэта не так складана прыкідвацца хто-то яшчэ, калі мы не перагледзець р-набор два, які ўвёў што? АЎДЫТОРЫЯ: крыптаграфія. Дэвід Малан: Трохі Трохі крыптаграфіі. Просты крыптаграфія, па меншай меры стандартная версія, але крыпта тым не менш. менш. Вось і атрымліваецца, калі вы зашыфраваць усе гэтыя загалоўкі, выкарыстоўваючы тое, што вы можа зараз ведаюць больш знаёма як SSL, абароненых сокетаў, або https:// URL-адрасы, то ўсе гэтыя рэчы мы былі зірнуўшы на самай справе ў зашыфраваным выглядзе, Гэта азначае, што гэта, як вы не можа прачытаць ручную марку. Толькі facebook.com можа ці google.com, ці ў дадзеным выпадку, прыбор можа чытаў, што ручную марку. Трагічна, хоць, і зноў жа, гэта занадта дарэчы з матэрыялам NSA у апошні час, нават SSL з'яўляецца далікатным. І гэта на самай справе не так складана нават ўзламаць гэты шыфраванне. Не гэтулькі ўзлому шыфравання, але, падманваючы браўзэру ў расшыфроўцы дадзеныя заўчасна. Але зноў жа, мы будзем дражніць вас с, што ў хуткім часе. А цяпер проста баяцца. Гэта трагічна роду праўда. Добра. Такім чынам, дзе ж гэта цяпер нам дае? Ну, давайце зробім гэта. Давайце ісці наперад і прымаць хуткі тізер, перш чым мы зрабіць перапынак. І я думаю, што мы затрымлівацца трохі даўжэй сёння, але мы збіраемся, каб паглыбіцца ў нешта новенькае і сэксуальная, які будзе падцяпліць апетыт для яшчэ больш. Дык вось тізер. Так SQL, мы пачалі казаць пра вельмі коратка апошні раз. Вы сапраўды пэцкаць рукі з некаторымі з яго ў п-усталяваны сем. І з пункту гледжання непрафесіяналы, што робіць SQL - S-Q-L - для вас зрабіць? Што гэта такое? Так. АЎДЫТОРЫЯ: давайце вы дадзеныя доступу. Дэвід Малан: Так. Гэта дазволіць Вам атрымаць доступ да дадзеных ў базе дадзеных. Мова структураваных запытаў. І гэта, па сутнасці мова праграмавання. Ёсць асаблівасці тым, каб мы нават не будзем выкарыстоўваць у класе. Але вы можа эфектыўна вызначыць функцыі. Яны называюцца захоўваецца працэдуры ў SQL. Але мы будзем трымаць яго даволі простая і проста выкарыстоўваць яго для некаторых асноўных аперацый напрыклад, выбраць дадзеныя, ўстаўкі дадзеных, абнаўлення дадзеных і выдаленні дадзеных. І вы можаце сапраўды думаеце, базы дадзеных, як базы дадзеных SQL, як толькі быўшы Microsoft Excel. Паколькі SQL ставіцца да рэляцыйнай У базе, дзе стаўленне проста азначае табліцы. Радкі і слупкі. Так што вы можаце пакласці ў табліцы як гэта ці Google Docs, вы маглі б паставіць у базу дадзеных SQL , Абвясціўшы табліцу. Цяпер, як вы насамрэч доступ што інфармацыя? Ну, з камандамі або запыты, як гэта. SELECT, INSERT, UPDATE і DELETE. І па большай частцы, тыя чатыры толькі інгрэдыенты, якія вы павінны будзеце зрабіць што-то даволі магутна ў задачы ўсталяваць сем. Цяпер вернемся ў той жа дзень, вы на самой справе ўзаемадзейнічаць з базай дадзеных у чорна-белае акно тэрмінала ў міргаць хуткае, як гэта. І база даных мы бяжым на Прылада называецца MySQL, які свабодны і адкрыты рухавічок базы дадзеных крыніцы. Калі вы Google і чытаць Вікіпедыю артыкул, вы будзеце ведаць, што імя трохі пераходу для некаторых версіі Linux. У базе Марыя на самай справе раскашэліцца таму казаць аб MySQL. Карацей кажучы, Oracle купіў MySQL. Oracle вялікая кампанія. Людзі былі занепакоеныя тым, што гэта было б ўжо не застанецца зусім як з адкрытым зыходным кодам, так што гэта проста копія MySQL гэта яшчэ на волі, усё яшчэ адкрытым зыходным кодам, і усталяваны ў Fedora Linux па змаўчанні. Але гэта выгляд болі ў шыя пазнаёміцца ​​з У базе такім чынам. Такім чынам, мы ўключыць у CS50 прыбора бясплатны інструмент з адкрытым зыходным кодам пад назовам PhpMyAdmin. Проста супадзенне, што гэта напісана ў PHP. Там няма фундаментальных трэба для PHP тут. Але гэта ўсяго толькі вэб-інструмент, які мы загрузілі бясплатна, усталёўваецца ў прыбор, што дазваляе нам мець Графічны інтэрфейс карыстальніка, з якім даследаваць р-ўсталяваць сем базу дадзеных з для стварэння новых баз дадзеных, кажуць для вашага ўласнага канчатковага праекта Калі вы хочаце як, і ў канчатковым выніку стварыць дынамічных вэб-сайтаў, як CS50 фінансаў якія дазваляюць запытваць дадзеныя і дынамічна абнаўляць звесткі. Вы не будзеце мець, каб выкарыстоўваць толькі просты тэкставы файл або CSV. Вы можаце выкарыстоўваць смарт-базу дадзеных Праграма так што вы можаце выконваць больш складаныя запыты, чым проста чытанне праз усе лінейна. Так, напрыклад, гэта тое, што мы даем Вы з скрынкі для р-ўсталяваць сямі. Гэта табліца з па-відаць, па меншай меры тры калоны, адна з якіх імя карыстальніка, адным з якіх з'яўляецца хэш, і іншы з якіх з'яўляецца ID. Але самае цікавае, і проста дражніць адна думка тут, імя карыстальніка Як плануецца, ужо унікальны, ці не так? Я маю на ўвазе, большасць любы сайт, калі ў вас ёсць імя карыстальніка, ёсць Не можа быць двух Caesars. Там не можа быць двух Malans. Там не можа быць двух jharvards. Яго ўнікальная. У адваротным выпадку, яны не ведаюць, якія jharvard ёсць на самой справе. Так што можа быць матывацыяй для таксама якія маюць трэцюю калонку злева там называецца ID, які выглядае як лік, гэта ж унікальным? Ён адчувае сябе крыху залішнім мне на першы погляд. Чаму гэта можа быць пераканаўчым, каб мець не толькі унікальныя імёны карыстальнікаў, але і унікальныя нумары? АЎДЫТОРЫЯ: Яны маглі б і той жа пароль. Дэвід Малан: Людзі могуць мець той жа пароль, вядома. Гэта можа абсалютна здарыцца. Але калі ў іх ёсць гэты унікальны лагін, я сцвярджаюць, што гэта сапраўды не Незалежна ад таго, таму што калі яны ўвядуць у імя карыстальніка, мне трэба толькі праверыць іх пароль, іх хэш іх. Чаму яшчэ? АЎДЫТОРЫЯ: Больш за хуткі пошук. Дэвід Малан: Больш за хуткі пошук. Чаму? АЎДЫТОРЫЯ: ID з'яўляецца толькі адным. Дэвід Малан: ID проста адзін сімвал, або калі быць больш дакладным, гэты лік, так што, верагодна 32 біта ці нешта ў гэтым родзе. У той час як імя карыстальніка, па-відаць Джэйсан Да Hirschhorn ў там накшталт смяхотна доўга, і ён збіраецца ўзяць мяне нашмат больш часу ў радок параўнаць H-I-R-S-C-H-H-O-R-N, і, магчыма, / 0 або нешта накшталт гэтага, для таго, для пошуку Джэйсана, а не проста кажучы, дайце мне карыстальніка нумар два. Гэта 32 біт. Гэта адзін INT, што вы павінны параўнаць. І сапраўды, менавіта таму базы дадзеных , Як правіла, прызначыць унікальныя ідэнтыфікатары, каб радкоў у іх. Цяпер тое, што іншыя тыпы дадзеных ёсць акрамя INT і відавочна Радкі, як гэта? Ну, калі быць больш правільным, Базы дадзеных SQL, як MySQL, ёсць тэкставыя палі. І CHAR трохі зманліва Не адзін знак. CHAR поля ў базе дадзеных MySQL з'яўляецца адзін або некалькі знакаў, але гэта фіксаваны лік знакаў. Так, напрыклад, калі я іду да PhpMyAdmin, як вы, магчыма, ужо, або хутка будзе праблемай ўсталяваць сем, і я іду у сваю базу дадзеных, а проста для задавальнення, давайце створым новую табліцу з імем праверыць з дапамогай ўсяго двух калонак. Я націсніце кнопку Перайсці. І гэта стане даволі знаёма, асабліва, як вы Тинкер вакол па сваім меркаванні. Тут я мог бы ўвесці ID для стварэння Новая табліца тыпу INT. Але тут я можа ўвесці імя карыстальніка для ўзнавіць, што раней табліцы. І заўважце, у мяне ёсць цэлая куча тыпаў на выбар. І гэта таксама чаму PHPMYADMIN збольшага добра. Гэта свайго роду саманавучання, у якім Вы можа проста нейкая кропка і націсніце, і паглядзець на выпадальнае меню, і вывесці з што тое, што паўнамоцтвы SQL, дае табе. І сапраўды, калі я выбіраю CHAR, я тады павінны паказаць даўжыню, ці як шмат значэнняў, колькі знакаў. Такім чынам, вельмі агульныя каштоўнасці такія рэчы, як 255, але гэта крыху часу. Звычайна ў восем ўвесці імя карыстальніка. Але гэта крыху маленькія ў гэтыя дні. Так што гэта дызайнерскае рашэнне. Гэта макс. 8 знакаў, 32, 255, 1000? Гэта сапраўды залежыць ад вас. Але CHAR поля з'яўляецца фіксаваны лік. Так што выбірайце занадта мала і ты накшталт разьбовае, калі вы хочаце больш імя карыстальніка. Выберыце занадта шмат, а што Недахопы? АЎДЫТОРЫЯ: [неразборліва]. DAVID малая: Гэта марнатраўна. Як і ў C, калі ў вас ёсць большы кавалак памяці, чым трэба, ты проста марнаваць час і займаюць прастору. Такім чынам, у якасці альтэрнатывы, існуе УАКСНАК, які вырашае гэтую праблему шляхам лячэнне даўжыня не ў выглядзе фіксаванай даўжыні а ў якасці максімальнай даўжыні, і з дапамогай зменную колькасць знакаў, якія затым імкнецца выкарыстоўваць толькі як многія, як вы СІМВАЛЫ на самай справе трэба. Гэта гучыць выдатна. Чаму б нам не пазбавіцца ад Тып дадзеных CHAR тады? Якая можа быць недахоп выкарыстаннем тыпу VARCHAR, які гучыць як гэта добрая перамога? Да? АЎДЫТОРЫЯ: [неразборліва]. DAVID малая: Добра, добра. Так што, калі ўсе вашы дадзеныя аднолькавыя Даўжыня, у чым праблема? АЎДЫТОРЫЯ: Таму што вы марнуеце Дадзеныя, кажучы ім усё. DAVID малая: Так што, калі ўсе вашы дадзеныя аднолькавай даўжыні, хоць, я б сказаў, што ўказанне максімальнай даўжыні на VARCHAR нічым не адрозніваецца ад указаннем фіксаванай даўжыні на Чары, калі Вы ведаеце, што лік загадзя. Але ёсць, зрэшты, і я накшталт атрымаць з адказу, што рэальнасць што ёсць яшчэ Max, якая магла б быць раздражняльным, асабліва калі вы Назва сустрэчы чалавека гэта незвычайна доўга, што вы не прадбачыць. І гэта таксама трохі менш эфектыўна на самай справе пошук па тыпу VARCHAR як адрозненне ад пошуку СІМВАЛЫ, асабліва за доўгімі сталамі, якія маюць шмат і вялікай колькасці дадзеных. Так і тут, тэматычныя зноў Няма відавочны выбар. Так толькі, каб даць вам адчуванне іншыя тыпы дадзеных, якія могуць прадстаўляць цікавасць альбо для р-набор сямі або ў будучыню, ёсць INT. Там у BIGINT, якая як доўга доўга. Гэта, як правіла, 64 біт. Там у дзесятковую, якія вы ўбачыце ў Праблема набор, які з'яўляецца нашмат Ачышчальнік адказ на праблемы, якія мы сутыкнуўся з паплаўком і плаваюць пункту недакладнасць. А тут яшчэ DATETIME. Там літаральна тып дадзеных, які мае каб быць падобным на год, месяц, дзень, і гадзіны, хвіліны і секунды. Але SQL базы дадзеных таксама маюць рэчы, якія мы будзем называць індэксамі. І індэкса з'яўляецца тое, што вы ўвесці пры стварэнні табліцы выконваць пошук і іншыя аперацыі больш эфектыўным. У прыватнасці, ёсць тое, што называецца Першасны паказчык, што вы маглі заяўляю наступнае. Мы зрабілі гэта для вас Табліца карыстальнікаў мы даем вам. Але звярніце ўвагу, калі б я ўручную аднаўлення Табліца карыстальнікаў даючы тут гэта імя карыстальніка. Я ўжо паказаны ID. Я паказаў INT. Я паказаў імя карыстальніка з максімальна 32 сімвалаў. Але калі мы захаваем пракруткі ў гэтай даволі шырокія вокны, заўважыце, што куча іншых рэчаў, я магу назваць. Адзін з іх, я магу паказаць атрыбуты падабаецца, вы ведаеце, што гэта INT павінен быць падпісаны. Я не хачу, адмоўныя лікі, так давайце зробім гэта без подпісу. Null не мае значэння, таму што тут Я хачу, каб кожны карыстальнік мець унікальны нумар. Я не хачу, каб гэта было нулявым. Але гэта цікава. Я магу паказаць, што ID з'яўляецца альбо першаснага ключа гэтай базе дадзеных, або гэта унікальным, ці гэта індэксуюцца, або поўны тэкст. Такім чынам, для мэт сённяшняй, доўгая гісторыя Карацей кажучы, асноўным сродкам, што гэта павінна быць як канцэптуальна, так і тэхнічна поле, якое мы выкарыстоўваем, каб адназначна ідэнтыфікацыі карыстальнікаў. Таму, калі мы глядзім карыстальнікаў, гэта з'яўляецца свайго роду з абяцанне шукаць іх асноўным што унікальны ідэнтыфікатар. І база дадзеных будзе гарантаваць, што калі вы ёсць карыстальнік, нумар 3, вы не можаце фізічна ўсталёўваеце іншага карыстальніка з той жа 3 чысла. База дадзеных будзе проста адмаўляюцца , Каб захаваць змены. Якая добрая рэч, таму што вы можаце абараніць сябе ад сябе. сябе Акрамя таго, для імя карыстальніка. Такім чынам, другі шэраг, нагадаем, гэта поле Імя карыстальніка. Такім чынам, другі шэраг тут імя карыстальніка, як мы гэта рабілі ў далёкім левым куце там. Так, што яшчэ можа я хачу паказаць? Мне не дазваляюць, у адпаведнасці з SQL, пазначыць два першасных ключоў. Вы можаце задаць сумеснае ключ, дзе вы паглядзець на абодвух палях, але яны не могуць індывідуальна быць першасныя ключы. Дык вось можа быць і гаворкі. Так што можа я хачу выбраць? Ну, УНІКАЛЬНЫ падобны па духу першасны ключ, дзе вы пазначыць гэта поле павінна быць унікальным, але гэта не збіраецца быць тым, Я выкарыстоўваю ўвесь час. І мы не збіраемся выкарыстаць гэты ўсё час па якой прычыне зноў? Гэта павольней патэнцыйна, калі гэта доўгая імя карыстальніка. Гэта проста пустая трата часу. Індэкс, тым часам, паказвае, што гэта не збіраецца быць унікальным, але я хацеў бы працаваць сваю магію пад капот, каб зрабіць гэта хутчэй для мяне пошук па гэтай галіне. Так што гэта, верагодна, не мае дачынення тут. Для імя карыстальніка, я б сцвярджаць, што Унікальную добры адказ. Але выкажам здагадку, што мы зрабілі карыстальнікам больш Цікава, чым проста імёны карыстальнікаў, хэшы, і ідэнтыфікацыйныя нумары. Што рабіць, калі мы далі людзям поўныя імёны? Што рабіць, калі мы далі ім адрасы і іншыя дадзеныя пра іх? Ну, калі вы паказаць, што слупок ў база дадзеных індэксуецца, гэта азначае, што MySQL або Oracle, ці як база дадзеных вы выкарыстоўваеце, павінны працаваць сваё чараўніцтва і выкарыстоўваць нейкі мудрагелістай дадзеных Структура як дрэва, або выглядзе дрэва або хэш-табліцы, або што-то, каб гарантаваць што пры пошуку дадзеных з выкарыстаннем выбраць на гэтай канкрэтнай вобласці - як паказаць мне ўсё, што жыве на Оксфард-стрыт. Запыт у гэтым родзе. Калі вы паказалі загадзя, што Вы хочаце індэкс для гэтай галіне, вынікі будуць значна, значна хутчэй. Калі вы не пакажаце індэкс, лепшы Вы можаце зрабіць гэта лінейны пошук, калі гэта не сартуюцца. Але калі вы пакажа INDEX, смарт- людзі, што зрабілі базу дадзеных - людзі, як вы, якія зараз ведаюць, дрэвы і спрабуе і хэш-табліцы - аўтаматычна пабудаваць такую ​​дадзеных структура ў памяці, каб пераканацца, што гэтыя вынікі нашмат хутчэй. FULLTEXT пакуль што блізкія па духу, але дазваляе зрабіць шаблон вынікі, як паказаць мне ўсё, што жыве ў вуліцах, якія пачынаюцца з літара Аб па любой прычыне. Вы можаце зрабіць пошук падстаноўныя так. Або, што больш пераканаўчыя рэчы, як шоў мяне ўсё, хто мае слова - пакажыце мне усіх, чыё імя пачынаецца з пэўнай літары. Вы можаце шукаць па ключавых словах такім чынам. Добра. Такім чынам, магчымасці дызайну ёсць патэнцыйна. Ёсць іншыя, якія я буду махаць рукамі ў. Атрымліваецца, што вы можаце мець розныя механізмы захоўвання. І гэта яшчэ таямніцай, чым нам трэба вядома для задачы ўсталяваць сем. Па змаўчанні, вы, хлопцы, з дапамогай тое, што называецца InnoDB. Вы ўбачыце згадкі пра гэта недзе ў Інтэрфейс PhpMyAdmin найбольш верагодна. Але ведаю, што ёсць іншы дызайн рашэнні, якія маюць патэнцыял Цікавасць прыходзяць канчатковыя праекты, калі вы робіце нешта вэб-. Але давайце зробім гэта. Давайце пойдзем далей і паставіць гэта на экран як тізер гісторыі з удзелам вас, сусед па пакоі, і шклянку малака. Давайце дзве хвіліны або так зламаць тут. І калі вы можаце застацца, давайце прыходзяць назад, выглядаюць трохі больш на SQL, і затым трохі JavaScript з р-ўсталяваць восем на ўвазе. Добра. Такім чынам, давайце прымусіць вас задумацца аб кут так, што можна вельмі лёгка ўзнікаюць у кантэксце з выкарыстаннем базы дадзеных, або шчыра кажучы, нават пры выкарыстанні рэальнага свету рэчаў як банкаматы, каб атрымаць грошы. Такім чынам, вось халадзільнік. Выкажам здагадку, у вас ёсць адзін таксама ў Ваш інтэрната або ваш дом. І ў вас ёсць адзін сусед па пакоі, і абодва вы сапраўды любіце малако, напрыклад. Такім чынам, вы прыходзіце дадому з класам у адзін выдатны дзень. Ён ці яна не вярнуцца. Вы адкрываеце халадзільнік. Вы сапраўды хочаце вялікі шклянку малака. Там няма малака. Так што ж рабіць? Вы закрыць халадзільнік. Вы хапаеце ключы. Вы выходзіце на плошчу. І вы атрымаеце ў чарзе ў CVS на тых, самастойна касавыя рэчы, якія заўсёды заняць больш часу, чым на самай справе маючы касіраў. Ва ўсякім выпадку. Такім чынам, паміж тым, кропка кропка кропка, ваш сусед прыходзіць дадому і ён або яна Аналагічна ёсць гарачае жаданне за малаком. Такім чынам, ён ці яна адкрывае халадзільнік, выглядае ўсярэдзіне, і чорт пабяры. Ніякае малако. Такім чынам, ён ці яна галавы,, адбываецца пайсці на іншую CVS, які быў толькі квартал па некаторых прычынах, і ён або яна атрымлівае ў чарзе, каб купіць малака. Між тым, вы прыходзіце дамоў, ён ці яна прыходзіць дадому, і што рабіць Вы ў канчатковым рахунку ёсць? Удвая больш малака. Але вы сапраўды не падабаецца малако, што шмат. Так што зараз у вас ёсць столькі малака, што зараз адзін з іх проста будзе ісці кіслы у рэшце рэшт. Так што гэта сапраўды дрэнная праблема. Дакладна? Так што ж адбылося? Так прынцыпова, гэта свайго роду з смешны прыклад. Але пад капотам, што мы мелі адбудзецца тут вы абодва праверылі стан некаторай часткі памяці, халадзільнік. Вы абодва праверылі стан некаторай зменнай. Вы абодва зрабілі выснову што вы тады дзейнічалі на. Але, на жаль, у той час як ваш сусед па пакоі быў у краме, стан, што пераменная змянілася, ён ці яна вярнулася і зараз хоча, каб змяніць стан, але гэта ўжо было зменена на яго або яе. І, вядома, ён або яна не будзе мець пайшоў у краму, калі яны ведалі, што вы ўжо былі ў дарозе. Такім чынам, у рэальным свеце, як ты мог пазбегнуць гэтай праблемы, калі ў вас ёсць халадзільнік, у вас ёсць сусед па пакоі, і вы на самой справе любіце малако? АЎДЫТОРЫЯ: Зносіны. Дэвід Малан: Зносіны. ОК. Але як вы маглі б мець зносіны? АЎДЫТОРЫЯ: Пакіньце запіску. Дэвід Малан: Пакіньце запіску, ці не так? Заўсёды пакіньце запіску, для прыхільнікі шоў. Добра, заўсёды пакідаюць запіску, або пакласці сапраўды, як на вісячы замак ці нешта на халадзільнік, які трымае вашы сусед па пакоі ад агляду на стан гэтая пераменная. Цяпер, чаму гэта магло б быць дарэчныя ў Праблема ўсталяваць сем, або банкаматаў. Ну, уявіце сабе свет, у банкамаце, дзе Вы маглі б быць у стане падняцца ў банкамат Машына тут, а другі банкамат тут. І гэта адбываецца даволі часта. І выкажам здагадку, што ў вас ёсць два банкаўскіх картак, які можна атрымаць. І вы ўваходзіце ў абедзвюх машынах эфектыўна адначасова, мы спадзяемся, у той час як ніхто не глядзіць. І тады вы ўводзіце ў PIN амаль адначасова. І тады вы зрабіць баланс запыт каб убачыць, колькі грошай у вас ёсць. І скажам, у вас ёсць $ 100 пакінулі ў вашай ўліковага запісу. Так па сутнасці адначасова, вы кажуць адно, нуль, нуль, увядзіце. І вы, спадзяемся вярнуцца трохі грошай. Але колькі грошай вы можаце атрымаць назад? Цяпер кампутары ў канцы працоўнага дня, асабліва калі яны кажуць з серверы, не абавязкова рабіць тое, у тым парадку, гэта чакаецца. Такім чынам, няхай тое, што адбываецца, таму што з якія б ні былі праблемы з хуткасцю сеткі там з'яўляюцца, або пытанні CPU ёсць, або нічога падобнага, выкажам здагадку, што першы банкамат правярае свой баланс і бачыць, о, у гэтага чалавека ёсць $ 100. Але тады адцягваецца, таму што, можа быць, рэзервовае капіяванне адбываецца, і таму запавольваецца. Ці, можа быць, правяраючы, сетка падключэнне стала крыху больш павольна, таму што гэта проста адбываецца. Яны фізічных прылад. Такім чынам, у той час, другі банкамат задаваць тое ж пытанне. Колькі грошай Дэвід мець? $ 100 з'яўляецца адказам. Але паколькі першы банкамат яшчэ не пасылаецца паведамленне адняць $ 100, як Банкаматы агледзелі сховішча банка, бачачы там $ 100 ёсць, а цяпер абедзве машыны патэнцыйна з'яўляюцца збіраецца выплюнуць адказ. Цяпер, гэта выдатна для вас у пэўным сэнсе калі тое, што банк робіць у канчатковым рахунку, гэта змяніць колькасць да мінус 100 па усталяваўшы зменную роўную вашай банкаўскі рахунак роўны 0, у адрозненне рабіць мінус 100. Цяпер у горшым выпадку для банка - ці ў лепшым для банка, тым часам, яны даюць вам $ 200, і ваш банкаўскі рахунак зараз паказвае адмоўны $ 100, што на самой справе не на карысць вам наогул. Але справа ў тым, што гэтая гонка стан на працягу двух суседзяў па пакоі, якія атрымліваюць малако, або на працягу двух банкаматаў, якія спрабуюць атрымаць наяўныя грошы і змяніць стан сховішча у той жа час існуе якой-небудзь раз у вас ёсць база дадзеных. Зараз у праблеме ўсталяваць сем, гэтае пытанне ўзнікае ў тым сэнсе, што калі вы купляеце Доля Facebook складзе, а затым на працягу Напрыклад, вы купляеце другі долю Facebook акцыі, вы павінны пераканацца, Рашэнне аб тым, праграміста. Для таго, каб вырашыць, як абнавіць У базе, шанцы вы збіраецеся ёсць па адным радку для гэтай акцыі, і гэта з'яўляецца адным з спосабаў яе рэалізацыі. І вы будзеце мець адну акцыю FB, які з'яўляецца іх сімвалам Біржавы сімвал для гэтага імя карыстальніка, або гэтага карыстальніка ID, унікальны ідэнтыфікатар. Але тая ж гісторыя можа адбыцца тут. Калі вы збіраецеся рабіць ВЫБАР ў SQL, як вы ўбачыце ў задачы ўсталяваць сем, калі вы бачыце, ой, Дэвід мае адну акцыю з Facebook складзе. А цяпер дазвольце мне змяніць, каб гэта было дзве акцыі, таму што ён хоча купіць Другая акцыя. Але выкажам здагадку, што Дэвід на самай справе было два вокны браўзэра адкрыць, або выказаць здагадку, што гэта агульны рахунак з двума мужам і жонкай, і абодва яны спрабуюць выканаць тая ж аперацыя, там таксама існуе патэнцыял для прыняцця рашэння, каб быць зроблены на аснове папярэдняга стан свету - уліковы запіс мае адну акцыю - і абодва чалавек, або абодва сервера, цяпер паспрабуйце сказаць павялічваць яго да двух акцый. Але ў гэтым выпадку, вы, магчыма, спаганяецца мне грошы для абедзвюх акцый, але павялічваецца толькі, што адзін раз. Карацей кажучы, асноўная праблема тут, як і з жартам аб сыходзе Адзначым, або пакласці замак на ім, з'яўляецца калі два чалавекі, або два патокі - ўспомніце нуля - можа праверыць стан некаторай зменнай , А затым паспрабаваць змяніць гэтую зменную, але гэтыя дзве рэчы не адбываюцца ў У той жа час, але можа атрымаць перапынены іншымі, што адбываецца, дадзеныя могуць патрапіць у вельмі дзіўным стане. І вы можаце скарыстацца ці вы можаце пакутаваць у сэнсе на прыкладзе грошай. Такім чынам, у праблеме ўсталяваць сем, мы даем вам гэта адна радок кода, якая доўгі Карацей кажучы, вырашае гэтую праблему праблема ў MySQL. Гэта вельмі доўга інструкцыя, якая ня нават размяшчэння на адной лініі на Экран тут гарантуе, што ваш аперацыя тое, што называецца атамарным. Усё гэта адбываецца адразу, або так не бывае наогул. Гэта вельмі доўга фраза не можа атрымаць перапынены часткова. І тое, што яна робіць, гэта ў літаральным сэнсе што ён кажа. Устаўце ў некаторай табліцы наступнае тры палі гэтыя канкрэтныя значэнні, але на дублікат ключа, не рабіць ўстаўкі. У абнаўлення. Так што гэта, як рабіць ВЫБАР і INSERT так сказаць у той жа час. І тое, што гэта ключ, які, верагодна, называюцца сюды? Аказваецца, і вы ўбачыце гэта ў Праблема ўсталяваць сем у спецыфікацыі, так як мы абвясцілі там быць унікальны ключ На гэтай канкрэтнай табліцы такім чынам, каб вы не можаце мець некалькі радкоў для аднаго карыстальніка з ж дробныя акцыі сімвал - у гэтым прыкладзе тут, DVN.V з'яўляецца дурная дробныя акцыі, што мы гл ў спецыфікацыі. Таму што мы абвясцілі, што гэта будзе унікальны, што гэта значыць, што калі вы паспрабаваць ўставіць дублікат радкі, вы замест збіраецца абнаўляць яго без хто-небудзь яшчэ, які мае шанец змяніць стан свету небудзь. Карацей кажучы, гэта гарантуе, рэчы атамная. У больш агульным, хоць, базы дадзеных як MySQL - і вам не трэба гэтую функцыю для р-задаць сем, але мець на ўвазе, для будучыня - падтрымлівае тое, што называюць здзелкі, дзе вы можаце сказаць, Пачаць транзакцыю ў літаральным сэнсе. Пасля гэтага можна выканаць дзве заявы SQL. І SQL заяву, як вы ўбачыце у р-ўсталяваць сем, выглядае трохі нешта накшталт гэтага. Абнавіць табліцу з імем ўліковага запісу. Усталюйце калонку балансу, роўны ўсё слупок баланс у цяперашні час мінус 1000, дзе колькасць, нумар рахунку, як ідэнтыфікатар карыстальніка, роўная 2, а затым абнавіць кошт кропка кропка кропка. Так з пункту гледжання непрафесіяналы, тое, што робяць гэтыя два запыты, здаецца, робяць у рэальны свет пачуццё банкінгу? АЎДЫТОРЫЯ: Перанос да эканоміі. Дэвід Малан: Цалкам дакладна. Пераклад сродкаў ад аднаго рахункі на іншы. І гэта яшчэ адзін прыклад, дзе вы сапраўды хочаце, каб гэтыя дзве рэчы здарыцца або ня адбыцца. Вы не хочаце, каб нешта атрымаць у сярэдні з іх і патэнцыйна сапсаваць матэматыка або сапсаваць, колькі ў вас грошай, ці колькі грошы ў банка. Так у чым жа сапраўды добра аб здзелках у MySQL з'яўляецца тое, што і баз дадзеных больш агульным сэнсе, што яны і разумныя людзі, якія рэалізаваны гэтыя асаблівасці высветліць, як зрабіць Пераканайцеся, што абедзве гэтыя рэчы здараюцца ці няма наогул. І калі вы сапраўды якія імкнуцца зрабіць сайт, які выкарыстоўваецца людзьмі на кампус, людзі ў рэальным свеце, робячы нешта ў тым сэнсе, запуску, гэтыя віды праектныя рашэнні, якія становяцца ўсё так важна. У адваротным выпадку, вы пачынаеце губляць дадзеныя, губляюць карыстальнікі, або ў горшым выпадку, як мы бачылі тут, патэнцыйна губляюць грошы. Такім чынам, яшчэ раз, больш падрабязна пра гэта ў задачы ўсталяваць сем, а таксама, магчыма, для некаторых Вы ў фінальных праектаў. Так давайце зменім гэтую карціну, мы павінны былі некалькі раней, проста ў яшчэ адзін спосаб. Такім чынам, дазвольце мне на самай справе ўбачыць, калі я магу - Не, гэта не было. Там гэта. Так што гэта, дзе мы пакінулі ў мінулы раз. І атрымліваецца, што мы збіраемся, каб кінуць яшчэ адна рэч ў мікс тут - мова называецца JavaScript. Так JavaScript на самай справе падыходзіць у гэтай частцы - і я не зусім пакінуць досыць месцы, так што гэта не цяпер у маштабе. ОК, гэта сапраўды шкада. ОК, так што гэта JavaScript. Добра. Я сапраўды робіць яму мядзведжую паслугу. Добра. Так JavaScript з'яўляецца яшчэ адным праграмавання мова, і наша апошняя, калі гэта дапамагае супакоіць, што не нашмат больш, з пажарных гідрантаў тут. Так JavaScript таксама інтэрпрэтуецца мова, а значыць, вы не скампіляваць яго ў нулёў і адзінак. Вы проста запусціце яго. Але тое, што прынцыпова адрозніваецца з JavaScript звычайна з'яўляецца тое, што вы ня запусціць яго на вашым вэб-серверы. Гэта не становіцца працаваць у Прыбор па сабе. Хутчэй, ён атрымлівае загружаны карыстальнікам праз HTTP ў свой браўзэр - Chrome, Safari, Internet Explorer, Firefox, што заўгодна, - і гэта браўзэр, які выконвае гэты канкрэтны мова праграмавання. Такім чынам, каб было ясна, PHP да гэтага часу было выконваецца або ў камандным радку ў наш чорна-белае акно, на сэрвэры як прыбор, кампутар як прылады, ці гэта было выкананы на вэб-сэрвэры працуе на кампутары. Але тэма тут з'яўляецца тое, што PHP да гэтага часу быў выкананы на боку сервера, так карыстальнік і браўзэр карыстальніка ніколі не бачыць лінію PHP кода. На самай справе, калі вы калі-небудзь адкрыць браўзэр для ваш сайт або іншы, і вы фактычна бачыць PHP код у акне, хтосьці аблажаўся. Таму што гэта не павінна быць адпраўлены ў браўзэр непасрэдна. Гэта, як мяркуецца, якая будзе выканана і павярнуўся ў нешта накшталт HTML. Але ў JavaScript па сутнасці наадварот. Гэта прызначаецца, каб быць запушчаны як правіла, усярэдзіне з акна браўзэра карыстальніка. І якія віды сайтаў выкарыстоўваюць JavaScript, то ў гэтыя дні? Як літаральна кожнага папулярнага вэб-сайта. Кожны вэб-сайт, што вы, хлопцы, верагодна, выкарыстоўваць штодня выкарыстоўваць наяўнасць для просты і нават самыя сэксуальныя асаблівасці. Так нешта накшталт Facebook Чат, калі вы выкарыстоўваеце гэта. Як гэта на самай справе працуе? Ну да гэтага часу, усе рэчы мы зроблена з HTML і PHP мяркуе, што Вы падцягнуць URL, і вы патрапілі Enter, і вы бачыце HTML кантэнт. І вы націснеце на спасылку, якая змяняе URL, змяняе старонку, і перазагружаецца некаторыя новы змест. Націсніце іншы URL або адправіць форму, вы атрымаць ўзбітым на іншую старонку і вы бачыце новага змесціва. Але, выкарыстоўваючы нешта накшталт Facebook Chat, або Gchat або Google Maps, рэдка робіць ўся старонка абнавіць такім чынам, што вы бачыце белы экран на імгненне і то новы змест. Хутчэй, вэб-старонкі сёння дынамічна атрыманне абнаўляюцца зноў і зноў і зноў усё накшталт з за кулісамі. І атрымліваецца, што, калі вы сапраўды ідзяце ў нешта накшталт Facebook або Gchat, або Gmail, а абнаўлення старонкі аўтаматычна без перазагрузкі ўвесь экран, што адбылося ў тым, што Ваш браўзэр зрабіў выгляд таемна дадатковыя HTTP запыты - ня для цэлых вэб-старонак, але толькі для маленькія порцыі дадзеных, як імгненнае паведамленне, што ваш сябар толькі паслаў цябе, або абнаўленне статусу, што хтосьці проста паслаў цябе, альбо твіт што хтосьці толькі што адправіў. Гэта проста зрабіць невялікія запыты на Дадзеныя, а затым з дапамогай Javascript, Гэты мова праграмавання, каб змяніць тое, што вэб-старонка выглядае без сервер дапамагае без сервера генерацыі, што HTML. Карацей кажучы, JavaScript можа быць выкарыстаны тады каб не толькі прынесці новыя дадзеныя ад сервер без перазагрузкі цэлае старонкі ці адпраўка формы. Ён таксама можа быць выкарыстаны для змены так званы DOM - Аб'ектная мадэль дакумента - , Які з'яўляецца проста мудрагелісты спосаб для кажучы дрэва HTML што мы бачылі ў апошні раз. Такім чынам, каб супакоіць, JavaScript з'яўляецца сінтаксічна так падобны на C, а таксама. Там ня мае асноўнага функцыяй. Вы проста пачаць пісаць код і ён будзе атрымаць выкананы, або інтэрпрэтаваць больш правільна. Умовы будзе выглядаць наступным чынам. Нічым не адрозніваецца ад C або PHP па гэтым пытанні. Лагічныя выразы альбо-е выд разам будзе выглядаць наступным чынам. ANDed разам выглядаць наступным чынам. Перамыкачы будзе выглядаць наступным чынам. Для завесы будзе выглядаць наступным чынам. У той час як завесы будуць выглядаць наступным чынам. У а завесы будзе выглядаць наступным чынам. Гэта новая. Так JavaScript не мае Еогеасп пабудаваць як такой, але гэтая канструкцыя для зменнай я ў масіве, і я ў гэтым справа становіцца значэнне індэкса. Так што гэта трохі адрозніваецца ад той, Еогеасп, хоць новыя версіі JavaScript выходзяць ўвесь час, так што нават гэтыя магчымасці мовы развіваюцца. І як у бок, JavaScript днях таксама могуць быць выкарыстаны на сэрвэры гэтак жа, як PHP з выкарыстаннем базы пад назвай Node.js. Адзін з CS50 ў ТФ, Кевін, прывяло семінар па Node.js, што даступна ў cs50.net/seminars. Так што калі вам цікава, ведаюць, што вам можаце выкарыстоўваць гэта на боку сервера, як добра, але гэта даволі нядаўняя тэндэнцыя, але магутны ў гэтым. Гэта крыху адрозніваецца. Гэта масіў у JavaScript. І тое, што здаецца вам розныя у параўнанні з C або PHP? Ёсць некалькі простых гісторый мы можам сказаць тут. Чаго не хапае ў параўнанні з PHP? АЎДЫТОРЫЯ: [неразборліва]. Дэвід Малан: Так? На жаль, яшчэ раз сказаць? АЎДЫТОРЫЯ: Ці не абвяшчаючы тып зменнай. Дэвід Малан: Мы не абвясціўшы тып зменнай. Таму на самай справе зусім як PHP, мы не Паказваючы тып гэтай зменнай. Хутчэй, мы ў больш агульным кажучы вар для зменнай. У нас няма непрыемнасць у PHP з знак даляра, які ў той час стомна Тып, робіць больш ясным, што нешта пераменная. У той час як тут, мы свайго роду назад Падыход C шляхам проста тэлефаную пераменная па імі мы хочам , Каб даць яго, як нумары. А таксама, як PHP, мы маем квадратныя дужкі для значэнні ўнутры гэтага масіва. Так зменныя ў JavaScript таксама можа выглядаць наступным чынам. Звярніце ўвагу, тут гэта радок называецца з, але так жа ў нас не пазначаны што гэта радок. Тут, хоць гэта функцыя, якая ня існуюць у дакладнасці так жа, у PHP, але трохі аналагічна. Гэта аб'ект у JavaScript. І аб'екты з'яўляюцца свайго роду швейцарскі армейскі Нож структуры дадзеных у гэтым вам іх можна выкарыстоўваць для любога колькасці рэчаў. Вось, напрыклад, мы абвясціўшы зменная з імем цытата. Тып гэтай зменнай з'яўляецца аб'ектам. Вы можаце думаць пра гэта як пра C структуры што мае ключы і значэння. Сімвал з'яўляецца адным з ключавых. FB гэта значэнне, па-відаць, Сімвал акцыі. Коска. Цана з'яўляецца яшчэ адным ключавым, і яго значэнне па-відаць, з якая плавае кропкай, або лік у цэлым у JavaScript, з $ 49.26. Такім чынам, PHP не мае - мы не бачылі ў аб'ектах PHP даволі як гэта, але мы сапраўды бачылі, аналаг, які быў і што? АЎДЫТОРЫЯ: [неразборліва]. Дэвід Малан: масівы Асацыятыўныя. Так у той час як PHP мае асацыятыўныя масівы чые сінтаксіс калі-небудзь злёгку так розныя - мы бачылі квадратныя дужкі. Мы бачылі дзіўныя стрэлкі знакаў. JavaScript мае аб'екты, але гэта у асноўным семантычнае адрозненне і адрозніваецца сінонімам цяпер. Тым не менш, як у бок, PHP таксама мае аб'екты такім чынам, што Java і іншыя мовы маюць аб'екты ў аб'ектна-арыентаванае праграмаванне. Але мы будзем выкарыстоўваць іх толькі для тыпаў дадзеных для цяпер. Аб'екты і асацыятыўныя масівы. Гэта можна было б зрабіць яго трохі больш ясным. Вось чаму аб'ект карысна. Калі вы хочаце аб'явіць студэнта, як Zamyla, мы можам на самай справе інкапсуляцыі так бы мовіць ўнутры, што аб'ект з дапамогай фігурных дужак, як да цэлай кучай ключоў і значэння ў тут. У нас ёсць ID, дом, і імя Zamyla, варта кропка з коскі ў якасці звычайна ў канцы. Тут, унізе таксама гэта крыху розныя, але і вельмі магутны у гэтыя дні. Вось масіў, і я ведаю, што, паколькі ёсць квадратная дужка да верх і квадратная дужка у ніжняй часткі. І гэта масіў, якія дадзеныя з увядзіце мабыць, у JavaScript? Гэта масіў гэта выглядае як тры аб'екты. І я ведаю, што гэта толькі аб'ектам з-за фігурныя дужкі. І звярніце ўвагу, ёсць адкрытая фігурная дужка, некаторыя рэчы, недалёка фігурная дужка, коска, затым яшчэ трохі, коска, а затым яшчэ трохі. Дык вось тры аргумэнты падзеленыя двума коскамі. Так што гэта масіў з трох аб'ектаў. І кожны з гэтых аб'ектаў па-відаць, студэнт або супрацоўнік некаторых роду, кожны з ID, дом, і імя. Але я назваў гэта нешта называецца JSON - JavaScript Object Notation. І гэта фармат дадзеных, які на самай справе настолькі вельмі папулярныя і ў модзе ў гэтыя дні, што, калі вы пішаце дадатак, якое выкарыстоўвае Facebook API, API Twitter, сапраўды амаль любы API там у гэтыя дні, у тым ліку некаторыя з CS50 ўласную, Дадзеныя вы вернецеся не ў старая школа фармат CSV. Таму нагадаем, што CSV супер проста. Ён знаходзіцца ўсяго ў калоны, падзеленыя коскамі. Дадзеныя JSON дае вам больш метададзеных. Ён звязвае ключ з кожнага значэння так яны не павінны проста выказаць здагадку, што слупок нулявая адно значэнне, калонка адзін іншы, калонка два гэта іншае. Усе у аб'екце JSON тут з'яўляецца свайго роду з самоописываемыми, таму што кожны адно з імёнаў у гэтым файле ёсць літаральна назваць перад ім, як двукоссях. Такім чынам, давайце зірнем на Некалькі прыкладаў тут. Адпусьці мяне ў прыбор. І дазвольце мне перайсці ў наш віртуальны хост Каталог, у грамадскасці. І дазвольце мне перайсці ў JavaScript каталог. І давайце ісці наперад і адкрыць дом-0.html, дзе DOM проста азначае, аб'ектная мадэль дакумента. Гэта дрэва матэрыял, да якога Я казаў раней. І дазвольце мне прапанаваць наступнае. Вось вэб-старонка якога Цела даволі просты. Так тут унізе, заўважыць мяне ёсць форма. Мы бачылі тых, перад. Ён мае два ўваходу, адзін з якіх мае Ідэнтыфікатар імя, адзін з якіх мае тып прадставіць, і першы сваё тып тэксту. Так што гэта на самай справе гучыць даволі проста. Пойдзем адсюль. Давайце вернемся на гэтую старонку тут. Пойдзем у лакальны, і ідзі ў наш каталог JavaScript, і перайсці да дом-0, і тут мы маем гэтую форму. Дык вось, па-відаць усё гэта старонка не змяшчае. Ён мае поле імя з кнопку Адправіць. Але я не збіраюся выкарыстоўваць PHP тут. Я збіраюся зрабіць усё, на баку кліента так сказаць у JavaScript наступным чынам. Звярніце ўвагу, што я сапраўды атрымаў імя Поле гэтага ўваходу унікальны Ідэнтыфікатар, які будзе на самой справе выратаваць мяне нейкі час у адзін момант. І заўважце, я прадставіў іншы тэг ў галаве маёй вэб-старонцы,  тэг. Так што гэта ў гэтым сэнсе, што JavaScript з'яўляецца мова праграмавання на баку кліента. У гэтым выпадку, гэтак жа, як CSS, я паклаў гэта прама ўнутры майго HTML. Але звярніце ўвагу, я абвясціў функцыю што выглядае трохі як PHP сінтаксічна, але гэта на самай справе JavaScript, таму што зноў жа, гэта на баку кліента ў браўзэры. І зрабіць здагадку, што гэта будзе зрабіць, хоць некаторыя з сінтаксісу тут з'яўляецца новым. АЎДЫТОРЫЯ: прывітанне, хто б ні. Дэвід Малан: Гэта будзе павітацца таго, хто наведвае гэтую старонку. Дык як? Так заўважыць, атрымліваецца, у JavaScript ёсць функцыя абвесткі (). Гэта вельмі роду сумна функцыя, на самай справе проста, як правіла, раздражняць карыстальнікаў. Гэта не той, які вы павінны сапраўды выкарыстоўваць звычайна, але гэта хуткі і брудны спосаб роду друк нешта да графічным інтэрфейсам інтэрфейс, як браўзэры. Заўважце, што тут у мяне ёсць Радок у адзінарныя двукоссі. Аказваецца, што ў адрозненне ад C, JavaScript можа на самай справе маюць выкарыстанні аднаго цытуе, і, шчыра кажучы, гэта проста выгляд стылістычнага канвенцыі паміж JavaScript праграмісты выкарыстоўваць адзінкавыя двукоссі. PHP, яны на самой справе маюць некалькі іншы сэнс. Але цяпер, проста ведаю, што што гэта адзіная прычына. Канвенцыя ў JavaScript, што часта выкарыстоўваць адзінарныя двукоссі, але мы маглі б выкарыстоўваць падвойныя двукоссі ў абодвух месцах, а таксама. Так што гэта цікава. Нагадаем, у апошні раз, што мы мелі, што малюнак на экране, які прыцягнуў дрэва дзе вы мелі HTML вузел, і Галаўнога вузел, а вузел цела, а затым некаторы тэкст. Але быў адзін спецыяльны вузел у самы верх, што я назваў гэты дакумент. Ну, аказваецца, у JavaScript, любы раз, калі вы напісаць праграму ў JavaScript ў браўзэры, у вас ёсць доступ да спецыяльная глабальная пераменная. Падобныя па духу суперглобальных РНР, гэты завецца ў у ніжнім рэгістры дакумент. Гэта як структуры, але гэтая структура таксама мае функцыі ўнутры яго. Так C структура проста ёсць дадзеныя звычайна. Але аб'ект JavaScript, так як гэта тэхнічна таксама мае функцыі, інакш вядомы як метады, ўнутры яго. І вы можаце выклікаць функцыю ўнутры гэты аб'ект у літаральным сэнсе робіць сваю Імя, кропка, а затым назва функцыя, або зноў метад. Гэта проста сінонімам, сапраўды. І што гэтая функцыя рабіць? Вы можаце роду здагадацца з назвы. Атрымаць элемент па ID. Дык гэта будзе пошук па вэб-старонку, пошук гэтае дрэва, шукаю што вузел, AKA элемент, мае Унікальны ідэнтыфікатар цытатай канец цытаты імем. І што тады я буду рабіць? Я збіраюся атрымаць значэнне ўнутры што вузел у дрэве, і я збіраюся неяк павітацца з такім імем. Так зрабіць здагадку, нават калі мы не маю бачыў гэта ўсё ж, тое, што робяць плюс сімвалы азначаюць тут і тут, верагодна,? АЎДЫТОРЫЯ: Аб'яднанне. Дэвід Малан: Аб'яднанне. Так, і гэта толькі роду праектных рашэнняў людзі зрабілі гадоў таму. У PHP, вы аб'яднаць рэчы з кропкамі. У C, вы скачаце праз некалькі абручоў і выклік такой функцыі як StrCopy () або Strcat () або іншыя падобныя функцыі. Але ў JavaScript, вы выкарыстоўваеце плюсы. Так што гэта проста аб'яднання тры струны - прывітанне, імя, а затым Клічнік. Так што, калі і чаму гэтая функцыя называецца, хоць? Ну, зрабіць здагадку ад HTML у ніжняй часткі. Чаму вітаць () завецца, або калі? Па-відаць, як лепшае, што я магу сказаць, на ўявіць, калі гэтая форма уяўляецца, Я збіраюся зрабіць усё ўнутры гэтых двукоссяў. І ў прыватнасці, я збіраюся патэлефанаваць вітаць (), а затым вярнуцца ілжывым. Ну, давайце паглядзім, што чыстая Эфект тут у першую чаргу. Такім чынам, дазвольце мне ісці наперад і ўвесці ў, скажам, Ларэн, Адправіць. Добры дзень Ларэн. Давайце паглядзім, калі магчыма гэта было проста пашанцавала рэалізацыя. Не-е. Так што гэта набраўшы з усе імя я на самой справе паклаў там. Але звярніце ўвагу, што не мяняецца. URL-адрас па-ранейшаму дом-0.html. Там няма register.php. Там няма другой файл. Там няма атрыбут дзеянні. Дык што ж гэта вяртанне ілжывым як мяркуецца, робіш? Чаму я выкліку вітаць (), а затым вяртанне ілжывым напэўна? Што звычайна адбываецца, калі вы націскаеце Адправіць на форме, што нават у нас ёсць бачыў на мінулым тыдні? АЎДЫТОРЫЯ: [неразборліва]. Дэвід Малан: Само дзесьці, ці не так? Гэта выходзіць на нейкі URL прызначэння. Але я не хачу, каб гэта адбылося тут. Я хачу, каб мой вэб-старонкі, каб быць цалкам дынамічны, як Gmail, дзе, як толькі вы там, вы будзеце спыняцца там. URL-адрас не змяняецца такім чынам, што паказвае ўся старонка перазарадкі. Хутчэй, я проста хачу, каб нешта змяніць як друк нешта тут на экране. Ну дазвольце мне ачысціць гэта да няшмат. Дазвольце мне адчыніць не дом-0, але дазвольце мне адкрыць Дом-2. Сапраўды гэтак жа вы бачылі некаторыя сінтаксіс тут. Аказваецца, што мы толькі што зрабіў выкарыстоўвае сыравіну JavaScript. Так што гэта сапраўды мова JavaScript. Некаторыя з вас могуць ведаць, з бібліятэка называецца JQuery. Так JQuery не тое ж самае паняцці, як JavaScript. Гэта проста бібліятэка, якая вельмі разумныя хлопец напісаў і папулярызаваў такія , Што амаль кожны чалавек у свеце ў цяперашні час выкарыстоўвае JQuery пры выкарыстанні JavaScript. І на першы погляд, шчыра кажучы, гэта выглядае крыху больш загадкавым. Але вы знойдзеце, асабліва калі вы ідзяце там для вашага канчатковага праекта з вэб развіццё, вы ўбачыце, што гэта чысціць рэчы і эканоміць вам даволі некалькі радкоў кода. Так што давайце проста погляд на тое, як гэтая форма працуе. Звярніце ўвагу, што я выдаліць відаць ад майго HTML? Там няма на прадставіць апрацоўшчык так бы мовіць. Там няма атрыбуту. Таму што вы ведаеце, што Я сапраўды не падабаецца? Я адчуваў, што мы падалі да старых звычак там. Гэтак жа, як гэта пачынала адчуваць сябе неакуратна змешвацца як CSS з HTML, таму што вы, здаецца, кідалі розныя мовы па ўсім месца, гэтак жа гэта пачалося адчуваць як дрэнны дарозе спусціцца, дзе Я стаўлю код JavaScript ўнутры майго HTML, а не факторынгавыя яго. Дык вось, ўрок тут. У Дом-2.html, я факторынгу яго. І я трохі рабіць рэчы рознаму. На дадзены момант, я збіраюся махнуць рукамі на тое, што гэта сапраўды пад капотам. Але толькі зараз выказаць здагадку, што, што першы радок кода ў гэтай бібліятэцы называецца JQuery проста азначае, калі Дакумент гатовы, выканайце наступныя дзеянні. Паколькі вэб-старонкі можа заняць некаторы час для загрузкі. Вы можаце быць на павольным інтэрнэце злучэнне, і гэта магло б быць спінінг і спінінг, і, нарэшце, ён зараджаны. Гэта радок кода проста кажа дачакайцеся ўся старонка будзе гатовая, дакумент гатовы, перад выкананнем гэтага кода. А цяпер звярніце ўвагу, гэта, верагодна, самы карысны першы адабраць у JQuery. Гэтая лінія тут вельмі блізкія па духу да гэтага значна даўжэй лініі тут. У той час як у сырам кода JavaScript, ёсць існуе глабальны аб'ект дакумента, ёсць функцыя GetElementById (), людзі, якія напісалі JQuery спрошчана, што проста сказаць знак даляра, а затым унутры дужкі паставіць дзве цытаты, а затым пакласці сімвал рашотка з наступным унікальны ідэнтыфікатар вы хочаце захапіць. Так гэта эквівалентна document.getElementById. Між тым,. Уявіць проста азначае на прадстаўленне якой бы форме вы спасылаючыся на злева, перайдзіце наперад і выканаць гэта. Але цяпер гэта цікаўнасць таксама. Што дзіўна аб тым, што Я вылучыў тут? Мала таго, што гэта збольшага сінтаксічна новая, ёсць таксама нешта без вестак зніклыя. АЎДЫТОРЫЯ: Гэта проста называецца функцыя? Гэта не называецца абвесткі? Дэвід Малан: Так. Ну, так абвесткі () не працуе тут, каб быць справядлівым. Але няма ніякай згадкі пра імя, як вы ведаеце, Foo або нешта тут. І на самай справе, гэта адна з асаблівасцяў з JavaScript, што гэта даволі магутны, але і зусім новыя. І PHP на самай справе мае гэта таксама. Дазвольце мне ісці наперад і рабіць нешта сапраўды хутка. Дазвольце мне ісці наперад і паставіць гэта тут. Дазвольце мне зрабіць гэта. Функцыя. Давайце назавем гэты апрацоўшчык (). Функцыя апрацоўшчыка, так бы мовіць. Тое, што выконвае некаторыя аперацыі. Дазвольце мне ачысціць свой водступу. І паставіць гэта тут. І што гэта тут. Да. ОК. Так што зараз у мяне ёсць функцыя называецца апрацоўшчык (), што я сапраўды не ведаю, што ён робіць яшчэ. Гэта проста яшчэ ёсць такое. На жаль. Прыняў занадта шмат. Давайце зробім гэта. Добра. Прабачце. Добра. Дазвольце мне зрабіць гэта. ОК. Гэта выглядае прыгожа і прама Цяпер наперад. Дазвольце мне зрабіць гэта. Зрабіце гэта. І добра. Так што цяпер, давайце паставім гэта тут. Няма больш праграмавання на лета. ОК. Так што цяпер, давайце вернемся да дзе гісторыя пачалася. Раней я казаў, што гэтая лінія тут значыць, калі дакумент будзе гатовы, перайдзіце наперад і рабіць гэта. Што я хачу зрабіць? Ну канкрэтна, я хачу пайсці наперад і зрабіце наступнае. Выканаць гэты радок кода, а затым тое, што я хачу, каб вы зрабіць, гэта патэлефанаваць гэтаму працаваць пры адпраўцы формы. Вось што цікава. Гэта само па сабе не з'яўляецца функцыяй. Звярніце ўвагу, я не паставіўшы дужкі тут, у звычайным рэжыме. Я літаральна перадачы функцыі называецца апрацоўшчык () іншую функцыю называецца Submit () у якасці аргументу як хоць гэта як зменную. І гэта адна з асаблівасцяў JavaScript, з'яўляецца самім функцый на самай справе проста аб'ектамі. На самай справе, у рэчаіснасці яны зменных нейкі. І калі назва функцыі апрацоўшчык (), няма ніякіх прычын, я не магу перадаць яго ў якасці аргументу тут. А гэта значыць, калі форма з ідэнтыфікатарам дэма прадстаўленыя, выклікаць гэтую функцыю. Але цяпер, калі я адмяню ўсё гэта, чаму тады я, магчыма, зрабіць гэта хвіліну назад? Ну, гэта ананімная функцыя. Бо, шчыра кажучы, я зразумела, чаму я турбуе марнаваць час аб'явы Функцыя называецца апрацоўшчыкам () толькі патэлефанаваць гэта ў адным і толькі адным месцы? Калі мне не трэба імя, і я не трэба патэлефанаваць яго больш чым у адным месцы, давайце проста рэалізаваць функцыю там, дзе мне гэта трэба. І так JavaScript і PHP, што падтрымка называюцца ананімнымі функцыямі, што Дазвольце мне зрабіць менавіта гэта тут. Але мы проста падрапаць паверхню. Давайце дражніць толькі з парай Канчатковы прыкладаў. Калі я іду ў quote.php. Звярніце ўвагу, што гэта на самай справе PHP функцыі, праграма PHP, які я напісаў што чакае HTTP параметр, званы сімвал, і я магу перадаць у значэнне, як FB. І калі мы на самай справе паглядзець на зыходны кодзе, гэта запыт бясплатны сайт называецца Yahoo Finance, як і P-набор сем, і ён вяртае мне мабыць што-то ў Фармат JSON з'яўляецца вядомы - Натацыі аб'ектаў JavaScript. Гэта проста аб'ект. Звярніце ўвагу на фігурныя дужкі, двукоссі тоўстай кішкі, і коскі. Цяпер між тым, гэта даволі халаднавата. Таму што я, верагодна, можа выкарыстоўваць праграмаванне мова для стварэння URL-адрасоў які выглядае наступным чынам дынамічна, ці не так? Я магу змяніць гэта на Google і вярнуцца ад Google кошт акцый $ 1,017.55. Такім чынам, давайце паглядзім, калі мы не можам выкарыстоўваць гэта цяпер. Пусціце мяне да Ajax-0 тут, якія выглядае наступным чынам. Гэта проста сайт, які мае форма з кнопкай. Дазвольце мне пайсці далей і ўвесці YHOO для знака акцый Yahoo, націсніце кнопку Атрымаць Цытата, і цяпер заўважаю я атрымаў папярэджанне 32.86. Дазвольце мне на самой справе пайсці аматар версія на гэтай старонцы, версія два, а увядзіце скажам, Microsoft, MSFT. Атрымаць спецыяльная прапанова. І зараз не заўважаеце, адсутнічае апавяшчэнне. Звярніце ўвагу, дзе ён кажа цану , Якія будуць вызначаны? Існуе просты з прыкладаў, якія намякае на тое Gchat і Facebook Чат і Gmail, і іншыя падобныя вэб-сайты робяць на самай справе змена вэб-старонкі. Заўважым, што гэта. Дазвольце мне перазагрузіце старонку. Дазвольце мне адкрыць Інспектар Chrome. Пусціце мяне да элементаў Ўкладка тут. А цяпер звярніце ўвагу, калі я павялічу сюды і адкрыць гэта, звярніце ўвагу, што гэта мой HTML DOM - мая аб'ектнай мадэлі дакумента. Гэта мой HTML. Але цяпер заўважаю, хоць гэта будзе быць трохі цяжка ўбачыць яго ў абодвух месцах адначасова, калі я друкую ў FB тут, сочыце за ніжняй на экране толькі. Гэта на самай справе змены мой HTML на лета. І ён робіць гэта даволі проста , Робячы нешта накшталт гэтага. Калі я адкрываю Ajax-2, звярніце ўвагу рэалізацыі нешта так сэксуальна, як , Што, хоць гэта даволі невыносны, але так складаныя, як, што функцыянальна, яна мае некаторыя HTML у ніжняй часткі. Але звярніце ўвагу, я выкарыстаў для тэга. Мы не выкарыстаў гэта раней, але гэта як, але гэта не прымусіць усё на новы радок. Ён проста мае прастакутную вобласць на той жа лініі па сутнасці. Звярніце ўвагу, што я даў яму ідэнтыфікатар цане. І аказваецца, з дапамогай тых жа JavaScript бібліятэка, у мяне ёсць функцыя называецца цытата (), якая выклікаецца кожны раз формы. І тое, што я раблю гэта. Я абвяшчаю зменную ў JavaScript называецца URL, захавання значэнні quote.php? сімвала =. Іншымі словамі, я сам пачынаю падрыхтаваць запыт HTTP, а затым Я на гэтую аб'яднання з плюсам любы элемент з ID з сімвала, які заўважыць, што тэкставае поле аж тут. Гэтак жа, як у нас было формах у мінулым. А потым высвятляецца, у JQuery, калі вы тэлефанаваць. Val (), якая выклікае з Val функцыя, значэнне функцыі, якая атрымлівае тое, што карыстальнік ўвялі цалі А затым усё сеткавыя трафіку што адбываецца гэта. $. GetJSON. І як у бок, знак даляра з'яўляецца проста скарочаная запіс. Гэта сапраўды jQuery.getJSON. Прымусіць мяне JSON з дадзенага адрасы, а калі Запыт вяртаецца, называюць гэтую функцыі і перадаць у якасці аргументу што вярнуўся з сервера. Такім чынам, іншымі словамі, калі я вярнуся да браўзэр, і я вяртаюся да quote.php, што мой браўзэр робіць становіцца гэта кавалак дадзеных. І калі я іду на гэтую вэб-старонку тут, заўважыць, калі мы замест гэтага перайсці да сеткі ўкладку і чысціць яе, а затым увядзіце нешта накшталт GOOG для Google і атрымаць Цытата, заўважылі старонкі не змяніўся. Але запыт HTTP быў зроблены і што вярнулася сюды, калі мы паглядзім на адказ цэлую кучу JSON што, нарэшце, мы атрымалі доступ з гэтая простая лінія тут. Дадзеныя атрымалі тое, што было з сервера. Кошт назву ключавыя мяне хвалюе. Так data.price дае мне, што. Зараз тым часам, і гэта з'яўляецца апошнім прыкладам. Вы можаце зрабіць яшчэ больш са старонкай. Адзін на самай справе, ну два. Мы можам вярнуць тэг, калі вы памятаеце пра гэта. Вось JavaScript. Мы можам зрабіць гэта. Вельмі цікава. Мы пакінем гэта ў якасці захапляльным. Але больш узбуджальна, вы можаце рабіць такія рэчы. Калі я іду да геолокации-1, то атрымліваецца, Chrome, што ведае, што мы знаходзімся на Шырата Даўгата 42.37. -71,10. Так што ёсць яшчэ больш ў вашым распараджэнні. Але пра гэта на наступным тыдні. Убачымся ў панядзелак.