PHP

Վիքիպեդիայից՝ ազատ հանրագիտարանից
PHP
PHP-logo.svg

Սեմանտիկա

բազմամակարդակ

Կատարման ձև

Ինտերպրետատոր

Առաջացել է

1995թ[1]

Հեղինակ(ներ)

Ռասմուս Լերդորֆ

Տիպիզացիա

Դինամիկ տիպավորում

Ընթացիկ տարբերակը

5.5.6, 2013-11-14 (9 ամիս առաջ)

Ներշնչվել է

Perl, C, C++, Java, Tcl

Կայքը

php.net

PHP-ն (անգլ.՝ PHP: Hypertext Preprocessor, «PHP՝ Հիպերտեքստային Պրեպրոցեսսոր») ընդհանուր նշանակության սկրիպտային ծրագրավորման լեզու է[2], որն ինտենսիվորեն օգտագործվում է վեբ ծրագրավորման մեջ։ Ներկայումս այն աջակցվում է հոսթինգ տրամադրող ընկերությունների ճնշող մեծամասնության կողմից և հանդիսանում է առաջատար ծրագրավորման լեզուներից մեկը, որոնք կիրառվում են դինամիկ վեբ-կայքերի ստեղծման համար։[3]

Լեզուն և իր ինտերպրետատորը մշակվում են մի խումբ էնտուզիաստների կողմից բաց կոդով նախագծի շրջանակներում։[4] Նախագիծը տարածվում է սեփական արտոնագրով, որն անհամատեղելի է GNU GPL-ի հետ։

Կիրառման ոլորտները[խմբագրել]

Լեզվի պարզության, կատարման արագության, հարուստ ֆունկցիոնալության, բազմահարթակ լինելու և PHP արտոնագրով ընթացիկ կոդերի տարածման շնորհիվ, այսօր վեբ-ծրագրավորման ոլորտում PHP-ն աշխարհի ամենահայտնի սկրիպտային ծրագրավորման լեզուներից մեկն է (JSP-ի, Perl-ի և ASP.NET-ում օգտագործվող լեզուների հետ միասին)։

Վեբ-կայքերի կառուցման ոլորտում ճանաչված լինելը պայմանավորված է վեբ-հավելվածների ստեղծման համար նախատեսված բազմաթիվ ներկառուցված միջոցների առկայությամբ։ Դրանցից հիմնականներն են՝

Ներկայումս հարյուր հազարավոր ծրագրավորողներ օգտվում են PHP-ից։ TIOBE կորպորացիայի՝ որոնողական համակարգերի տվյալների վրա հիմնված վարկանշային աղյուսակի համաձայն, 2013 թվականի հունիսի դրությամբ, ծրագրավորման լեզուների շարքում PHP-ն զբաղեցնում է 5-րդ հորիզոնականում։[3] 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-ն կատարում է միայն այն կոդը, որը <?php ?>-ի սահմաններում է։ Այն ամենը, ինչն այդ սահմաններից դուրս է գտնվում, արտարծվում է առանց փոփոխության։ Հիմնականում դա օգտագործվում է HTML փաստաթղթում PHP կոդի տեղադրման համար։ Օրինակ՝

<html>
 <head>
  <title>Փորձարկում ենք PHP-ն</title>
 </head>
 <body>
  <?php echo 'Hello, world!'; ?>
 </body>
</html>

Բացի <?php ?> սահմանիչներից, կարելի է օգտագործել նաև <? ?> և <script language="php"> </script> սահմանիչները, իսկ մինչև 6.0 տարբերակը, թույլատրվում է օգտագործել նաև ASP-ի սահմանիչները՝ <% %> (<? ?> և <% %> սահմանիչների աջակցությունը, ցանկության դեպքում, կարելի է անջատել ինտերպրետատորի php.ini ֆայլի միջոցով, եթե ինտերպրետատորի տարբերակը 5.3 և ավելի փոքր է)։

Փոփոխականների անվանումները սկսվում են $ նշանով։ Փոփոխականի տեսակը հրապարակել պետք չէ։ Փոփոխականների, ֆունկցիաների, հաստատունների և դասերի անվանումներում մեծատառերն ու փոքրատառերը հաշվի են առնվում։ Փոփոխականները գործում են տողեում, որոնք " " չակերտների մեջ են առնված, ինչպես նաև Heredoc տողերում (այն տողերում, որոնք ստեղծվում են «< նշանի միջոցով)։

PHP-ն աջակցում է 3 տեսակի մեկնաբանություն՝ C-ի ոճով (բազմատողանի մեկնաբանություններ՝ սահմանափակված /*-ով և */-ով), C++ ծրագրավորմկան լեզվի ոճով (միատողանի մեկնաբանություններ, որոնք սկսում են //-ով և ավարտվում ենք տողը վերջանալով) և Unix-ի ոճով (միատողանի մեկնաբանություններ, որոնք սկսում են #-ով և ավարտվում ենք տողը վերջանալով)։

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-ն նաև լայն հնարավորություններ է տալիս դրանց ուղղակիորեն փոխակերպման համար)։

Սկալյար տիպերն են՝

Ոչ սկալյար տիպերն են՝

Կեղծ տիպերն են[5]՝

  • mixed - մեկ կամ մի քանի ոչ պարտադիր պարամետրեր,
  • number - թիվ (integer կամ float)
  • callback - վերադարձվող տվյալներն ընդունողը (string կամ անանուն ֆունկցիա)
  • void - պարամետրի բացակայությունը։

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) աջակցում են թվային կամ տողային բանալիներ և հանդիսանում են հետերոգեններ։ Զանգվածները կարող են պարունակել ցանկացած տիպի արժեքներ, այդ թվում՝ այլ զանգվածներ։ Տարրերի դասավորությունը պահպանվում է։

Փոփոխականների և ֆունկցիաների դիմելաձևը[խմբագրել]

Փոփոխականներին դիմումը իրականացվում է $ նշանի օգնությամբ, որին հետևում է փոփոխականի անվանումը։ Այս կանոնը կիրառվում է նաև դինամիկ փոփոխականների և ֆունկցիաների ստեղծման համար։[6] Օրինակ՝

$a = 'I am a';        // $a փոփոխականին արժեք ենք տալիս
echo $a;              // Արտարծում ենք $a փոփոխականի արժեքը
 
$b = 'a';
echo $$b;             // Արտարծում ենք $a փոփոխականը (ևս մեկ $ նշան $b-ից առաջ)
 
echo ${'a'};      // Արտարծում ենք $a փոփոխականը
 
function_name();      // Կանչում ենք function_name ֆունկցիան
$c = 'function_name';
$c();                 // Կանչում ենք function_name ֆունկցիան
 
$obj = new Class_name; // Ստեղծում ենք Class_name դասի նոր օբյեկտ
$d = 'Class_name';
$obj = new $d();      // Ստեղծում ենք Class_name դասի նոր օբյեկտ
 
$obj->b;     // Դիմում ենք օբյեկտի b դաշտին
$obj->c();   // Կանչում ենք օբյեկտի c() մեթոդին
 
$obj->$b;    // Դիմում ենք օբյեկտի a դաշտին, քանի որ $b = 'a' (տե՛ս, այս կոդի 4-րդ տողը)
$obj->$c();  // Կանչում ենք օբյեկտի function_name() մեթոդը, քանի որ $c = 'function_name' (տե՛ս, այս կոդի 9-րդ տողը)

PHP-ում echo-ն և print-ը ֆունկցիաներ չեն [7] (չնայած print-ը արժեք է վերադարձնում)։ Դրանք շարահյուսական միավորներ են։ Դրանք օգտագործելուց փակագծերը կարելի է չգրել։

Սուպերգլոբալ զանգվածներ[խմբագրել]

Սուպերգլոբալ զանգվածներ (անգլ.՝ Superglobal arrays) են անվանում PHP-ում նախորոշված զանգվածները, որոնք ունեն տեսանելության գլոբալ մակարդակ՝ առանց global դիրեկտիվի կիրառման։ Դրանց մեծամասնությունը իրենց մեջ պարունակում են օգտագործողի հարցման մուտքային տվյալները (GET հարցման պարամետրերը, POST մեթոդով ուղարկված ֆորմայի դաշտերի արժեքները, քուքիները և այլն)։

Բոլոր սուպերգլոբալ զանգվածները, $GLOBALS-ից և $_REQUEST-ից բացի, նախկինում ունեին երկար անուններով անալոգներ։ Դրանք PHP 5.3-ում համարվեցին հնացած, իսկ PHP 5.4-ում՝ հեռացվեցին։[8]

$GLOBALS
Բոլոր գլոբալ (այդ թվում՝ օգտագործողների կողմից ստեղծված) փոփոխականների զանգվածը։
$_SERVER (հնացած անալոգը՝ $HTTP_SERVER_VARS)
Պարունակում է շրջապատի փոփոխականները, որոնք օպերացիոն համակարգը փոխանցում է սերվերին
$_ENV (հնացած անալոգը՝ $HTTP_ENV_VARS)
Այն միջավայրի փոփոխականները (անգլ.՝ Environment variables), որտեղ կատարվում է սկրիպտը։ Դրանց հավաքածուն հատուկ է յուրաքանչյուր հարթակի համար։
$_GET (հնացած անալոգը՝ $HTTP_GET_VARS)
Պարունակում է GET-հարցման պարամետրերը, որոնք փոխանցվում են URI հասցեի միջոցով՝ «?» նշանից հետո գրելով դրանց հարժեքները։
$_POST (հնացած անալոգը՝ $HTTP_POST_VARS)
HTML ֆորման POST մեթոդով ուղարկելուց դրա դաշտերի արժեքների ասոցիատիվ զանգվածը։ Տարրերի ինդեքսները համապատախանում են HTML ֆորմայի դաշտերի name ատրիբուտին։
$_FILES (հնացած անալոգը՝ $HTTP_POST_FILES)
POST մեթոդով ուղարկած ֆայլերի մասին տվյալների ասոցիացվող զանգվածը։ Զանգվածի յուրաքանչյուր տարր կրում է ֆորմայի դաշտի name ատրիբուտի արժեքին համապատասխան ինդեքս և, իր հերթին, իրենից ներկայացնում է տվյալ ֆայլի տվյալներ պարունակող զանգված։ Այդ զանգվածի տարրերն են՝
  • ['name'] — օգտագործողի համակարգչում տեղակայված ֆայլի անունը։
  • ['type'] — օգտագործողի բրաուզերի կողմից նշված ֆայլի MIME տեսակը։ PHP-ն չի ստուգում այն, և, հետևաբար, ոչ մի երաշխիք չկա, որ նշված տեսակը այն է, ինչ պետք է կայքին, կամ ընդհանրապես գոյություն ունի։
  • ['size'] — ֆայլի չափսը (բայթերով)
  • ['tmp_name'] — ժամանակավոր պանակում գտնվող ֆայլի լրիվ հասցեն։ Ֆայլը վերբեռնելիս, PHP-ն այն տեղադրում է հատուկ ժամանակավոր պանակ։ Այն այնտեղից հարկավոր է տեղափոխել մեր ուզած պանակը՝ օգտագործելով move_uploaded_file ֆունկցիան, որից հետո PHP-ն ֆայլը հեռացնում է ժամանակավոր պանակից։
  • ['error'] — սխալի կոդը։ Եթե ֆայլը հաջող վերբեռնված է, ապա սխալի կոդը հավասար կլինի 0-ի (UPLOAD_ERR_OK
$_COOKIE (հնացած անալոգը՝ $HTTP_COOKIE_VARS)
Օգտագործողի բրաուզերի կողմից ուղարկված քուքիների ասոցիացվող զանգվածը։
$_REQUEST
Պարունակում է $_GET, $_POST և $_COOKIE զանգվածների տարրերը միասին վերցրած, իսկ սկսած PHP 4.1 տարբերակից՝ նաև $_FILES զանգվածի տարրերը։
$_SESSION (հնացած անալոգը՝ $HTTP_SESSION_VARS)
Պարունակում է սեսիայի տվյալները։

Օբյեկտային կողմնորոշմամբ ծրագրավորում[խմբագրել]

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-ը ընտրել են[9] հենց հենց այդ նշանակումը։ «Paamayim Nekudotayim» իվրիտից թարգմանաբար իրոք նշանակում է «կրկնակի երկուկետ»։ Այդ անվանումը PHP-ի մշակմաբ ամբողջ ժամանակ մնացել է նույնը և ոչ մի անգամ չի փոխվել։[10]

<?php
class MyClass {
  const CONST_VALUE = 'Հաստատունի արժեքը';
}
// Ստանում ենք հաստատունը՝ օգտագործելով :: նշանը հրապարակված դասից հետո
echo MyClass::CONST_VALUE;
?>

Ինտերպրետատորի առաձնահատկությունները[խմբագրել]

PHP սրիպտերը հիմնականում գործարկվում են ինտերպրետատորի միջոցով հետևյալ հաջորդականությամբ՝

  1. ելակետային կոդի լեքսիկական վերլուծություն և լեքսեմների գեներացում,
  2. ստացված լեքսեմների շարահյուսական վերլուծություն,
  3. բայթ-կոդի գեներացում,
  4. բայթ-կոդի կատարումը ինտերպրետատորի միջոցով (առանց գործարկվող ֆայլի ստեղծման)։

Հավելվածների արագագործության համար հաճախ օգտագործվում են հատուկ ծրագրային ապահովումներ, այսպես կոչված, արագացուցիչներ։ Դրանք քեշավորում են արդեն մեկ անգամ գեներացված բայթ-կոդը օպերատիվ հիշողության և/կամ կոշտ սկավառակի մեջ, որի շնորհիվ PHP սկրիպտերի գործարկման հաջորդականության մեջ 1-3 կետերն չեն կատարվում, այլ միանգամից անցում է կատարվում 4-րդ կետին՝ բայթ-կոդի կատարմանը, ինչը բերում է աշխատանքի նշանակալի արագացման։

PHP-ի կարևոր առանձնահատկությունն այն է, որ ծրագրավորողը այլևս կարիք չունի հոգալու հիշողության մաքրման մասին։ PHP-ի մոդուլն ինքն է կառավարում հիշողության մաքրումը․ սկրիպտի աշխատանքի ավարտից հետո ամբողջ առանձնացված հիշողությունն ազատվում է։[11]

Ընդլայնումներ[խմբագրել]

Ինտերպրետատորը կազմված է միջուկից և նրան առանձին միացվող մոդուլներից՝ «ընդլայնումներից», որոնք իրենցից ներկայացնում են դինամիկ գրադարաններ։ Ընդլայնումներն թույլ են տալիս լրացնել լեզվի հիմնական հնարավորությունները, թույլ տալով աշխատել տվյալների բազաների, սոքեթների, դինամիկ գրաֆիկայի, գաղտնագրության գրադարանների, PDF ձևաչափի փաստաթղթերի և նմանօրինակ այլ համակարգերի ու ստանդարտների հետ։ Ամեն ոք կարող է մշակել սեփական ընդլայնումը և միացնել այն միջուկին։ Այսօր գոյություն ունեն մեծ թվով ընդլայնումներ, ինչպես ստանդարտ, այնպես էլ մեկ այլ ընկերությունների կամ էնտուզիաստների կողմից ստեղծված, սակայն ստանդարտ միջուկի հետ տեղադրվում են միայն մի քանի տասնյակ ընդլայնումներ, որոնք իրենց, այսպես ասած, «լավ են դրսևորել»։ Բազմաթիվ ընդլայնումներ հասանելի են PECL բաժանորդագրությունում։

Կարգավորման պարամետրեր[խմբագրել]

PHP-ի ինտերպրետատորն ունի հատուկ կազմաձևման ֆայլ՝ php.ini-ն, որն պարունակում է բազմաթիվ կարգավորումներ, որոնց փոփոխումն ազդում է ինտերպրետատորի վարքագծի վրա։[12] Հնարավորություն կա անջատել մի շարք չօգտագործվող ֆունկցիաներ, փոխել սկրիպի կողմից օգտագործվող օպերատիվ հիշողության, ժամանակի, վերբեռնվող ֆայլերի չափսի սահմանափակումները, կարգավորել սխալների գրանցումը, սեսսիաների և փոստային ծառայությունների հետ աշխատանքը, միացնել լրացուցիչ ընդլայնումներ և այլն։ Սկրիպտի կատարման ժամանակ այդ պարամետրերը հնարավոր է փոխել ini_set[13] ֆունկցիայի միջոցով։

Ինտերպրետատորի ռեժիմներ[խմբագրել]

Գոյություն ունեն PHP ինտերպրետատորի օգտագործման մի շարք եղանակներ։

  1. Որպես մոդուլ վեբ-սերվերի համար SAPI-ի կամ ISAPI-ի միջոցով[14] (օրինակ, mod_php մոդուլը Apache-ի համար)։ Վեբ-սերվերը գործարկվում է բեռնված մոդուլով և php սկրիպտին դիմելիս այն կատարվում է վեբ-սերվերի գործընթացի միջավայրում։ Սա, բավականին հեշտ կոնֆիգուրացիայի շնորհիվ, PHP-ի օգտագործման առավել տարածված եղանակն է։

«Զատիկի ձվերը»[խմբագրել]

PHP-ն ունի մի քանի, այսպես կոչված, «զատիկի ձվեր» (կատակներ)։ Ցանկացած PHP սկրիպտին տալով հատուկ GET պարամետրեր, էսի փոխարեն կարելի է տեսնել տարբեր պատկերներ։

Օրինակ՝

file.php?=PHPE9568F36-D428-11d2-A769-00AA001ACF42

Մուտքագրելով այս պարամետրը բրաուզերի հասցեի տողում, կարելի է տեսնել տարբեր պատկերներ՝ կախված ինտերպրետատորի տարբերակից՝

  1. Thies Arntzen-ի նկարը (4.1.2, 4.2.2 տարբերակներում)
  2. տաքսա ցեղատեսակի շան նկար (շան տերը՝ Stig Bakken) (4.3.2, 4.3.3, 4.3.8  - 4.3.10 տարբերակներում)
  3. տերիեր ցեղատեսակի շան նկար (շան տերը՝ Zeev Suraski) (4.3.11, 4.4.0  - 4.4.4, 5.1.0, 5.1.2 տարբերակներում)
  4. ճագարի նկար (4.3.1, 5.0.0, 5.0.3 տարբերակներ)
  5. PHP-ի աղավաղված պատկերանշանը (5.1.3 - 5.2.13 տարբերակներ)[15]
  6. խաղալիք կապույտ փղի նկարը, որի վրա գրված է PHP (սկսած 5.3.0 տարբերակից)[15]

Հաջորդ 2 պարամետրերը հնարավորություն կտան տեսնել, համապատասխանաբար, PHP-ի և ZEND-ի ստանդարտ պատկերանիշերը՝[15]

file.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42
file.php?=PHPE9568F35-D428-11d2-A769-00AA001ACF42

Ինչպես նաև կարելի է տեսնել PHP 4 և 5 տարբերակների բոլոր հեղինակների անունները՝[15]

file.php?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

Այլընտրանքային կոմպիլյատորներ[խմբագրել]

PHP-ի վեբ-հավելումներ արագագործությունը մեծացնելու նպատակով, ժամանակի ընթացքում տարբեր ընկերություններ ստեղծել են PHP-ի այլընտրանքային կոմպիլյատորներ։ 2010 թ․ փետրվարին Ֆեյսբուք ընկերությունը ներկայացրեց PHP-ի իր կոմպիլյատորը՝ HipHop-ը (HPHP, Hyper-PHP), որը PHP կոդը թարգմանում է C++-ի, որն էլ իր հերթին gcc-ի միջոցով կոմպիլյացվում է մեքենայական կոդի։ Այսպիսով, PHP հավելվածի արագագործությունը մեծանում է միանգամից մի քանի անգամ։

Այս աղյուսակում ներկայացված են PHP-ի՝ այսօր առավել հայտնի այլընտրանքային կոմպիլյատորները։

Անվանում Արտոնագիր Կոմպիլյացման արդյունքը
HipHop PHP License C++, մեքենայական կոդ
Roadsend PHP GPL/LGPL C, մեքենայական կոդ
Phalanger Ms SS-PL[16] (Shared source) Microsoft IL
Quercus (Resin վեբ-սերվերի բաղկացուցիչ մասն է) GPL կամ առևտրային JVM
PHC BSDL C, մեքենայական կոդ
Pipp[17] Artistic License և GNU GPL Parrot

Որոշ կոմպիլյատորների մասին վերլուծություններ կարող եք գտնել phpclasses.org կայքում՝ PHP compiler performance.

PHP հավելվածները[խմբագրել]

PEAR գրադարանը[խմբագրել]

    1rightarrow.png Հիմնական հոդված ՝ PEAR


Հայտնի հավելվածները[խմբագրել]

Գոյություն ունեն բազմաթիվ հավելվածներ, որոնք գրված են PHP-ով և տարբեր կայքերում, ֆորումներում և բլոգերում լայն կիրառություն ունեն։ Ահա դրանցից մի քանիսը

Ֆրեյմվորկներ[խմբագրել]

Վեբ-ծրագրերի արագ ստեղծման համար ստեղծվել են բազմաթիվ ֆրեյմվորկներ։ Հայտնի ֆրեյմվորկներից են Zend Framework-ը, CodeIgniter-ը, Kohana-ն, CakePHP-ն, Symfony-ն և Yii[18]։

PHP-ի համար IDE-ները[խմբագրել]

Անվանումը Արտոնագիրը Կայքը
Komodo Mozilla tri-license (MPL/LGPL/GPL)[19] http://www.activestate.com
JetBrains PhpStorm Trial http://www.jetbrains.com/phpstorm/
PHP Development Tools Eclipse Public License http://www.eclipse.org/pdt/
Zend Studio Shareware http://www.zend.com/products/zend_studio/
Aptana Studio GNU GPL http://www.aptana.org
phpDesigner Shareware http://www.mpsoftware.eu/
PHP Expert Editor Shareware[20] http://www.phpexperteditor.com/
NetBeans IDE CDDL http://www.netbeans.org/
RadPHP XE Trial http://www.embarcadero.com/products/radphp/
NuSphere Trial http://www.nusphere.com/
KDevelop[21] GNU GPL http://www.kdevelop.org/
Microsoft WebMatrix Freeware http://www.microsoft.com/web/webmatrix/
Notepad++ GNU GPL http://notepad-plus-plus.org/
Sublime Text 2 Proprietary software http://www.sublimetext.com

Ծանոթագրություն[խմբագրել]

  1. Rasmus Lerdorf began assembling C code originally written for CGI scripts into a library and accessing the library's functions, including SQL queries, through HTML-embedded commands in 1994; Lerdorf, Rasmus (2007-04-26)։ «PHP on Hormones – history of PHP presentation by Rasmus Lerdorf given at the MySQL Conference in Santa Clara, California» (mp3)։ The Conversations Network։ Արխիվացված օրիգինալից 2013-02-25-ին։ http://www.webcitation.org/6Ehf9lLov։ Վերցված է 2009-12-11։ "Every day I would change the language drastically, and it didn't take very long, so by 1995, mid-1995 or so, PHP looked like this. This isn't that far from what PHP looks like today, actually." 
  2. «PHP: Preface — Manual»։ Արխիվացված օրիգինալից 2011-08-21-ին։ http://www.webcitation.org/616XiJbXc։ 
  3. 3,0 3,1 TIOBE Software: Tiobe Index
  4. «History of PHP and related projects»։ Արխիվացված օրիգինալից 2011-08-21-ին։ http://www.webcitation.org/616XiuLEr։ 
  5. PHP: Pseudo-types and variables used in this documentation - Manual
  6. PHP: Variable variables
  7. PHP: echo
  8. Description of core php.ini directives ― register_long_arrays (անգլերեն)
  9. Հնարավոր է, որ այն վերցված է C++-ից
  10. http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php
  11. «PHP: Basic memory management — Manual»։ 13 նոյեմբերի, 2009 թ․։ Արխիվացված օրիգինալից 2011-08-21-ին։ http://www.webcitation.org/616Xk37JK։ Վերցված է 2009-11-17։ 
  12. «PHP: php.ini directives — Manual»։ 6 նոյեմբերի, 2009թ․։ Արխիվացված օրիգինալից 2011-08-21-ին։ http://www.webcitation.org/616Xkcrhr։ Վերցված է 2009-11-13։ 
  13. «PHP: List of php.ini directives — Manual»։ 6 նոյեմբերի, 2009թ․։ Արխիվացված օրիգինալից 2011-08-21-ին։ http://www.webcitation.org/616XlBAvP։ Վերցված է 2009-11-13։ 
  14. PHP: Installed as an Apache module — Manual
  15. 15,0 15,1 15,2 15,3 «PHP Easter Egg»։ Արխիվացված օրիգինալից 2011-08-21-ին։ http://www.webcitation.org/616b44t2j։ Վերցված է 2009-11-16։ 
  16. Լիցենզիայի տեքստը(անգլերեն)
  17. Նախագիծը փորձարկման փուլում է
  18. Merkel, Dirk (2010)։ "Chapter 6: PHP Frameworks", Expert PHP 5 Tools։ Packt Publishing։ ISBN 978-1-847198-38-9։ 
  19. Komodo IDE is a Professional Development Environment for Perl, Python, Tcl | ActiveState
  20. Նախկին ԽՍՀՄ քաղաքացիների համար գրանցումն անվճար է
  21. PHP support for KDevelop 4 (and eventually Quanta+) | Milian Wolff

Տես նաև[խմբագրել]

Հղումներ[խմբագրել]