PHP примери за напреднали


  • return; return;
  • continue 2
  • catch(Excepton1|Exception2 $e)
  • isset($param1, $param2, $param3)
  • !empty(array_intersect(['firstname','lastname'], array_keys(array_filter($array))))
  • iterator_to_array(new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)))
  • preg_match("/(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})/", $dateString, $coordinates)

Това са функционалности на PHP, които не са описани в началните курсове или не се покриват в повечето уроци свързани с PHP. Исках да извадя някои от скорошните ми способи за подобрение на кода. Всяка една функционалност може да се напише и по друг начин, но с повече редове или по-бавни (както ги срещам най-често). Бих казал, че това са най-кратко написаните решения на даден проблем. Ако все пак някой знае по-добър ще се радвам да го науча.

return; return;

Добре де, return; return; не е всъщност нещо което работи – поне след първия return, но исках да напомня да внимавате за неизпълним код. По-лошото от код който трудно се поддържа е само код, които никога и не се използва. До преди време исках да покрия всичко което правя и да включа допълнителна функционалност – FUTURE PROOF. Но ако имаш 10 такива библиотеки и използваш само 10% от написаното, всъщност ще ти е много трудно да ги поддържаш за в бъдеще (изключения са ако правите Framework, CMS,.. някоя външна библиотека)., защото изискванията винаги се сменят и неизползвания код става все по-голям.

continue 2

Ето това е нещо сравнително просто, което мноого рядко може да ви се наложи, но докато не прочетете в документацията няма да знаете дали можете да го направите. На мен ми се наложи за да обходя масив, с модел, които след намерен елемент следваше друг, който не е важен. Ето и пример: [1,2,3,'name1', 'phone1', 4,5 'name2', 'phone2']. Всъщност при мен трябваше за всеки един елемент да правя изчисления дали е име и да се взима от под-списък, затова пропускането на телефона ми спести ресурси.

continue може да получи броя на цикли, които трябва да прескочи, като по-подразбиране си е 1.

catch(Excepton1|Exception2 $e)

Това е нещо ново – php 7.1+, но ако често използвате try..catch може да ви спести повторения на код. Тук хващаме грешка ако е инстанция на един от 2-та класа.

Може да провчетете документацията за да се запознаете с всички подробности –exceptions

isset($param1, $param2, $param3)

Знаехте ли, че isset може да поема повече от 1 параметър. Накрая връща true само когато всеки един от тях е зададен.

Друг вариант за използването му е да проверите дали елементи в масив съдържат нулеви стойности като isset(...$array)

Документация: isset

!empty(array_intersect(['firstname','lastname'], array_keys(array_filter($array))))

А с този скрипт проверявам дали някои от елементите на списъка са не-празни и се срещат в масив. Ако масива ви е ['firstname' => '', 'lastname' => 'Doe'] ще върне true, но ако е ['firstname' => '', 'middlename' => 'Name'] ще върне false. Удобно е когато изпращате някоя форма да проверите първо дали има не-празни стойности за желаните елементи.

Документация: array_intersect, array_keys, array_filter

iterator_to_array(new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)))

Обхождането на много-измерни списъци е трудно и винаги се прави с рекурсия, но по този начин с 1 ред код може да вземем плоска версия на масива. Ако искаме просто да обходим всички елементи то можем да извикаме само new \RecursiveIteratorIterator(new \RecursiveArrayIterator($array)) и да обходим неговите елементи, понеже може да загубим някои стойности ако имаме едни и същи ключове (Пример: ['key' => 'val', 'other' => ['key' => 'val2']], което ще доведе до ['key' => 'val2'].

Документация: iterator_to_array, RecursiveIteratorIterator, RecursiveArrayIterator

preg_match("/(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})/", $subject, $matches)

Много често виждам $matches[1]/$matches[0]/$matches[2], което е трудно за четене може да доведе до грешки в някои по-сложни случаи. А така, като подадете ?P<name>директно задавате ключ на параметъраname(а 0,1,2 са си все там, ако желаете да ги използвате).

Документация: preg_match

Надявам се, че вие също ползвате подобни средства, за да улесните живота си. Ако се сещате за нещо подобно, което използвате може да оставите коментар.

, , ,

  1. Няма коментари.
(will not be published)