PHP

thumb|250px|Տարբերանշան

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

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

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

Վեբ-կայքերի կառուցման ոլորտում ճանաչված լինելը պայմանավորված է վեբ-հավելվածների ստեղծման համար նախատեսված բազմաթիվ ներկառուցված միջոցների առկայությամբ։ Դրանցից հիմնականներն են՝
* POST և GET պարամետրերի, ինչպես նաև վեբ-սերվերի փոփոխականների ինքնուրույն տարանջատումը նախապես որոշված հատուկ զանգվածներում,
* բազմաթիվ տվյալների բազաների կառավարման համակարգերի հետ փոխազդեցությունը (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape և Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, PDO միջերես),
* HTTP-գլխագրերի ավտոմատացված ուղարկումը,
* HTTP-լիազորագրերի հետ աշխատելու ունակությունը,
* cookies-ի և սեսիաների հետ աշխատելու ունակությունը,
* տեղային և հեռացված ֆայլերիերի, socket-ների հետ աշխատելու ունակությունը,
* վեբ-սերվեր վերբեռնված ֆայլերի մշակումը,
* XForms-ի հետ աշխատելու ունակությունը։

Ներկայումս հարյուր հազարավոր ծրագրավորողներ օգտվում են PHP-ից։ TIOBE կորպորացիայի՝ որոնողական համակարգերի տվյալների վրա հիմնված վարկանշային աղյուսակի համաձայն, 2013 թվականի հունիսի դրությամբ, ծրագրավորման լեզուների շարքում PHP-ն զբաղեցնում է 5-րդ հորիզոնականում։ PHP օգտագործում են նաև բազմաթիվ հանրահայտ ընկերություններ, ինչպիսիք են Ֆեյսբուքը, ՎԿ-ն և Վիքիպեդիան։

## Պատմություն
1994 թ. Դանիացի ծրագրավորող Ռասմուս Լերդորֆը ստեղծեց Perl/CGI սկրիպտերի ընտրանի, որը պետք է հաշվեր և արտարծեր իր համացանցում տեղադրված ռեզյումեի այցելուների քանակը՝ մշակելով HTML-փաստաթղթերի նմուշները։ Լերդորֆը այդ ընտրանին անվանեց *Personal Home Page* (*Անձնական Տնային Էջ*)։ Շուտով Perl-ի ինտերպրետատորի ունակություններն ու արագությունը սկսեց չբավարարել, և Լերդորֆը C ծրագրավորման լեզվի օգնությամբ մշակեց նոր նմուշների ինտերպրետատոր՝ *PHP/FI* ( - «Անձնական Տնային Էջ / Ֆորմաների ինտերպրետատոր») անվանումով։

1997-ին, երկարատև բետա-փորձարկումներից հետո վերջապես թողարկվեց C-ով գրված մշակչի երկրորդ տարբերակը՝ PHP/FI 2.0-ն։ Այն օգտագործում էին ամբողջ աշխարհի բոլոր դոմենների շուրջ 1%-ը։

PHP 3.0 տարբերակը ենթարկվեց նշանակալի վերամշակման, որն սահմանեց ծրագրավորման լեզվի ժամանակակից տեսքն ու ոճը։ 1997 թվականին երկու իսրայելացի ծրագրավորողներ՝ Էնդի Գութմանսը և Զեև Սուրավսկին, ինտերպրետատորի ամբողջ կոդն գրեցին նորից։ PHP 3.0-ն պաշտոնապես թողարկվեց 1998-ի հունիսին։

PHP 3.0-ի ուժեղ կողմերից մեկն այն էր, որ հնարավոր էր միջուկն ընդլայնել լրացուցիչ մոդուլների հաշվին։ Դրա հետևանքով ընդլայնումների գրառման մեջերեսը իրենց սեփական մոդուլները գրող բազմաթիվ ծրագրավորողների ուշադրությունը հրավիրեց PHP-ի կողմը, ինչը PHP-ին հնարավորություն տվեց աշխատել բազմաթիվ տվյալների բազաների, կանխագրերի (-ների) հետ, ապահովել բազմաթիվ 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
<?php
  echo 'Hello, world!';
?>
```


PHP-ն կատարում է միայն այն կոդը, որը `<?php ?>`-ի սահմաններում է։ Այն ամենը, ինչն այդ սահմաններից դուրս է գտնվում, արտարծվում է առանց փոփոխության։ Հիմնականում դա օգտագործվում է HTML փաստաթղթում PHP կոդի տեղադրման համար։ Օրինակ՝


```html5
<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 տողերում (այն տողերում, որոնք ստեղծվում են «/*-ով և `*/`-ով), C++ ծրագրավորմկան լեզվի ոճով (միատողանի մեկնաբանություններ, որոնք սկսում են `//`-ով և ավարտվում ենք տողը վերջանալով) և Unix-ի ոճով (միատողանի մեկնաբանություններ, որոնք սկսում են `#`-ով և ավարտվում ենք տողը վերջանալով)։

PHP-ում հրահանգները բաժանվում են կետ-ստորակետներով (;)։ Այն դրվում է բոլորի հրահանգներից հետո, բացառությամբ որոշ դեպքերի՝ if/else կառույցների և ցիկլերի գրառումներից հետ, ինչպես նաև դրանց և դասերի / միջերեսների հրապարակումից հետո դրվող ձևավոր փակագծերից (`{` և `}`)։ Օրինակ՝


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

Սկալյար տիպերն են՝
* ամբողջ թվերը (integer),
* բնական (տասնորդական կոտորակով) թվերը (float, double),
* տրամաբանակ տիպը (boolean),
* տողային տիպերը (string),
* և NULL հատուկ տիպը։

Ոչ սկալյար տիպերն են՝
* «ռեսուրսները» (resource),
* զանգվածները (array),
* օբյեկտները (object)։

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

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

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

### Սուպերգլոբալ զանգվածներ

```php
$a = 1;
$b = 2;

$c = $a*$b;

if($c>=3)

{print_r($c);
print_r('<br>');
print_r("3 = 3");
}
```
Սուպերգլոբալ զանգվածներ () են անվանում PHP-ում նախորոշված զանգվածները, որոնք ունեն տեսանելիության գլոբալ մակարդակ՝ առանց global դիրեկտիվի կիրառման։ Դրանց մեծամասնությունը իրենց մեջ պարունակում են օգտագործողի հարցման մուտքային տվյալները (GET հարցման պարամետրերը, POST մեթոդով ուղարկված ֆորմայի դաշտերի արժեքները, քուքիները և այլն)։

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

; $GLOBALS
: Բոլոր գլոբալ (այդ թվում՝ օգտագործողների կողմից ստեղծված) փոփոխականների զանգվածը։

; $_SERVER (հնացած անալոգը՝ $HTTP_SERVER_VARS)
: Պարունակում է շրջապատի փոփոխականները, որոնք օպերացիոն համակարգը փոխանցում է սերվերին

; $_ENV (հնացած անալոգը՝ $HTTP_ENV_VARS)
: Այն միջավայրի փոփոխականները (), որտեղ կատարվում է սկրիպտը։ Դրանց հավաքածուն հատուկ է յուրաքանչյուր հարթակի համար։

; $_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-ն օբյեկտային կողմորոշմամբ ծրագրավորման (, OOP) համար ունի լայն հնարավորություններ, որոնց լրիվ աջակցումը սկսվել է լեզվի 5-րդ տարբերակից սկսած։

Դասերը PHP-ում հայտարարվում են class բանալի բառի միջոցով։ Դասի մեթոդները և դաշտերը կարող են լինել հանրային (public, լռելյան բոլոր մեթոդներն ու դաշտերը հանրային են), պաշտպանված (protected) և թաքնված (private)։ PHP-ն աջակցում է OOP-ի բոլոր երեք մեխանիզմները՝ ինկապսուլյացիա, պոլիմորֆիզմը (կամ, այլ կերպ ասած, տարաձևությունը) և ժառանգումը (ծնողական դասը նշվում է դասի անավումից հետո գրելով extends բանալի բառը, որին հաջորդում է ծնողական դասի անվանումը)։ PHP-ն նաև աջակցում է միջերսներ (հրապարակվում է interface, և օգտագործվում՝ implements բանալի բառերի օգնությամբ)։ Թույլատրվում է հրապարակել ավարտվող և աբստրակտ մեթոդներ ու դասեր։ Դասերի բազմակի ժառանգումն չի աջակցվում, սակայն դասը կարող է իրագործել մի քանի միջերես։ Ծնողական դասի մեթոդներին դիմելու համար հարկավոր է օգտագործել parent բանալի բառը։

5.4.0 տարբերակից սկսած բազմակի ժառանգումը կարող է կատարվել նաև trait-ների միջոցով։ Trait-ները նման են mixin-ներին, սակայն trait-ների դեպքում ուղղակի ձևով հնարավոր չէ ստեղծել օբյեկտ։ Կոդի բազմակի օգտագործումը դրսևորվում է տարբեր դասերում trait-ի կոդի օգտագործմամբ։ Մեկ դասում թույլատրվում է օգտագործել մեկից ավելի trait։

PHP-ում դասերն ունեն մի շարք, այսպես կոչված, կախարդական մեթոդներ (), որոնք սկսում են երկու ընդգծման նշանից։ Դրանցից պետք է նշել կառուցողը (__construct(), մինչև լեզվի 5.0 տարբերակը կառուցող էր համարվում այն մեթոդը, որի անվանումը համընկնում էր դասի անվանման հետ) և ապակառուցողը (__destruct()), ինչպես նաև դասից տվյալներ ստանալու (__get()) և գրելու (__set()) մեթոդները, օբյեկտը «քնեցնելու» (__sleep()) և «արթնացնելու» (__wake()), կլոնավորման (__clone()) և այլն։ Այս մեթոդները բավականին ճկուն գործիքներ են, քանի որ դրանք կարող են զգալիորեն փոփոխել օբյեկտի պահվածքը։

Դասի օբյեկտները ստեղծվում են new բանալի բառի օգնությամբ։ Օբյեկտի դաշտերին ու մեթոդներին կարելի է դիմել **<tt>-></tt>** օպերատորի օգնությամբ։ Դասի մեթոդների միջից նույն դասի այլ անդամներին դիմելու համար օգտագործվում է $this փոփոխականը։

```php
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-ից սկսած, օբյեկտները փոխանցվում են հղումների ձևով՝

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

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


## Ինտեգրված զարգացման միջավայրեր PHP-համար

## Ինտերպրետատորի առանձնահատկությունները
PHP սրիպտերը հիմնականում գործարկվում են ինտերպրետատորի միջոցով հետևյալ հաջորդականությամբ՝
# ելակետային կոդի լեքսիկական վերլուծություն և լեքսեմների գեներացում,
# ստացված լեքսեմների շարահյուսական վերլուծություն,
# բայթ-կոդի գեներացում,
# բայթ-կոդի կատարումը ինտերպրետատորի միջոցով (առանց գործարկվող ֆայլի ստեղծման)։

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

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

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

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

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

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

Օրինակ՝

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

Մուտքագրելով այս պարամետրը բրաուզերի հասցեի տողում, կարելի է տեսնել տարբեր պատկերներ՝ կախված ինտերպրետատորի տարբերակից՝
# *Thies Arntzen*-ի նկարը (4.1.2, 4.2.2 տարբերակներում)
# տաքսա ցեղատեսակի շան նկար (շան տերը՝ *Stig Bakken*) (4.3.2, 4.3.3, 4.3.8 - 4.3.10 տարբերակներում)
# տերիեր ցեղատեսակի շան նկար (շան տերը՝ *Zeev Suraski*) (4.3.11, 4.4.0 - 4.4.4, 5.1.0, 5.1.2 տարբերակներում)
# ճագարի նկար (4.3.1, 5.0.0, 5.0.3 տարբերակներ)
# PHP-ի աղավաղված պատկերանշանը (5.1.3 - 5.2.13 տարբերակներ)
# խաղալիք կապույտ փղի նկարը, որի վրա գրված է PHP (սկսած 5.3.0 տարբերակից)
Հաջորդ 2 պարամետրերը հնարավորություն կտան տեսնել, համապատասխանաբար, PHP-ի և ZEND-ի ստանդարտ պատկերանիշերը՝

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

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

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

## Ծանոթագրություններ

## Արտաքին հղումներ
* PHP-ի պաշտոնական կայք 
* PHP Manual 
* Книги по PHP (включая английсскую литературу)

Կատեգորիա:PHP
Կատեգորիա:Օբյեկտ կողմնորոշված ծրագրավորման լեզուներ