КампутарыПраграмаванне

Практыка PHP: параўнанне радкоў

PHP нядрэнна арыентаваны на апрацоўку інфармацыі. Сінтаксіс мовы прадстаўлены поўнафункцыянальным наборам функцый параўнання, апрацоўкі радкоў, аператарамі параўнання.

Любы алгарытм - паслядоўнасць выбараў і дзеянняў. Але перш чым зрабіць выбар, трэба нешта параўнаць з чымсьці. Радка - самы ёмісты, эфектыўны і практычны механізм кіравання алгарытмам. Радка - варыянт прадстаўлення дадзеных. А дадзеныя - гэта галоўны прадмет "клопаты" любога алгарытму.

Звычайная логіка "параўнанне-дзея"

У агульным выпадку мова дынамічнай тыпізацыі ня робіць асаблівых адрозненняў у дадзеных, напрыклад, на PHP параўнанне радкі і колькасці мала чым адрозніваецца. Лік - гэта таксама радок, калі ў ёй утрымліваюцца толькі лічбы, кропка і няма ні аднаго знака, які не выкарыстоўваецца для прадстаўлення чысла ў любой яго форме (матэматычная натацыя).

У выпадку контенкации лік аўтаматам зліваецца са радком без лішніх пытанняў і ніякіх схаваных памылак, нават калі функцыя gettype () дае 'integer' ці 'double'.

Аднак ёсць розніца паміж выкарыстаннем функцыі is_int () і is_numeric (). Першая дае ісціну, калі параметр з'яўляецца толькі цэлым лікам, другая, калі любым лікам або лікавы радком (зменная мае тып 'string', але змяшчае ўсе, што прадугледжана матэматычнай натацыяй).

Гэты просты прыклад - добры ўзор, як на PHP аператары параўнання радкоў ( '==', '===', '! =', ...) могуць падарыць мноства нечаканасцяў. Зменныя могуць мяняць свой тып, яны не заўсёды колькасці, але амаль заўсёды іх можна прывесці да радка. У крайнім выпадку - гэта будзе пустая радок.

На падставе сказанага, на PHP функцыя параўнання радкоў самая папулярная. Якую менавіта абраць, вырашаць распрацоўніку. Даступная маса варыянтаў аж да рэгулярных выразаў.

Межы даступнага функцыяналу

PHP-параўнанне двух радкоў добра "робіць" функцыя strpos () - самы танны, верны і практычны варыянт. Калі вынік гэтай функцыі лік, то адназначна адзін радок роўная іншы або адна ўваходзіць у іншую.

Кардынальна супрацьлеглы, але таксама абсалютна дакладны падыход - выкарыстанне рэгулярных выразаў.

Калі выклік функцыі $ cResult = scCheckFileName ($ cStr) дасць 'true', значыць, радок з'яўляецца імем вордаўскія файла. У яго будзе толькі адзін варыянт пашырэння '.docx' і ніякіх знакаў у імя: толькі літары, лічбы і знакі '_', '-'.

Функцыя лёгка можа быць перароблена на іншыя віды файлаў: $ cPtr = '/^([a-zA-Z...0-9\-\_]{4,239})\.(html|js|css|png|jpg | docx | txt) {1} $ / u '. Такі варыянт праверкі радкі пашырае дыяпазон загружаных (напрыклад, на PHP параўнанне радкоў ўжыта "для загрузкі файлаў на сервер, без адзінага шанцу на памылку ўводу") на html, js, css, ...

Выкарыстанне strpos () і preg_match () - крайнасці. Яны не маюць прамога дачынення да пытання параўнання тэрмін. Але ж пытанне алгарытму - гэта пытанне прымянення камбінацыі стыляў, выкарыстанне ўсіх магчымасцяў для дасягнення надзейнага і правільнага выніку.

Функцыянал PHP: параўнанне радкоў

Арсенал мовы ў параўнанні радкоў - гэта не толькі функцыі чыстага параўнання, але і спалучэнне з пошукам або заменай непасрэдна. Не заўсёды дзеянне павінна супадаць з параўнаннем, паколькі апошняе не абавязкова вядзе да змены якой-небудзь радкі. Часта трэба абраць тую ці іншую галінку алгарытму.

Звычайны варыянт PHP: параўнанне радкоў ажыццяўляе функцыя int strcmp (s1, s2).

Вынік функцыі:

  • 0 - радкі роўныя;
  • -1 - першы радок менш другі;
  • 1 - першая радок больш другі.

На практыцы гэта азначае, што ўваходзіць першы радок у другую, ад чаго функцыя PHP (параўнанне радкоў) прымае рашэнне. Больш абмежаваны варыянт strpos (), паколькі ў апошнім выпадку можна ведаць пазіцыю ўваходжання.

Функцыя strcmp () - ад рэгістру. Калі трэба параўнаць радкі без уліку рэгістра сімвалаў, PHP прапануе скарыстацца strcasecmp (). Сінтаксіс аналагічны.

На практыцы часта патрабуецца працаваць не з усёй радком, а толькі з яе часткай. Для гэтага ў набор функцый PHP (параўнанне радкоў) уваходзіць strncmp (s1, s2, N). Трэці параметр паказвае выканаць параўнанне толькі N-байт. Вынік аналагічны strcmp ().

Масівы, радкі і параўнанне

Дадзеныя практычна заўсёды прадстаўлены радкамі. Калі разглядаць масівы, аб'екты, або інфармацыйныя структуры, то гэта проста розныя варыянты камбінацыі больш простых радковых структур.

Радковыя масівы і радкі могуць быць прадстаўлены ўзаемадапаўняльным чынам. Трансфармацыя масіва ў радок функцыяй implode (array, symbol), напрыклад: $ margins1 = implode ( ',', $ style-> getInnerMargin ()); ... праца алгарытму / карыстальніка ...; $ Margins2 = implode ( ',', $ style-> getInnerMargin ()) дазваляе зліць ўсе пазіцыі аб'екта ў радок пазіцый.

Затым можна выканаць PHP-параўнанне радкоў і за адзін раз: $ check = strcmp ($ margins1, $ margins2) і пераканацца, што алгарытм або карыстальнік нешта змяніў (ці не). Калі выконваць параўнанне звычайнай выявай, то прыйдзецца перабіраць элементы масіваў. Гэта адбываецца даўжэй і выглядае больш грувастка.

Аб'екты і радкі

Яшчэ больш эфектнае выкарыстанне PHP (параўнанне радкоў) можа быць рэалізавана з дапамогай аб'ектна-арыентаваных ідэй.

Сучаснае ўяўленне аб аб'ектах мяркуе наяўнасць у іх уласцівасцяў і метадаў. Першыя звычайна прадстаўлены лікамі, радкамі, масівамі і іншымі аб'ектамі. Другія часцяком ўключаюць у сябе метады запісу (put) ў радок і аднаўлення з радка (get).

У адрозненне ад масіваў, аб'ект выконвае працу са сваімі ўласцівасцямі і ўзаемадзейнічае з іншымі аб'ектамі. Аб'ект "кампетэнтны" у тым, якія яго ўласцівасці маюць рэальнае значэнне для алгарытму, праграмы ў цэлым.

Гэты момант дае падставу і магчымасць пры запісе фіксаваць ў радок толькі патрэбную інфармацыю, а пры аднаўленні з радка аднаўляць ўсе працоўныя ўласцівасці ў патрэбны стан. Звычайна ў любым аб'екце ёсць інфармацыя істотная і рабочая (часовая). Рэалізацыя такой ідэі дазваляе эканоміць не толькі памяць, дыскавая прастора, запісы базы дадзеных, але і робіць магчымым параўнанне радкоў больш простымі і дакладнымі сродкамі.

Сінтаксіс і семантыка

PHP дынамічна развіваецца, і яго функцыянал як у плане параўнання радкоў, так і ў дачыненні да іх апрацоўкі пастаянна ўдасканальваецца. Аднак нішто не перашкаджае распрацоўніку перанесці цэнтр цяжару ў вобласць семантыкі.

Несумненна, функцыянал добры, але яго выкарыстанне можна перанесці ў сэнсавую частку кода, у аб'екты. Калі алгарытм ўяўляецца як сістэма ўзаемадзеяння аб'ектаў, гэта выглядае значна лепш, чым паслядоўнасць параўнанняў і дзеянняў у прамым паслядоўным, класічным стылі.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 be.unansea.com. Theme powered by WordPress.