PHP![]()
PHP-ն (անգլ.՝ PHP: Hypertext Preprocessor, «PHP՝ Հիպերտեքստային Պրեպրոցեսսոր») ընդհանուր նշանակության սկրիպտային ծրագրավորման լեզու է[19], որն ինտենսիվորեն օգտագործվում է վեբ ծրագրավորման մեջ։ Ներկայումս այն աջակցվում է հոսթինգ տրամադրող ընկերությունների ճնշող մեծամասնության կողմից և հանդիսանում է առաջատար ծրագրավորման լեզուներից մեկը, որոնք կիրառվում են դինամիկ վեբ-կայքերի ստեղծման համար[20]։ Լեզուն և իր ինտերպրետատորը մշակվում են մի խումբ էնտուզիաստների կողմից բաց կոդով նախագծի շրջանակներում[21]։ Նախագիծը տարածվում է սեփական արտոնագրով, որն անհամատեղելի է GNU GPL-ի հետ։ Կիրառման ոլորտներԼեզվի պարզության, կատարման արագության, հարուստ ֆունկցիոնալության, բազմահարթակ լինելու և PHP արտոնագրով ընթացիկ կոդերի տարածման շնորհիվ, այսօր վեբ-ծրագրավորման ոլորտում PHP-ն աշխարհի ամենահայտնի սկրիպտային ծրագրավորման լեզուներից մեկն է (JSP-ի, Perl-ի և ASP.NET-ում օգտագործվող լեզուների հետ միասին)։ Վեբ-կայքերի կառուցման ոլորտում ճանաչված լինելը պայմանավորված է վեբ-հավելվածների ստեղծման համար նախատեսված բազմաթիվ ներկառուցված միջոցների առկայությամբ։ Դրանցից հիմնականներն են՝
Ներկայումս հարյուր հազարավոր ծրագրավորողներ օգտվում են PHP-ից։ TIOBE կորպորացիայի՝ որոնողական համակարգերի տվյալների վրա հիմնված վարկանշային աղյուսակի համաձայն, 2013 թվականի հունիսի դրությամբ, ծրագրավորման լեզուների շարքում PHP-ն զբաղեցնում է 5-րդ հորիզոնականում[20]։ PHP օգտագործում են նաև բազմաթիվ հանրահայտ ընկերություններ, ինչպիսիք են Ֆեյսբուքը, ՎԿ-ն և Վիքիպեդիան։ Պատմություն1994 թ. Դանիացի ծրագրավորող Ռասմուս Լերդորֆը ստեղծեց Perl/CGI սկրիպտերի ընտրանի, որը պետք է հաշվեր և արտարծեր իր համացանցում տեղադրված ռեզյումեի այցելուների քանակը՝ մշակելով HTML-փաստաթղթերի նմուշները։ Լերդորֆը այդ ընտրանին անվանեց Personal Home Page (Անձնական Տնային Էջ)։ Շուտով Perl-ի ինտերպրետատորի ունակություններն ու արագությունը սկսեց չբավարարել, և Լերդորֆը C ծրագրավորման լեզվի օգնությամբ մշակեց նոր նմուշների ինտերպրետատոր՝ PHP/FI (անգլ.՝ Personal Home Page / Forms Interpreter - «Անձնական Տնային Էջ / Ֆորմաների ինտերպրետատոր») անվանումով։ 1997-ին, երկարատև բետա-փորձարկումներից հետո վերջապես թողարկվեց C-ով գրված մշակչի երկրորդ տարբերակը՝ PHP/FI 2.0-ն։ Այն օգտագործում էին ամբողջ աշխարհի բոլոր դոմենների շուրջ 1%-ը։ PHP 3.0 տարբերակը ենթարկվեց նշանակալի վերամշակման, որն սահմանեց ծրագրավորման լեզվի ժամանակակից տեսքն ու ոճը։ 1997 թվականին երկու իսրայելացի ծրագրավորողներ՝ Էնդի Գութմանսը և Զեև Սուրավսկին, ինտերպրետատորի ամբողջ կոդն գրեցին նորից։ PHP 3.0-ն պաշտոնապես թողարկվեց 1998-ի հունիսին։ PHP 3.0-ի ուժեղ կողմերից մեկն այն էր, որ հնարավոր էր միջուկն ընդլայնել լրացուցիչ մոդուլների հաշվին։ Դրա հետևանքով ընդլայնումների գրառման մեջերեսը իրենց սեփական մոդուլները գրող բազմաթիվ ծրագրավորողների ուշադրությունը հրավիրեց PHP-ի կողմը, ինչը PHP-ին հնարավորություն տվեց աշխատել բազմաթիվ տվյալների բազաների, կանխագրերի (անգլ.՝ Protocol-ների) հետ, ապահովել բազմաթիվ API-ներ։ Ծրագրավորողների մեծ թիվը բերեց լեզվի արագ զարգացման։ Այս տարբերակից սկսած հապավումը կարդացվում է իբրև «PHP: Hypertext Preprocessor»։ 1998 թ. ձմռանը, PHP 3.0-ի թողարկումից անմիջապես հետո, Էնդի Գութմանսն ու Զեև Սուրավսկին սկսում են PHP-ի միջուկի վերամշակումը։ Անհրաժեշտ էր մեծացնել բարդ հավելումների կատարողականությունը։ Նոր շարժիչը, որն անվանվեց Zend Engine, կարողացավ հաղթահարել իրեն առաջադրված խնդիրները և առաջին անգամ ներկայացվեց 1999-ին։ PHP 4.0-ն, որն հիմնված էր այդ շարժիչի վրա, իր հետ բերեց լրացուցիչ ֆունկցիաների մի ամբողջ հավաքածու և պաշտոնապես թողարկվեց 2000 թվականի մայիսին։ Որպես կատարողականության մեծացմանը լրացում, PHP 4.0-ն ուներ նաև այլ նորամուծություններ, որոնցից էին սեսսիաները, արտարծման բուֆերացումը, օգտագործողի կողմից ներմուծած ինֆորմացիայի առավել անվտանգ մշակման գործիքներ և մի քանի նոր լեզվային կառույցներ։ PHP-ի հինգերորդ տարբերակը մշակողների կողմից թողարկվեց 2004 թ. հունիսի 13-ին։ Փոփոխությունները ներառում էին Zend-ի միջուկի թարմացումը (Zend Engine 2), որն էապես մեծացրեց ինտերպրետատորի արդյունավետությունը։ Ներառվեց XML նշագրման լեզվի աջակցությունը։ Ամբողջությամբ վերամշակված էին OOP-ի բոլոր ֆունկցիաները, որոնք այժմ որոշ դեպքերում նման էին Java-ի կողմից օգտագործվող մոդելին։ Մտցված էր Descructor-ը, բաց, փակ ու պաշտպանված մեթոդներն ու հատկությունները, օբյեկտենի մեջերեսն ու կլոնավորումը։ Արդեն ավելի նոր տարբերակնում ավելացվել են նաև անվանատարածքները և մի ամբողջ շարք կարևոր փոփոխություններ, որոնք քանակապես և որակապես տարբերվում էին PHP 5.0-ում տեղ գտած փոփոխություններից։ PHP-ի վեցերորդ տարբերակի մշակումը սկսվել է 2006-ի հոկտեմբերից, սակայն 2010-ի մարտին PHP6-ի մշակումը համարվեց անհեռանկարային և դադարեցվեց։ Այժմ մշակման հիմնական ուղղություն է համարվում PHP 5.4-ի մշակումը։ Թողարկման պատմություն
ՇարահյուսությունPHP-ի շարահյուսությունը նման է C լեզվի շարահյութությանը։ Որոշ տարրեր, ինչպիսիք են ասոցիացվող զանգվածները և foreach ցիկլը, վերցված են Perl-ից։ Ծրագրում փոփոխականներ օգտագործելուց առաջ դրանք նախապես հայտարարելու կարիք չկա։ Ցանկացած ծրագիր կարող է սկսվել PHP-ի օպերատորից։ PHP-ով գրված Hello, world! ծրագիրն ունի հետևյալ տեսքը՝ <?php
echo 'Hello, world!';
?>
PHP-ն կատարում է միայն այն կոդը, որը <html>
<head>
<title>Փորձարկում ենք PHP-ն</title>
</head>
<body>
<?php echo 'Hello, world!'; ?>
</body>
</html>
Բացի Փոփոխականների անվանումները սկսվում են $ նշանով։ Փոփոխականի տեսակը հրապարակել պետք չէ։ Փոփոխականների, ֆունկցիաների, հաստատունների և դասերի անվանումներում մեծատառերն ու փոքրատառերը հաշվի են առնվում։ Փոփոխականները գործում են տողեում, որոնք PHP-ն աջակցում է 3 տեսակի մեկնաբանություն՝ C-ի ոճով (բազմատողանի մեկնաբանություններ՝ սահմանափակված PHP-ում հրահանգները բաժանվում են կետ-ստորակետներով (;)։ Այն դրվում է բոլորի հրահանգներից հետո, բացառությամբ որոշ դեպքերի՝ if/else կառույցների և ցիկլերի գրառումներից հետ, ինչպես նաև դրանց և դասերի / միջերեսների հրապարակումից հետո դրվող ձևավոր փակագծերից ( // Դասից հետո դրվող ձևավոր փակագծերից հետո
class myClass {
/* Դասի պարունակությունը */
} // Այստեղ կետ-ստորակետ չի դրվում
// Պայմանից հետո
if( $a === true ) // Այստեղ կետ-ստորակետ չի դրվում
var_dump($a);
// Պայմանից հետո դրվող ձևավոր փակագծերից հետո
if( $a === true ) {
var_dump($a);
} // Այստեղ կետ-ստորակետ չի դրվում
// Ցիկլից հետո
for( $i=0; $i <= 10; ++ $i ) // Այստեղ կետ-ստորակետ չի դրվում
echo $i;
while( $i <= 10 ) // Այստեղ կետ-ստորակետ չի դրվում
echo $i++;
foreach( $array as $key => $value ) // Այստեղ կետ-ստորակետ չի դրվում
echo "$key => $value \n";
// Ցիկլից հետո դրվող ձևավոր փակագծերից հետո
for( $i=0; $i <= 10; ++ $i ) {
echo $i;
} // Այստեղ կետ-ստորակետ չի դրվում
while( $i <= 10 ) {
echo $i++;
} // Այստեղ կետ-ստորակետ չի դրվում
foreach( $array as $key => $value ) {
echo "$key => $value \n";
} // Այստեղ կետ-ստորակետ չի դրվում
Ֆունկցիային փոփոխականներ կարելի է տալ ինչպես արժեքով, այնպես էլ հղումով (օգտագործելով & նշանը)։ Տվյալների տիպերPHP-ն դինամիկ տիպավորմամբ լեզու է, ուստի փոփոխականների հայտարարման ժամանակ դրանց տեսակը նշել հարկավոր չէ։ Տարբեր սկալյար տիպերի միջև փոխակերպումն իրականացվում է անուղղակիորեն և առանց ավելորդ ջանքերի (սակայն PHP-ն նաև լայն հնարավորություններ է տալիս դրանց ուղղակիորեն փոխակերպման համար)։ Սկալյար տիպերն են՝
Կեղծ տիպերն են[30]՝
PHP-ում ամբողջ թվերի (integer) միջակայքը կախված է համակարգչային հարթակից (հիմնականում դրանք ընկած են լինում −2 147 483 648-ից 2 147 483 647-ի սահմաններում)։ Թույլատրվում են տասական, ութական և տասնվեցական համակարգերի թվերի օգտագործումը։ Բնական թվերի միջակայքը (double) նույնպես կախված է հարթակից (32-բիթային կառուցվածքով համակարգչի համար այդ միջակայքը ընկած է ±1.7×10−308-ից ±1.7×10+308-ի միջև)։ PHP-ն մշակողներին է ներկայացնում տվյալների տրամաբանական տիպը (boolean), որը կարող է ընդունել ընդամենը երկու արժեք՝ TRUE («ճիշտ») և FALSE («սուտ»)։ 0 թիվը, դատարկ տողը, տողային տիպում պարունակվող զրոն ("0"), NULL-ը կամ դատարկ զանգվածը տրամաբանական տիպի փոխարկելիս ստացում է FALSE, մնացած բոլոր տիպերը և արժեքները փոխարկելիս ստացվում է TRUE։ NULL հատուկ տիպը նախատեսված է որոշակի արժեքի չունեցող փոփոխականների համար։ Այս տիպի փոփոխականները կարող են ընդունել միայն NULL արժեքը։ Դեպի արտաքին «ռեսուրսներ» հղումներն կրում են resource տիպը։ Այս տիպի փոփոխականները, որպես կանոն, իրենցից ներկայացնում են descriptor-ներ, որոնք թույլ են տալիս կառավարել այնպիսի արտաքին օբյեկտներ, ինչպիսիք են ֆայլերը, նկարները, տվյալների բազաների աղյուսակների արդյունքները և այլն։ Զանգվածները (array) աջակցում են թվային կամ տողային բանալիներ և հանդիսանում են հետերոգեններ։ Զանգվածները կարող են պարունակել ցանկացած տիպի արժեքներ, այդ թվում՝ այլ զանգվածներ։ Տարրերի դասավորությունը պահպանվում է։ Փոփոխականների և ֆունկցիաների դիմելաձևՓոփոխականներին դիմումը իրականացվում է $ նշանի օգնությամբ, որին հետևում է փոփոխականի անվանումը։ Այս կանոնը կիրառվում է նաև դինամիկ փոփոխականների և ֆունկցիաների ստեղծման համար[31]։ Օրինակ՝ PHP-ում echo-ն և print-ը ֆունկցիաներ չեն[32] (չնայած print-ը արժեք է վերադարձնում)։ Դրանք շարահյուսական միավորներ են։ Դրանք օգտագործելուց փակագծերը կարելի է չգրել։ Սուպերգլոբալ զանգվածներ$a = 1;
$b = 2;
$c = $a*$b;
if($c>=3)
{print_r($c);
print_r('<br>');
print_r("3 = 3");
}
Սուպերգլոբալ զանգվածներ (անգլ.՝ Superglobal arrays) են անվանում PHP-ում նախորոշված զանգվածները, որոնք ունեն տեսանելիության գլոբալ մակարդակ՝ առանց global դիրեկտիվի կիրառման։ Դրանց մեծամասնությունը իրենց մեջ պարունակում են օգտագործողի հարցման մուտքային տվյալները (GET հարցման պարամետրերը, POST մեթոդով ուղարկված ֆորմայի դաշտերի արժեքները, քուքիները և այլն)։ Բոլոր սուպերգլոբալ զանգվածները, $GLOBALS-ից և $_REQUEST-ից բացի, նախկինում ունեին երկար անուններով անալոգներ։ Դրանք PHP 5.3-ում համարվեցին հնացած, իսկ PHP 5.4-ում՝ հեռացվեցին[33]։
Օբյեկտային կողմնորոշմամբ ծրագրավորումPHP-ն օբյեկտային կողմորոշմամբ ծրագրավորման (անգլ.՝ Object-oriented programming, OOP) համար ունի լայն հնարավորություններ, որոնց լրիվ աջակցումը սկսվել է լեզվի 5-րդ տարբերակից սկսած։ Դասերը PHP-ում հայտարարվում են class բանալի բառի միջոցով։ Դասի մեթոդները և դաշտերը կարող են լինել հանրային (public, լռելյան բոլոր մեթոդներն ու դաշտերը հանրային են), պաշտպանված (protected) և թաքնված (private)։ PHP-ն աջակցում է OOP-ի բոլոր երեք մեխանիզմները՝ ինկապսուլյացիա, պոլիմորֆիզմը (կամ, այլ կերպ ասած, տարաձևությունը) և ժառանգումը (ծնողական դասը նշվում է դասի անավումից հետո գրելով extends բանալի բառը, որին հաջորդում է ծնողական դասի անվանումը)։ PHP-ն նաև աջակցում է միջերսներ (հրապարակվում է interface, և օգտագործվում՝ implements բանալի բառերի օգնությամբ)։ Թույլատրվում է հրապարակել ավարտվող և աբստրակտ մեթոդներ ու դասեր։ Դասերի բազմակի ժառանգումն չի աջակցվում, սակայն դասը կարող է իրագործել մի քանի միջերես։ Ծնողական դասի մեթոդներին դիմելու համար հարկավոր է օգտագործել parent բանալի բառը։ 5.4.0 տարբերակից սկսած բազմակի ժառանգումը կարող է կատարվել նաև trait-ների միջոցով։ Trait-ները նման են mixin-ներին, սակայն trait-ների դեպքում ուղղակի ձևով հնարավոր չէ ստեղծել օբյեկտ։ Կոդի բազմակի օգտագործումը դրսևորվում է տարբեր դասերում trait-ի կոդի օգտագործմամբ։ Մեկ դասում թույլատրվում է օգտագործել մեկից ավելի trait։ PHP-ում դասերն ունեն մի շարք, այսպես կոչված, կախարդական մեթոդներ (անգլ.՝ magic methods), որոնք սկսում են երկու ընդգծման նշանից։ Դրանցից պետք է նշել կառուցողը (__construct(), մինչև լեզվի 5.0 տարբերակը կառուցող էր համարվում այն մեթոդը, որի անվանումը համընկնում էր դասի անվանման հետ) և ապակառուցողը (__destruct()), ինչպես նաև դասից տվյալներ ստանալու (__get()) և գրելու (__set()) մեթոդները, օբյեկտը «քնեցնելու» (__sleep()) և «արթնացնելու» (__wake()), կլոնավորման (__clone()) և այլն։ Այս մեթոդները բավականին ճկուն գործիքներ են, քանի որ դրանք կարող են զգալիորեն փոփոխել օբյեկտի պահվածքը։ Դասի օբյեկտները ստեղծվում են new բանալի բառի օգնությամբ։ Օբյեկտի դաշտերին ու մեթոդներին կարելի է դիմել -> օպերատորի օգնությամբ։ Դասի մեթոդների միջից նույն դասի այլ անդամներին դիմելու համար օգտագործվում է $this փոփոխականը։ class C1 extends C2 implements I1, I2
{
private $a;
protected $b;
function __construct($a, $b)
{
parent::__construct($a, $b);
$this->a = $a;
$this->b = $b;
}
public function plus()
{
return $this->a + $this->b;
}
/* ............... */
}
$d = new C1(1, 2);
echo $d->plus(); // 3
PHP 5-ից սկսած, օբյեկտները փոխանցվում են հղումների ձևով՝ class a
{
public $color = 'red';
}
$a = new a();
echo $a -> color; // red
$b = $a;
$b -> color = 'blue';
echo $a -> color; // blue
«Paamayim Nekudotayim» (իվրիտ։ פעמיים נקודתיים) կամ ուղղակի «կրկնակի երկուկետ»։ Օգտագոևծելով այս լեքսեմը՝ ծրագրավորողը կարող է դիմել դասի հաստատուններին և ստատիկ դաշտերին ու մեթոդներին։ Այդ դասից դուրս այդ տարրերին դիմելու համար անհրաժեշտ է օգտագործել դասի անվանումը։ «Paamayim Nekudotayim»-ն առաջին հայացքից, հնարավոր է, թվա, որ այն կրկնակի երկուկետի համար տարօրինակ անվանում է։ Սակայն, Zend Engine 0.5-ի ստեղծման ժամանակ (որը PHP3-ի հետ էր տրվում) Andi-ն և Zeev-ը ընտրել են[34] հենց հենց այդ նշանակումը։ «Paamayim Nekudotayim» իվրիտից թարգմանաբար իրոք նշանակում է «կրկնակի երկուկետ»։ Այդ անվանումը PHP-ի մշակմաբ ամբողջ ժամանակ մնացել է նույնը և ոչ մի անգամ չի փոխվել[35]։ <?php
class MyClass {
const CONST_VALUE = 'Հաստատունի արժեքը';
}
// Ստանում ենք հաստատունը՝ օգտագործելով։ նշանը հրապարակված դասից հետո
echo MyClass::CONST_VALUE;
?>
Ինտեգրված զարգացման միջավայրեր PHP-համարԻնտերպրետատորի առանձնահատկություններըPHP սրիպտերը հիմնականում գործարկվում են ինտերպրետատորի միջոցով հետևյալ հաջորդականությամբ՝
Հավելվածների արագագործության համար հաճախ օգտագործվում են հատուկ ծրագրային ապահովումներ, այսպես կոչված, արագացուցիչներ։ Դրանք քեշավորում են արդեն մեկ անգամ գեներացված բայթ-կոդը օպերատիվ հիշողության և/կամ կոշտ սկավառակի մեջ, որի շնորհիվ PHP սկրիպտերի գործարկման հաջորդականության մեջ 1-3 կետերն չեն կատարվում, այլ միանգամից անցում է կատարվում 4-րդ կետին՝ բայթ-կոդի կատարմանը, ինչը բերում է աշխատանքի նշանակալի արագացման։ PHP-ի կարևոր առանձնահատկությունն այն է, որ ծրագրավորողը այլևս կարիք չունի հոգալու հիշողության մաքրման մասին։ PHP-ի մոդուլն ինքն է կառավարում հիշողության մաքրումը․ սկրիպտի աշխատանքի ավարտից հետո ամբողջ առանձնացված հիշողությունն ազատվում է[39]։ ԸնդլայնումներԻնտերպրետատորը կազմված է միջուկից և նրան առանձին միացվող մոդուլներից՝ «ընդլայնումներից», որոնք իրենցից ներկայացնում են դինամիկ գրադարաններ։ Ընդլայնումներն թույլ են տալիս լրացնել լեզվի հիմնական հնարավորությունները, թույլ տալով աշխատել տվյալների բազաների, սոքեթների, դինամիկ գրաֆիկայի, գաղտնագրության գրադարանների, PDF ձևաչափի փաստաթղթերի և նմանօրինակ այլ համակարգերի ու ստանդարտների հետ։ Ամեն ոք կարող է մշակել սեփական ընդլայնումը և միացնել այն միջուկին։ Այսօր գոյություն ունեն մեծ թվով ընդլայնումներ, ինչպես ստանդարտ, այնպես էլ մեկ այլ ընկերությունների կամ էնտուզիաստների կողմից ստեղծված, սակայն ստանդարտ միջուկի հետ տեղադրվում են միայն մի քանի տասնյակ ընդլայնումներ, որոնք իրենց, այսպես ասած, «լավ են դրսևորել»։ Բազմաթիվ ընդլայնումներ հասանելի են PECL բաժանորդագրությունում։ Կարգավորման պարամետրերPHP-ի ինտերպրետատորն ունի հատուկ կազմաձևման ֆայլ՝ php.ini-ն, որն պարունակում է բազմաթիվ կարգավորումներ, որոնց փոփոխումն ազդում է ինտերպրետատորի վարքագծի վրա[40]։ Հնարավորություն կա անջատել մի շարք չօգտագործվող ֆունկցիաներ, փոխել սկրիպի կողմից օգտագործվող օպերատիվ հիշողության, ժամանակի, վերբեռնվող ֆայլերի չափսի սահմանափակումները, կարգավորել սխալների գրանցումը, սեսսիաների և փոստային ծառայությունների հետ աշխատանքը, միացնել լրացուցիչ ընդլայնումներ և այլն։ Սկրիպտի կատարման ժամանակ այդ պարամետրերը հնարավոր է փոխել ini_set[41] ֆունկցիայի միջոցով։ Ինտերպրետատորի ռեժիմներԳոյություն ունեն PHP ինտերպրետատորի օգտագործման մի շարք եղանակներ։
«Զատիկի ձվերը»PHP-ն ունի մի քանի, այսպես կոչված, «զատիկի ձվեր» (կատակներ)։ Ցանկացած PHP սկրիպտին տալով հատուկ GET պարամետրեր, էսի փոխարեն կարելի է տեսնել տարբեր պատկերներ։ Օրինակ՝ file.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 Մուտքագրելով այս պարամետրը բրաուզերի հասցեի տողում, կարելի է տեսնել տարբեր պատկերներ՝ կախված ինտերպրետատորի տարբերակից՝
Հաջորդ 2 պարամետրերը հնարավորություն կտան տեսնել, համապատասխանաբար, PHP-ի և ZEND-ի ստանդարտ պատկերանիշերը[43]՝ file.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 file.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 Ինչպես նաև կարելի է տեսնել PHP 4 և 5 տարբերակների բոլոր հեղինակների անունները[43]՝ file.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000 Ծանոթագրություններ
Արտաքին հղումներ
|