Նույնիսկ երկար տարիներ PHP լեզուն օգտագործելուց հետո էլ, կան ֆունկցիաներ, որոնց մասին մենք տեղյակ չենք: Այդ ֆունկցիաների մեջ լինում են այնպիսինները, որոնք շատ կարևոր են, և քանի որ PHP-ի ձեռնարկները ոչ բոլորն են կարդում, և բացի դրանից այդ ձեռնարկներում ոչ բոլոր ֆունկցիաների մասին է գրված, ուստիև հարկ է լինում ինքնակատարելագործվել:
Ուզում եմ ներկայացնել PHP-ի 5 օգտակար ֆունկցիաներ, որոնք գուցեև Ձեզ արդեն պետք են եկել, ու Դուք ստիպված եք եղել ինչ-ինչ մեթոդներով շրջանցել դրանց:
1. Ֆունկցիաներ` կամայական քանակով մուտքային փոփոխականներով
Հավանաբար քաջատեղյակ եք, որ PHP-ն թույլ է տալիս սահմանել ֆունկցիաներ` որոշակի քանակությամբ մուտքային փոփոխականներով: Բայց պարզվում է, որ կա հնարավորություն սահմանել ֆունկցիա` առանց մուտքային փոփոխականների սահմանափակման: Այսինքն, նույն ֆունկցիան կարող եք օգտագործել և 1 մուտքային փոփոխականի, և 100, և նույնիսկ` առանց որևէ մուտքային փոփոխականի: Ստորև ներկայացնում եմ սահմանափակ քանակությամբ մուտքային փոփոխականներ ունեց ֆունկցիան նկարագրող PHP կոդը`
// ֆունկցիա, որն ունի 2 մուտքային փոփոխական
function foo($arg1 = '', $arg2 = '') {
echo "arg1: $arg1\n";
echo "arg2: $arg2\n";
}
foo('hello','world');
/* կարտատպի էկրանին:
arg1: hello
arg2: world
*/
foo();
/* կարտատպի էկրանին:
arg1:
arg2:
*/
Հիմա եկեք տեսնենք, թե ինչպես կարող ենք կառուցել ֆունկցիա` ցանկացած քանակությամբ մուտքային փոփոխականներով: Դրա համար կօգտագործենք func_get_args() ֆունկցիան`
// արգումենտների քանակը կարող է դատարկ լինել
function foo() {
// ստանում ենք բոլոր արգումենտները
$args = func_get_args();
foreach ($args as $k => $v) {
echo "arg".($k+1).": $v\n";
}
}
foo();
/* սա ոչինչ չի արտատպի էկրանին*/
foo('hello');
/* սա էկրանին կարտատպի հետևյալը`
arg1: hello
*/
foo('hello', 'world', 'again');
/* իսկ սա կարտատպի`
arg1: hello
arg2: world
arg3: again
*/
Ինչպես տեսնում ենք, ամեն ինչ բավականին պարզ է:
2. Օգտագործեք GLOBE() ֆունկցիան` ֆայլեր որոնելիս
Ուզում եմ ծանոթանցել մի ֆունկցիայի հետ, որը շատ նման scandir() ֆունկցիային, և որի անունն է globe(): Այս ֆունկցիան թույլ է տալիս կատարել ֆայլերի որոնում` օգտագործելով որոշ որոնման կանոններ, որոնք կհեշտացնեն որոնումը:
// ստանում ենք բոլոր PHP ֆայլերը
$files = glob('*.php');
print_r($files);
/* արտատպվում է մոտավորապես այսպիսի բան`
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/
Կարող ենք որոնել նաև մի քանի ֆորմատի ֆայլեր, ահա այսպես`
// ստանալ բոլոր php և txt ֆայլերը
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* մոտավորապես այսպիսի բան`
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/
Եվ իհարկե կարող ենք որոնել կոնկրետ ինչ-որ արկղում, կոնկրետ ինչ-որ կրիտերիայով`
$files = glob('../images/a*.jpg');
print_r($files);
/* Դուրս կբերի մոտավորապես`
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
Կամ նմանատիպ մեկ այլ օրինակ` օգտագործելով realpath() ֆունկցիան.
$files = glob('../images/a*.jpg');
// կիրառում է ֆունկցիան բոլոր էլեմենտրների համար
$files = array_map('realpath',$files);
print_r($files);
/* դուրս կբերի մոտավորապես այսպիսի բան:
Array
(
[0] => C:\wamp\www\images\apple.jpg
[1] => C:\wamp\www\images\art.jpg
)
*/
3. Գեներացնում ենք ունիկալ ID-ներ
Շատ հաճախ ծրագրավորողին պետք է լինում գեներացնել պատահական սիմվոլների ունիկալ հաջորդականություն` ունիկալ տող, որի համար նրանք օգտագործում են md5() ֆունկցիան`
// ունիկալ տողի ստեղծում echo md5(time() . mt_rand(1,1000000));
Բայց PHP-ում կա նաև հատուկ սրա համար ստեղվծա ֆունկցիա, որի անունն է uniqid() `
// ունիկալ տողի գեներացի echo uniqid(); /* pկարտատպի 4bd67c947233e */ // մեկ այլ ունիկալ տող echo uniqid(); /* կարտատպվի 4bd67c9472340 */
Երևի նկատեցիք, որ արտատպված ունիկալ տողերն իրականում ունեն սկզբի որոշակի քանակությամբ սիմվոլների նույնություն, որի շնորհիվ էլ ֆունկցիան աշխատում է արագ և համեմատաբար քիչ ժամանակ և ռեսուրս է պահանջում սերվերից:
Կրկնություններից խուսափելու համար կարող ենք ունիկալ ID-ները կազմել նախածանցներով`
// Պրեֆիքսներով
echo uniqid('foo_');
/* կարտատպվի
foo_4bd67d6cd8b8f
*/
// բազազանություն
echo uniqid('',true);
/* կարտատպվի
4bd67d6cd8b926.12135106
*/
// երկուսը միասին
echo uniqid('bar_',true);
/* կարտատպվի
bar_4bd67da367b650.43684647
*/
4. Տեքստի սեղմում
Երբ խոսում ենք սեղմումների մասին, առաջինը որ մտածում ենք, դա ֆայլերի սողմումներն են ZIP կամ RAR ֆորմատներով: PHP լեզվում էլ հնարավոր է սեղմել երկար տեքստը: Ուզում եմ ներկայացնել երկու ֆունկցիաներ` gzcompress() և gzuncompress() .
$string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretium orci, non ultricies elit lacus quis ante. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu elit mollis congue. Praesent ipsum diam, consectetur vitae ornare a, aliquam a nunc. In id magna pellentesque tellus posuere adipiscing. Sed non mi metus, at lacinia augue. Sed magna nisi, ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulla bibendum id euismod urna sodales. "; $compressed = gzcompress($string); echo "Original size: ". strlen($string)."\n"; /* կարտատպվի Original size: 800 */ echo "Compressed size: ". strlen($compressed)."\n"; /* կարտատպվի Compressed size: 418 */ // վերադարձնում ենք հին տեսքին $original = gzuncompress($compressed);
Տեսանք, որ հնարավոր է սեղմել մինչև 50%-ի չափով: Նույն գործողություններն են կատարում նաև gzencode() և gzdecode() ֆունկցիաները, որոնք սակայն աշխատում են այլ ալգորիթմով:
5. Ֆունկցիա` Register_Shutdown_Function
Պատկերացրեք Ձեզ պետք է լինում ասենք ֆիքսել ինչ-որ մի պահ և հաշվել դրանից սկսած մինրև սկրիպտի կատարման ավարտը ինչքան ժամանակ է տևում: Դուք կարող եք պարզապես գրել`
// ֆիքսում ենք պահը $start_time = microtime(true); // ինչ-որ գործողություններ // ... // ինչքան է աշխատել սկրիպտը echo "execution took: ". (microtime(true) - $start_time). " seconds.";
Առաջին հայացքից իհարկե ամեն ինչ լավ է: Բայց այս տարբերակում օրինակ ժամանակը չի հաշվարկվի, եթե հանկարծ ինչ-որ տեղ կոդի մեջ աշխատի exit() ֆունկցիան կամ եթե օգտագործողը բրաուզերում սեղմի ՍՏՈՊ կոճակին: Այս դեպքում առաջարկում եմ օգտագործել register_shutdown_function() անունով ֆունկցիան այսպես`
$start_time = microtime(true);
register_shutdown_function('my_shutdown');
// ինչ-որ գործողություններ
// ...
function my_shutdown() {
global $start_time;
echo "execution took: ".
(microtime(true) - $start_time).
" seconds.";
}
Սրանով հարցերը լուծվում են…
Դե ինչ… այսօրվա համար այսքանն էի պատրաստել, հետևեք բլոգիս ՀՈԴՎԱԾՆԵՐ բաժնին` մասնագիտական նյութերս այնտեղ եմ տեղադրելու: