PHP7 революциясы: Қайтарылатын мәндер типтері және артефакттардың жойылуы

PHP7 шығарылуы жобаланған уақыт қарқынды жақындап келеді, ішкі топ күшейтiлген түрде жұмыс жасап жатыр. Негізгі мақсат сүйікті php тіліндегі қателіктерді түзеу, ескі артефакттарды жою және қалаулы жаңа функцияларды қосу. Көптеген оқуға, үйренуге тұрарлық RFC-тар бар, бірақ мен бұл мақалада олардың ішіндегі ең маңыздыларына тоқталамын.

PHP 5.7 vs. PHP7

Өткен хатымда жазғанымдай 5.7 бірден PHP7 нұсқасын шығару мақсатында қабылданбаған болатын. Бұл 5.6 мен 7 нұсқаларының арасында ешқандай жаңа нұсқа болмайды дегенді білдіреді. Бастапқыда, 5.7 нұсқасында жаңа функционалдар жасау жобаланбаған болатын. Оның негізгі мақсаты пайдаланушыларға олардың нұсқалары ескіргенін, жақында 7-нұсқа шығатынын ескертуі қажет еді.



Сонымен бірге PHP7 нұсқасында резервтелетін кейбір кілт сөздер туралы да ескертулер жасалынуы қажет. Ол пайдаланушылар ескі нұсқада жазылған кодтарын жаңа нұсқаға ауыстырулары үшін. Әйткен де мен таратылымда жазғанымдай көптеген адамдар PHP7 кодын бұзуы мүмкін конструкциялар пайдаланбайды да.

Дауыс беру шешуші емес екеніне назар аударыңыз. Бұл 5.7 нұсқасын шығару туралы ой толығымен жерлеп тасталмаған дегенді білдіреді. Дауыс берушілердің көбісі 5.7 нұсқасының шығуына онда ерекше өзгерістер жоқтығын айтып қарсылық білдіруде. Бірақ олар басқа RFC-терге берілген дауыстарға байланысты өз ойларын өзгертулері мүмкін. Сонымен қандай өзгерістер болатынын қарастырып көрейік.

Қайтарылатын мәндердің типтері (Return Types)

Ақыры көпшіліктің дауысы бойынша енді PHP функцияларында қайтарылатын мәндер типтерін көрсетуге болады. Дауыс беру нәтижелері жаңа, бірақ шешуші. PHP7-ден бастап енді біз функция қайтаратын мән типін көрсете аламыз:

function foo(): array {
    return [];
}


Жақсартылу ма? Сөзсіз!!! Идеалды ма? Өкінішке орай, жоқ:
  • қайтарылатын типтер тек қазіргі кезде бар типтер ғана бола алады
    яғни, string, int, bool және т.е. скалярлық типтерді қайтарылатын тип деп көрсетуге болмайды. Сіз мұндай типтерді объектіге айналдыру арқылы қайтара аласыз.
  • қайтарылатын мәндердің бірнеше типін көрсетуге болмайды. Егер сіздің функцияңыз массив немесе Iterator қайтаратын болса, онда оны ешқалай көрсете алмайсыз, мысалы, біз doc блоктарда оларды былай көрсетеміз array|Iterator.

Кейбір адамдар қайтарылатын мән типінің функция атына дейін емес, функция атынан соң жазылуына наразылық танытқан еді. Менің ойымша бұл жәй налу. Мысалы C++ секілді кең таралған тілдер «пост» синтаксис пайдаланады.



Артефакттарды жою

Жаңа нұсқа PHP4 нұсқасынан қалған ескі конструкцияларды жоюды ұсынып жатыр. Сіз RFC оқып оны тез түсініп ала аласыз. Маған кейбір адамдардың осы өзгеріске соншалықты қасірет шегіп жатқанын түсінбедім. Мысалы, мұнда "Өтініш, біздің тілімізді құртуды тоқтатыңдар", — деп жазады Тони. Демек ол жойылатын функцияларды пайдаланатын болғаны.



Мақала жақсы жазылған, көрініп тұрған ашу ызаға қарамай мені мына сұрақты қарастыруға мәжбүрледі — егер сізде осындай ескі код базасы осынша уақыт өмір сүріп келсе PHP7-ге өту керек пе? Егер соншалық жаңартқыңыз келсе неге ескі функцияларды жаңа нұсқаға ауыстырмасқа?

Мынандай «мен 10 жыл алдын жазған код, қазіргі кезде де және бұдан кейін де, 10 жылдан кейін де бұрынғыдай ештеңе болмағандай жұмыс жасауы керек» — деген ой тентектік. Сіз мұндайды бірде бір бағдарламалау тілінен күптеуіңіз қажет. Шынайы өмірмен салыстырып көріңіз. Сіз мың жыл алдын құл иеленушілік болғанына байланысты, қазіргі кезде де құл иеленуге болады деп ойламауыңыз қажет. Иә, қантөгіске толы ауысу болған, бірақ құл иеленуді жақтаушылар тынышталғанда немесе өлгенде, тыныштық орнады.



Қорытынды

PHP7 нұсқасына өту басқа нұсқалар секілді қантөгіске тола болады. Бірақ бұл дамудың бір жолы.

Бұл мақала аударма.

  • +7
1 пікір
kamyrov
Ого, Codeo-да жаңа IT жаңалықтар орыс тілдегі ресурстардаң тез шығатын болып жатыр. Қуаныштымын)
Тек тіркелген қолданушылар ғана пікір қалдыра алады.