PHP இல் உலகளாவிய மாறிகள். செயல்பாடுகளில் Php மாறி தெரிவுநிலை நோக்கம் மாறி தெரிவுநிலை

கடைசியாக புதுப்பித்தது: 11/1/2015

மாறிகள் மற்றும் செயல்பாடுகளைப் பயன்படுத்தும் போது, ​​மாறி நோக்கத்தைக் கவனியுங்கள். நோக்கம் என்பது கொடுக்கப்பட்ட மாறியின் செயல்பாட்டின் நோக்கம் மற்றும் அணுகல் ஆகியவற்றைக் குறிப்பிடுகிறது.

உள்ளூர் மாறிகள்

ஒரு செயல்பாட்டிற்குள் உள்ளூர் மாறிகள் உருவாக்கப்படுகின்றன. அத்தகைய மாறிகள் கொடுக்கப்பட்ட செயல்பாட்டிற்குள் இருந்து மட்டுமே அணுக முடியும். உதாரணத்திற்கு:

இந்த வழக்கில், get() செயல்பாடு ஒரு உள்ளூர் மாறி $result ஐ வரையறுக்கிறது. மேலும் பொதுவான சூழலில் இருந்து நாம் அதை அணுக முடியாது, அதாவது $a = $result என்று எழுதவும்; $result மாறியின் நோக்கம் get() செயல்பாட்டால் வரையறுக்கப்பட்டிருப்பதால் இது சாத்தியமில்லை. இந்த செயல்பாட்டிற்கு வெளியே, $result மாறி இல்லை.

செயல்பாட்டு அளவுருக்களுக்கும் இது பொருந்தும்: செயல்பாட்டிற்கு வெளியே, $lowlimit மற்றும் $highlimit அளவுருக்கள் இல்லை.

ஒரு விதியாக, உள்ளூர் மாறிகள் கணக்கீடுகளின் சில இடைநிலை முடிவுகளை மேலே உள்ள எடுத்துக்காட்டில் சேமிக்கின்றன.

நிலையான மாறிகள்

நிலையான மாறிகள் உள்ளூர் மாறிகள் போலவே இருக்கும். செயல்பாடு முடிந்ததும், அவற்றின் மதிப்பு சேமிக்கப்படும் என்பதில் அவை வேறுபடுகின்றன. ஒவ்வொரு முறையும் செயல்பாடு அழைக்கப்படும்போது, ​​​​அது முன்பு சேமிக்கப்பட்ட மதிப்பைப் பயன்படுத்துகிறது. உதாரணத்திற்கு:

ஒரு மாறி நிலையானதாக இருக்கும் என்பதைக் குறிக்க, நிலையான முக்கிய சொல் அதில் சேர்க்கப்படும். getCounter()க்கான மூன்று தொடர்ச்சியான அழைப்புகள் மூலம், $counter மாறி ஒன்றால் அதிகரிக்கப்படும்.

$counter மாறி வழக்கமான நிலையான அல்லாத மாறியாக இருந்தால், getCounter() ஒவ்வொரு முறை அழைக்கப்படும்போதும் 1ஐ அச்சிடும்.

பொதுவாக, மேலே உள்ள எடுத்துக்காட்டில் உள்ளதைப் போல, பல்வேறு கவுண்டர்களை உருவாக்க நிலையான மாறிகள் பயன்படுத்தப்படுகின்றன.

உலகளாவிய மாறிகள்

சில நேரங்களில் நீங்கள் ஒரு மாறி உலகளவில் எல்லா இடங்களிலும் கிடைக்க வேண்டும். இத்தகைய மாறிகள் முழு நிரலுக்கும் பொதுவான சில தரவுகளை சேமிக்க முடியும். உலகளாவிய மாறிகளை வரையறுக்க, உலகளாவிய முக்கிய சொல்லைப் பயன்படுத்தவும்:1

"; ) getGlobal(); எதிரொலி $gvar; ?>

getGlobal() செயல்பாட்டை அழைத்த பிறகு, $gvar மாறியை நிரலின் எந்தப் பகுதியிலிருந்தும் அணுகலாம்.

மாறக்கூடிய நோக்கம்என்பது அந்த மாறி வரையறுக்கப்படும் சூழல். பெரும்பாலான PHP மாறிகள் ஒற்றை நோக்கம் கொண்டவை. இந்த ஒற்றை நோக்கம் (உலகளாவிய நோக்கம் என்றும் அழைக்கப்படுகிறது) உள்ளிட்ட கோப்புகளையும் உள்ளடக்கியது:

இந்த எடுத்துக்காட்டில், சேர்க்கப்பட்ட ஸ்கிரிப்ட்டின் உள்ளேயும் $a மாறி கிடைக்கும் - main.inc .

உள்ளூர் மாறிகள்

தனிப்பயன் செயல்பாடு வரையறை குறிப்பிடுகிறது உள்ளூர் நோக்கம்ஒரு மாறிக்கு, அதாவது. ஒரு செயல்பாட்டின் உள்ளே பயன்படுத்தப்படும் எந்த மாறியும் முன்னிருப்பாக செயல்பாட்டின் உள்ளூர் நோக்கத்திற்கு வரம்புக்குட்பட்டது (அது வரையறுக்கப்பட்ட செயல்பாட்டிற்குள் மட்டுமே கிடைக்கும்). இது எவ்வாறு இயங்குகிறது: செயல்பாடுகளில் பயன்படுத்தப்படும் மாறிகளிலிருந்து பொதுவான குறியீட்டில் பயன்படுத்தப்படும் மாறிகளை பிரிக்க, PHP ஒவ்வொரு செயல்பாட்டிலும் உள்ள மாறிகளுக்கு தனி சேமிப்பகத்தை வழங்குகிறது. சேமிப்பக இடத்தின் இந்த பிரிவு, நோக்கம், அதாவது, ஒரு மாறியின் மதிப்பு கிடைக்கும் பகுதி, செயல்பாட்டின் உள்ளூர் சேமிப்பகம் என்பதைக் குறிக்கிறது.

செயல்பாட்டிற்கு வெளியே அறிவிக்கப்பட்ட ஒரு மாறியானது செயல்பாட்டிற்குள் மாறாது என்பதை கீழே உள்ள எடுத்துக்காட்டு தெளிவாகக் காட்டுகிறது. செயல்பாடு எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்து கொள்ள நீங்கள் முயற்சிக்கக்கூடாது என்றாலும், முக்கிய விஷயம் என்னவென்றால், அதன் தனித்துவமான மாறிகள் உள்ளன:

30 ?>

இந்த பகுதியை இயக்குவதன் விளைவாக, பின்வருபவை காட்டப்படும்: 30.

பிறப்பு() செயல்பாட்டின் உள்ளே, $age மாறி 1 ஆக அமைக்கப்பட்டுள்ளது, ஆனால் இது உலகளாவிய நோக்கத்தில் வரையறுக்கப்பட்ட அதே மாறி அல்ல. எனவே, $age மாறியின் மதிப்பை அச்சிடும்போது, ​​அசல் மதிப்பு 30 அச்சிடப்படுகிறது. செயல்பாடு அழைக்கப்படும் நேரத்தில் உள்ளூர் மாறிகள் உருவாக்கப்பட்டு செயல்பாடு முடிந்ததும் நீக்கப்படும் என்பது கவனிக்கத்தக்கது.

நீங்கள் உண்மையில் ஒரு உலகளாவிய மாறியின் மதிப்பைப் படிக்க அல்லது மாற்ற விரும்பினால் (உலகளாவிய நோக்கத்தில் பயன்படுத்தப்படும் மாறிகள் என அழைக்கப்படும்) பிறப்பு() செயல்பாட்டிற்குள் உள்ள உள்ளூர் ஒன்றை விட, அது செயல்பாட்டு வரையறைக்குள் உலகளாவியதாக அறிவிக்கப்பட வேண்டும்.

குறிப்பு:தளத்தின் தகவமைப்பு பதிப்பு செயல்படுத்தப்பட்டது, இது உங்கள் உலாவியின் சிறிய அளவிற்கு தானாகவே மாற்றியமைக்கிறது மற்றும் படிக்கும் வசதிக்காக தளத்தின் சில விவரங்களை மறைக்கிறது. பார்த்து மகிழுங்கள்!

அன்புள்ள வலைப்பதிவு வாசகர்களுக்கு வணக்கம் தளம்அன்று! PHP இல் ஒரு செயல்பாடு இருப்பதை நாங்கள் அறிந்தோம், எங்கள் சொந்த செயல்பாடுகளை எவ்வாறு உருவாக்குவது, அவற்றிற்கு வாதங்களை அனுப்புவது மற்றும் அவற்றை செயல்படுத்துவதற்கு அழைப்பது எப்படி என்பதை நாங்கள் கற்றுக்கொண்டோம். PHP இல் செயல்பாடுகளின் தலைப்பைத் தொடர்ந்து, பின்வரும் விஷயங்களை வலியுறுத்துவது அவசியம்:

  • செயல்பாட்டின் உள்ளே, நீங்கள் எந்த PHP குறியீட்டையும் (சுழற்சிகள், நிபந்தனைகள், எந்த செயல்பாடுகள்) பயன்படுத்தலாம், மற்ற செயல்பாடுகள் (உள்ளமைக்கப்பட்ட மற்றும் தனிப்பயன் இரண்டும்) உட்பட;
  • செயல்பாட்டின் பெயர் லத்தீன் எழுத்து அல்லது அடிக்கோடு தொடங்க வேண்டும், அதைத் தொடர்ந்து லத்தீன் எழுத்துக்கள், எண்கள் அல்லது அடிக்கோடு
  • அனைத்து செயல்பாடுகளும் உலகளாவிய நோக்கத்தைக் கொண்டிருக்கின்றன, அதாவது எந்தச் செயல்பாடும் எங்கும் அழைக்கப்படலாம், அந்தச் செயல்பாடு மற்றொன்றிற்குள் வரையறுக்கப்பட்டிருந்தாலும் கூட;
  • PHP செயல்பாடு ஓவர்லோடிங்கை ஆதரிக்காது; உருவாக்கப்பட்ட செயல்பாட்டை மறுவரையறை செய்ய (மாற்றம், சேர்) அல்லது நீக்கவும் சாத்தியமில்லை;
  • செயல்பாடுகள் பயன்படுத்தப்படுவதற்கு முன் வரையறுக்கப்பட வேண்டியதில்லை. அதாவது, நீங்கள் முதலில் ஒரு செயல்பாட்டை அழைத்தால், அதை கீழே உள்ள குறியீட்டில் விவரித்தால், இது செயல்திறனை பாதிக்காது மற்றும் பிழைகளை ஏற்படுத்தாது.

நிபந்தனை செயல்பாடுகள்

நிபந்தனையைப் பொறுத்து ஒரு செயல்பாட்டை நாம் உருவாக்கலாம் (வரையறுக்கலாம், விவரிக்கலாம்). உதாரணத்திற்கு:

//செய் ஹாய் எனப்படும் செயல்பாடு, அதை எங்கும் அழைக்கலாம் /*Goodbye செயல்பாட்டை இங்கு அழைக்க முடியாது, ஏனெனில் நாங்கள் இன்னும் நிபந்தனையை சரிபார்க்கவில்லை மற்றும் if construct உள்ளே செல்லவில்லை*/ if($apply)( செயல்பாடு சொல்லுங்கள் குட்பை())( எதிரொலி "அனைவருக்கும் வணக்கம்!
"; } } /*இப்போது நாம் குட்பை சொல்லலாம்*/
"; }

விளைவாக:

மேலும் இந்த உதாரணத்தைப் பாருங்கள்:

/*இங்கே குட்பை சொல்லி அழைத்தால் இதுதான் நடக்கும்*/போய் வருவதாக சொல்(); if($apply)( செயல்பாடு சொல்லுங்கள் குட்பை())( எதிரொலி "அனைவருக்கும் வணக்கம்!
"; ) ) செயல்பாடு sayHi())( எதிரொலி "அனைவருக்கும் வணக்கம்!
"; }

விளைவாக:

உண்மையில், நான் உழைக்கும் அளவுக்கு, இதுபோன்ற எதையும் நான் எங்கும் பார்த்ததில்லை, ஆனால் மொழியின் அனைத்து சாத்தியக்கூறுகளையும் நீங்கள் மனதில் கொள்ள வேண்டும்.

உள்ளமைக்கப்பட்ட செயல்பாடுகள்

ஒரு உள்ளமை செயல்பாடு என்பது மற்றொரு செயல்பாட்டிற்குள் அறிவிக்கப்பட்ட ஒரு செயல்பாடு ஆகும். உதாரணமாக:

/*நீங்கள் இங்கே குட்பை என்று அழைக்க முடியாது, ஏனெனில் இது sayHi செயல்பாட்டை அழைத்த பிறகு மட்டுமே தோன்றும்*/வணக்கம் சொல்(); /*ஹாய் என்று செயல்பாட்டை அழைக்கவும், அதை எங்கும் அழைக்கலாம்*/ /*இப்போது நாம் குட்பை சொல்லலாம்*/போய் வருவதாக சொல்(); செயல்பாடு sayHi())( எதிரொலி "அனைவருக்கும் வணக்கம்!
"; செயல்பாடு கூறுங்கள் குட்பை())( எதிரொலி "அனைவருக்கும் வணக்கம்!
"; } }

மீண்டும், முதல் பயணத்தின்போது, ​​PHP மொழிபெயர்ப்பாளர், sayHi செயல்பாட்டின் விளக்கத்தைக் கண்டுபிடித்ததாகக் குறிப்பிடுகிறார், ஆனால் அதன் உடலுக்குள் செல்லவில்லை, அது பெயரை மட்டுமே பார்க்கிறது, மேலும் மொழிபெயர்ப்பாளர் sayHi இன் உடலுக்குள் செல்லாததால், மற்றொரு செயல்பாட்டிற்குள் நாம் எதை வரையறுத்துக் கொண்டிருக்கிறோம் என்று தெரியவில்லை - குட்பை சொல்லுங்கள்.

பின்னர் குறியீடு செயல்படுத்தத் தொடங்குகிறது, நாங்கள் sayHi என்று அழைக்கிறோம், PHP மொழிபெயர்ப்பாளர் அதை இயக்குவதற்கு sayHi செயல்பாட்டின் உடலுக்குள் செல்ல வேண்டும், அங்கு அது தற்செயலாக மற்றொரு செயல்பாட்டின் விளக்கத்தைக் கண்டறிகிறது - குட்பை, அதன் பிறகு SayGoodbye ஐ எங்கும், எத்தனை முறை வேண்டுமானாலும் அழைக்கலாம். உன் விருப்பப்படி.

ஆனால் மேலே உள்ள சூழ்நிலையில் ஒரு மிக நுட்பமான புள்ளியில் கவனம் செலுத்துவது மதிப்பு: sayHi செயல்பாடு ஒரு முறை ஆகிறது, ஏனென்றால் நாம் அதை மீண்டும் அழைத்தால், PHP மீண்டும் sayGoodbye செயல்பாட்டின் வரையறை முழுவதும் வரும், மேலும் PHP இல் நீங்கள் செய்ய முடியாது இது - நீங்கள் செயல்பாடுகளை மேலெழுத முடியாது. இதைப் பற்றியும், அதை எவ்வாறு சமாளிப்பது என்பது பற்றியும் முந்தைய கட்டுரையில் எழுதினேன்.

PHP இல், மேலே விவரிக்கப்பட்ட நுட்பங்கள் மிகவும் அரிதாகவே பயன்படுத்தப்படுகின்றன; அவற்றை அடிக்கடி காணலாம், எடுத்துக்காட்டாக, ஜாவாஸ்கிரிப்டில்.

மாறி ஸ்கோப்

PHP இல் சரியாக இரண்டு ஸ்கோப்கள் உள்ளன: உலகளாவியமற்றும் உள்ளூர். ஒவ்வொரு நிரலாக்க மொழியும் வெவ்வேறு விதமான நோக்கங்களைக் கொண்டுள்ளது. எடுத்துக்காட்டாக, C++ இல், சுழல்கள் கூட அவற்றின் சொந்த (உள்ளூர்) நோக்கத்தைக் கொண்டுள்ளன. PHP இல், இது ஒரு உலகளாவிய நோக்கம். ஆனால் இன்று நாம் செயல்பாடுகளைப் பற்றி பேசுகிறோம்.

PHP இல் உள்ள செயல்பாடுகள் அவற்றின் சொந்த உள் நோக்கத்தைக் கொண்டுள்ளன (உள்ளூர்), அதாவது, ஒரு செயல்பாட்டிற்குள் உள்ள அனைத்து மாறிகளும் இந்த செயல்பாட்டிற்குள் மட்டுமே தெரியும்.

எனவே, மீண்டும் ஒருமுறை: செயல்பாடுகளுக்கு வெளியே உள்ள அனைத்தும் உலகளாவிய நோக்கம், செயல்பாடுகளுக்குள் உள்ள அனைத்தும் உள்ளூர் நோக்கம். உதாரணமாக:

அன்புள்ள நிபுணர்களே, கவனம், கேள்வி! கடைசி அறிவுறுத்தல் வெளியீடு என்ன? எதிரொலி $பெயர்; ?

நீங்களே பார்த்தபடி, எங்களிடம் 2 மாறிகள் இருந்தன $பெயர், செயல்பாட்டின் உள்ளே ஒன்று (உள்ளூர் நோக்கம்), மற்றொன்று குறியீட்டில் (உலகளாவிய நோக்கம்), மாறிக்கான கடைசி ஒதுக்கீடு $பெயர்இருந்தது $பெயர் = "ருட் செர்ஜி";ஆனால் அது விழாவிற்குள் இருந்ததால், அங்கேயே தங்கிவிட்டது. உலகளாவிய நோக்கத்தில், கடைசி பணி இருந்தது $பெயர் = "ஆண்ட்ரே";இதன் விளைவாக நாம் உண்மையில் பார்க்கிறோம்.

அதாவது, இரண்டு ஒத்த மாறிகள், ஆனால் வெவ்வேறு நோக்கங்களில் அவை வெட்டுவதில்லை மற்றும் ஒருவருக்கொருவர் பாதிக்காது.

படத்தில் உள்ள நோக்கத்தை விளக்குகிறேன்:

முதல் பயணத்தின் போது, ​​மொழிபெயர்ப்பாளர் உலகளாவிய நோக்கத்தை சுருக்கமாக ஸ்கேன் செய்கிறார், என்ன மாறிகள் மற்றும் செயல்பாடுகள் உள்ளன என்பதை நினைவில் கொள்கிறார், ஆனால் குறியீட்டை இயக்கவில்லை.

உள்ளூர் நோக்கத்திலிருந்து உலகளாவிய மாறிகளை அணுகுதல்

ஆனால் நாம் இன்னும் அதே $name மாறியை ஒரு செயல்பாட்டிலிருந்து உலகளாவிய நோக்கத்திலிருந்து அணுக வேண்டும், அதை அணுகாமல், அதை மாற்றினால் என்ன செய்வது? இதற்கு 3 முக்கிய விருப்பங்கள் உள்ளன. முதலாவது முக்கிய சொல்லைப் பயன்படுத்துகிறது உலகளாவிய:

"; உலகளாவிய $பெயர்; /*இனிமேல் நாம் உலகளாவிய மாறி $name*/$பெயர் = "ருட் செர்ஜி"; ) $பெயர் = "ஆண்ட்ரே"; ஹாய் ($பெயர்); எதிரொலி $பெயர்; // ?

விளைவாக:

ஆனால் இந்த முறைக்கு ஒரு குறைபாடு உள்ளது, ஏனெனில் நாம் உலகளாவிய மாறியை அணுகினோம் $பெயர்உள்ளூர் மாறியை இழந்துவிட்டோம் (மேலெழுதினோம்). $பெயர்.

இரண்டாவது வழிபயன்படுத்த உள்ளது PHP சூப்பர் குளோபல் வரிசை. உலகளாவிய நோக்கத்தில் நாம் உருவாக்கிய ஒவ்வொரு மாறியையும் PHP தானாகவே இந்த வரிசையில் வைக்கிறது. உதாரணமாக:

$பெயர் = "ஆண்ட்ரே"; //அதே போல$GLOBALS["name"] = "Andrey";

எனவே:

"; $GLOBALS["name"] = "Rud Sergey"; ) $name = "Andrey"; sayHi($name); எதிரொலி $name; // ?

முடிவு முக்கிய சொல்லைப் பயன்படுத்துவதைப் போன்றது உலகளாவிய:

இந்த முறை மட்டும் நாம் லோக்கல் மாறியை அதாவது மாறியை மீண்டும் எழுதவில்லை $பெயர்உள்ளே செயல்பாடு ஒரே மாதிரியாக இருக்கும் மற்றும் சமமாக இருக்கும் "ஆண்ட்ரே", ஆனால் இல்லை "ரூட் செர்ஜி".

குறிப்பு மூலம் வாதங்களை அனுப்புதல்

மூன்றாவது வழி- இது முகவரி பரிமாற்றம் ( இணைப்புகள்) ஒரு மாறியின், அதன் மதிப்பு அல்ல. பிற நிரலாக்க மொழிகளைப் போலல்லாமல், PHP இல் உள்ள இணைப்புகள் மிகவும் வெற்றிகரமாக இல்லை. இருப்பினும், பொதுவாக PHP 5.3 மற்றும் அதற்கு மேல் ஆதரிக்கப்படும் செயல்பாட்டின் மூலம் வாதத்தை அனுப்புவதற்கான ஒரே சரியான விருப்பத்தை நான் உங்களுக்கு கூறுவேன். இணைப்புகளுடன் பணிபுரிய வேறு வழிகள் உள்ளன, ஆனால் அவை PHP 5.2 மற்றும் அதற்கும் குறைவாக வேலை செய்தன, இதன் விளைவாக, PHP டெவலப்பர்கள் அவற்றைக் கைவிட முடிவு செய்தனர், எனவே நாங்கள் அவற்றைப் பற்றி பேச மாட்டோம்.

எனவே, PHP 5.3 மற்றும் அதற்கு மேற்பட்டவற்றில் குறிப்பு மூலம் ஒரு வாதத்தை சரியாக அனுப்புவது பின்வருமாறு செய்யப்படுகிறது:

செயல்பாடு sayHi(& $name)(

செயல்பாட்டு விளக்கத்திலேயே, நாங்கள் ஒரு ஆம்பர்சண்ட் (&) ஐகானைச் சேர்த்துள்ளோம் - இந்த ஐகான் என்பது மாறியின் மதிப்பை ஏற்கவில்லை, ஆனால் நினைவகத்தில் இந்த மதிப்புக்கான இணைப்பு (முகவரி) ஆகும். PHP இல் உள்ள குறிப்புகள் ஒரே மதிப்பை சுட்டிக்காட்டும் இரண்டு மாறிகளை உருவாக்க உங்களை அனுமதிக்கின்றன. இதன் பொருள் இந்த மாறிகளில் ஒன்று மாறும்போது, ​​​​இரண்டும் மாறும், ஏனெனில் அவை நினைவகத்தில் ஒரே மதிப்பைக் குறிக்கின்றன.

இறுதியில் எங்களிடம் உள்ளது:

//ஒரு மதிப்பை ஏற்கவில்லை, ஆனால் மதிப்பின் குறிப்பை ஏற்கவும்எதிரொலி "ஹலோ, ".$பெயர்."!
"; $name = "Rud Sergey"; ) $name = "Andrey"; sayHi($name); எதிரொலி $name; // ?

விளைவாக:

நிலையான மாறிகள்

பின்வரும் சூழ்நிலையை கற்பனை செய்து பாருங்கள்: மொத்தத்தில் எத்தனை முறை வணக்கம் சொன்னோம் என்பதை கணக்கிட வேண்டும். நாங்கள் என்ன செய்ய முயற்சிக்கிறோம் என்பது இங்கே:

"; $c++; // கவுண்டரை 1 ஆல் அதிகரிக்கவும்


விளைவாக:

மாறி $cஅதன் அர்த்தம் நினைவில் இல்லை, அது ஒவ்வொரு முறையும் புதிதாக உருவாக்கப்படுகிறது. நாம் நமது உள்ளூர் மாறியை உருவாக்க வேண்டும் $cசெயல்பாட்டை இயக்கிய பிறகு அதன் மதிப்பை நினைவில் வைத்தது, இதற்காக அவர்கள் ஒரு முக்கிய சொல்லைப் பயன்படுத்துகிறார்கள் நிலையான:

// கவுண்டர், நிலையானதுஎதிரொலி "ஹலோ, ".$பெயர்."!
"; $c++; // கவுண்டரை 1 ஆல் அதிகரிக்கவும்எதிரொலி "சும்மா சொன்னேன் ஹலோ" . $c. "ஒருமுறை.


"; ) சொல்லுங்கள் ஹி("ருட் செர்ஜி"); சொல்லுங்கள் ஹி("ஆண்ட்ரே"); சொல்லுங்கள் ஹி("டிமிட்ரி");

விளைவாக:

மதிப்புகள் திரும்பும்

செயல்பாடுகளுக்கு மதிப்புகள் திரும்புவது போன்ற வசதியான விஷயம் உள்ளது. ஒரு செயல்பாடு, திரையில் எதையாவது அச்சிடுவதற்குப் பதிலாக, எல்லாவற்றையும் ஒரு மாறியில் வைத்து, அந்த மாறியை நமக்குக் கொடுக்கும். அதை என்ன செய்வது என்று நாங்கள் ஏற்கனவே முடிவு செய்து வருகிறோம். எடுத்துக்காட்டாக, இந்த செயல்பாட்டை எடுத்துக்கொள்வோம், இது ஒரு எண்ணை வர்க்கமாக்குகிறது:

விளைவாக:

அதை திரையில் காட்டுவதற்குப் பதிலாக, அது செயல்படுத்தும் முடிவை வழங்கும். இதைச் செய்ய, திரும்பும் முக்கிய சொல்லைப் பயன்படுத்தவும்:

விளைவாக:

இப்போது நாம் இதை பல்வேறு வழிகளில் பயன்படுத்தலாம்:

//முடிவை வெளியிடுகிறதுஎதிரொலி"
"; $num = getSquare(5); எதிரொலி $num;

விளைவாக:

முக்கிய வார்த்தை என்பதை கவனத்தில் கொள்ளவும் திரும்பஒரு மதிப்பை மட்டும் திருப்பித் தருவதில்லை, ஆனால் செயல்பாட்டை முழுவதுமாக குறுக்கிடுகிறது, அதாவது முக்கிய சொல்லுக்கு கீழே உள்ள அனைத்து குறியீடுகளும் திரும்பஒருபோதும் நிறைவேறாது. வேறு வார்த்தைகளில் கூறுவதானால், செயல்பாடுகளுக்கான ரிட்டர்ன் கூட வேலை செய்கிறது உடைக்கசுழல்களுக்கு:

எதிரொலி "PHP என்னை ஒருபோதும் அடையாது:(";) எதிரொலி getSquare(5); //முடிவை வெளியிடுகிறதுஎதிரொலி"
"; $num = getSquare(5); // ஒரு மாறிக்கு முடிவை ஒதுக்கியதுஎதிரொலி $num; // மாறியை திரையில் காட்டவும்

விளைவாக:

அது திரும்ப- இது செயல்பாட்டிலிருந்து வெளியேறுவதும் ஆகும். ரிட்டர்ன் வேல்யூ இல்லாமல், வெளியீட்டிற்காக மட்டுமே இதைப் பயன்படுத்தலாம்.

சுழல் செயல்பாடு

ஒரு சுழல்நிலை செயல்பாடு தன்னை அழைக்கும் ஒரு செயல்பாடு ஆகும். மறுநிகழ்வு அடிக்கடி பயன்படுத்தப்படுவதில்லை மற்றும் இது ஒரு வள-தீவிர (மெதுவான) செயல்பாடாக கருதப்படுகிறது. ஆனால் மறுநிகழ்வைப் பயன்படுத்துவது மிகவும் வெளிப்படையான மற்றும் எளிமையான விருப்பமாகும். உதாரணமாக:

"; என்றால்($எண்< 20){ // அதனால் மறுநிகழ்வு முடிவற்றதாக மாறாது countPlease(++$number); // கவுண்ட்ப்ளீஸ் செயல்பாடு தன்னைத்தானே அழைக்கப்படுகிறது) ) தயவு செய்து (1);

விளைவாக:

மறுநிகழ்வு இல்லாமல் எப்படி செய்வது என்று உங்களுக்குத் தெரிந்தால், அதைச் செய்வது நல்லது.

PHP இல் வலுவான தட்டச்சு (வகை சுத்திகரிப்பு)

PHP வலுவான தட்டச்சுக்கு சிறிய படிகளை எடுக்கும், எனவே ஒரு செயல்பாடு எந்த வகையை எடுக்க வேண்டும் என்பதை முன்கூட்டியே குறிப்பிடலாம் (இது அழைக்கப்படுகிறது வகை-குறிப்பு):

விளைவாக:

கேட்ச் செய்யக்கூடிய அபாயகரமான பிழை: வாதம் 1 கவுண்ட் ப்ளீஸ் () வரிசையாக இருக்க வேண்டும், கொடுக்கப்பட்ட முழு எண், வரி 7 இல் /home/index.php இல் அழைக்கப்படுகிறது மற்றும் வரி 3 இல் /home/index.php இல் வரையறுக்கப்பட்டுள்ளது

செயல்பாடு ஒரு வரிசையைப் பெற எதிர்பார்க்கிறது என்று பிழை சொல்கிறது, ஆனால் அதற்கு பதிலாக நாம் அதை ஒரு எண்ணைக் கடக்கிறோம். துரதிர்ஷ்டவசமாக, இப்போது நாம் (வரிசை) வகையை மட்டுமே குறிப்பிட முடியும், மேலும் PHP 5.4 உடன் நாங்கள் அத்தகைய விருப்பத்தையும் சேர்த்துள்ளோம். அழைக்கக்கூடியது:

அழைக்கக்கூடியதுஅனுப்பப்பட்ட மதிப்பை செயல்பாடாக அழைக்க முடியுமா என்பதை சரிபார்க்கிறது. அழைக்கக்கூடியது என்பது சரம் மாறியால் குறிப்பிடப்பட்ட செயல்பாட்டின் பெயராக இருக்கலாம் அல்லது ஒரு பொருள் மற்றும் அழைக்கப்படும் முறையின் பெயராக இருக்கலாம். ஆனால் பொருள்கள் மற்றும் முறைகளைப் பற்றி பின்னர் பேசுவோம் (இது பொருள் சார்ந்த நிரலாக்கத்தின் ஒரு பகுதி), ஆனால் நீங்கள் ஏற்கனவே செயல்பாடுகளை நன்கு அறிந்திருக்கிறீர்கள். என்னிடம் தற்போது PHP 5.3 இருப்பதால், வேலையின் முடிவை என்னால் காட்ட முடியாது, ஆனால் அது:

getEcho செயல்பாடு என்று அழைக்கப்படுகிறது

மாறி நீள வாதங்களைப் பயன்படுத்துதல்

இறுதியாக, மிகவும் அரிதாகவே பயன்படுத்தப்படும் ஒரு நுணுக்கம். ஒரு சூழ்நிலையை கற்பனை செய்து பாருங்கள்: ஒரு செயல்பாட்டிற்கு வாதங்களை அனுப்புகிறோம், இருப்பினும் அவற்றை செயல்பாட்டில் விவரிக்கவில்லை, எடுத்துக்காட்டாக:

விளைவாக:

நீங்கள் பார்க்க முடியும் என, பிழைகள் எதுவும் இல்லை, ஆனால் எங்கள் அனுப்பிய வாதங்கள் எங்கும் பயன்படுத்தப்படவில்லை. ஆனால் அவை போய்விட்டன என்று இது அர்த்தப்படுத்துவதில்லை - அவை இன்னும் செயல்பாட்டிற்குள் அனுப்பப்பட்டுள்ளன, அவற்றை நாம் பயன்படுத்தலாம்; இதற்காக உள்ளமைக்கப்பட்ட PHP செயல்பாடுகள் உள்ளன:

func_num_args()- செயல்பாட்டிற்கு அனுப்பப்பட்ட வாதங்களின் எண்ணிக்கையை வழங்குகிறது
func_get_arg(வரிசை எண்)- வாதங்களின் பட்டியலிலிருந்து ஒரு உறுப்பை வழங்குகிறது
func_get_args()- செயல்பாடு வாதங்களைக் கொண்ட வரிசையை வழங்குகிறது

"; echo func_get_arg(0) ; ) $age = 22; getEcho("Rud Sergey", $age);

விளைவாக:

முடிவுரை

இன்றைய கட்டுரை PHP இல் உள்ள செயல்பாடுகள் என்ற தலைப்பில் இறுதியானது. இப்போது இந்த தலைப்பைப் பற்றிய உங்கள் அறிவின் முழுமையில் நீங்கள் நம்பிக்கையுடன் இருக்க முடியும் மற்றும் உங்கள் தேவைகளுக்கான செயல்பாடுகளை நம்பிக்கையுடன் பயன்படுத்தலாம்.

ஒருவருக்கு அதை சிறப்பாக செய்ய விருப்பம் இருந்தால், ஆனால் அதை எப்படி செய்வது என்று தெரியவில்லை என்றால், ஆயத்த (உள்ளமைக்கப்பட்ட) PHP செயல்பாடுகளை எழுதுவதே சிறந்த வழி, எடுத்துக்காட்டாக, உங்கள் சொந்த எண்ணிக்கை () செயல்பாட்டை நீங்கள் எழுதலாம். அல்லது வேறு ஏதேனும்.

உங்கள் கவனத்திற்கு அனைவருக்கும் நன்றி மற்றும் மீண்டும் சந்திப்போம்! ஏதாவது தெளிவாக இல்லை என்றால், கருத்துகளில் உங்கள் கேள்விகளைக் கேட்கவும்!

ஒரு மாறியின் நோக்கம் என்பது மாறி வரையறுக்கப்பட்ட சூழலாகும். பெரும்பாலான சந்தர்ப்பங்களில், அனைத்து PHP மாறிகளும் ஒரே ஒரு நோக்கம் கொண்டவை. இந்த ஒற்றை நோக்கம் சேர்க்கப்பட்ட மற்றும் தேவையான கோப்புகளையும் உள்ளடக்கியது. உதாரணத்திற்கு:

$a = 1 ;
"b.inc" அடங்கும்;
?>

இங்கே சேர்க்கப்பட்ட b.inc ஸ்கிரிப்ட்டின் உள்ளே $a மாறி கிடைக்கும். இருப்பினும், பயனர் வரையறுக்கப்பட்ட செயல்பாட்டின் வரையறை (உடல்) அந்தச் செயல்பாட்டின் உள்ளூர் நோக்கத்தைக் குறிப்பிடுகிறது. ஒரு செயல்பாட்டிற்குள் பயன்படுத்தப்படும் எந்த மாறியும் முன்னிருப்பாக செயல்பாட்டின் உள்ளூர் நோக்கத்துடன் வரையறுக்கப்படுகிறது. உதாரணத்திற்கு:

$a = 1 ; /* உலகளாவிய நோக்கம் */

செயல்பாட்டு சோதனை()
{
எதிரொலி $a ; /* லோக்கல் ஸ்கோப் மாறிக்கான குறிப்பு */
}

சோதனை ();
?>

இந்த ஸ்கிரிப்ட் எந்த வெளியீட்டையும் உருவாக்காது, ஏனெனில் எதிரொலி அறிக்கையானது $a என்ற மாறியின் உள்ளூர் பதிப்பை சுட்டிக்காட்டுகிறது மேலும் அதற்கு அந்த எல்லைக்குள் மதிப்பு ஒதுக்கப்படவில்லை. இது C இலிருந்து சற்று வித்தியாசமானது என்பதை நீங்கள் கவனித்திருக்கலாம், ஏனெனில் C இல் உள்ள உலகளாவிய மாறிகள் உள்ளூர் வரையறையால் மேலெழுதப்படாவிட்டால் அவை தானாகவே செயல்பாடுகளுக்குக் கிடைக்கும். மக்கள் தற்செயலாக உலகளாவிய மாறியை மாற்றக்கூடும் என்பதால் இது சில சிக்கல்களை ஏற்படுத்தலாம். PHP இல், ஒரு செயல்பாட்டிற்குள் உலகளாவிய மாறியைப் பயன்படுத்த வேண்டும் என்றால், அது செயல்பாட்டு வரையறைக்குள் உலகளாவியதாக அறிவிக்கப்பட வேண்டும்.

முக்கிய வார்த்தை உலகளாவிய

முதலில் ஒரு பயன்பாட்டு உதாரணம் உலகளாவிய:

எடுத்துக்காட்டு #1 பயன்பாடு உலகளாவிய

$a = 1 ;
$b = 2 ;

செயல் தொகை()
{
உலகளாவிய $a, $b;

$b = $a + $b ;
}

தொகை();
எதிரொலி $b ;
?>

மேலே உள்ள ஸ்கிரிப்ட் வெளிவரும் 3 . ஒரு செயல்பாட்டிற்குள் $a மற்றும் $b ஆகியவை உலகளாவியவை என வரையறுக்கப்பட்டவுடன், இந்த மாறிகளில் ஏதேனும் ஒன்றின் அனைத்து குறிப்புகளும் அவற்றின் உலகளாவிய பதிப்பை சுட்டிக்காட்டும். ஒரு செயல்பாடு கையாளக்கூடிய உலகளாவிய மாறிகளின் எண்ணிக்கைக்கு வரம்பு இல்லை.

உலகளாவிய ஸ்கோப் மாறிகளை அணுகுவதற்கான இரண்டாவது வழி, $GLOBALS என்ற சிறப்பு PHP-வரையறுக்கப்பட்ட வரிசையைப் பயன்படுத்துவதாகும். முந்தைய உதாரணத்தை இப்படி மாற்றி எழுதலாம்:

$GLOBALS என்பது ஒரு துணை வரிசையாகும், அதன் திறவுகோல் பெயர் மற்றும் மதிப்பு என்பது உலகளாவிய மாறியின் உள்ளடக்கமாகும். $GLOBALS எந்த நோக்கத்திலும் உள்ளது என்பதை நினைவில் கொள்ளவும், ஏனெனில் $GLOBALS சூப்பர் குளோபல் ஆகும். சூப்பர் குளோபல்களின் திறன்களை நிரூபிக்கும் ஒரு எடுத்துக்காட்டு கீழே உள்ளது:

எடுத்துக்காட்டு #3 சூப்பர் குளோபல்ஸ் மற்றும் ஸ்கோப்

செயல்பாடு test_global()
{
// பெரும்பாலான முன் வரையறுக்கப்பட்ட மாறிகள் இல்லை
// "சூப்பர்" மற்றும் உள்ளூர் பகுதியில் கிடைக்கும்
// தெரிவுநிலை, செயல்பாடுகளுக்கு "குளோபல்" குறிப்பிடப்பட வேண்டும்.
உலகளாவிய $HTTP_POST_VARS ;

எதிரொலி $HTTP_POST_VARS["பெயர்"];

// Superglobals எந்த நோக்கத்திலும் கிடைக்கும்
// தெரிவுநிலை மற்றும் "உலகளாவிய" குறிப்பிட தேவையில்லை.
// Superglobals PHP 4.1.0 இலிருந்து கிடைக்கின்றன, மற்றும்
// HTTP_POST_VARS இன் பயன்பாடு நிராகரிக்கப்பட்டது.
எதிரொலி $_POST ["பெயர்" ];
}
?>

கருத்து:

முக்கிய வார்த்தை பயன்பாடு உலகளாவியசெயல்பாட்டிற்கு வெளியே ஒரு பிழை இல்லை. ஒரு செயல்பாட்டிற்குள் சேர்க்கப்பட்டுள்ள கோப்பில் இதைப் பயன்படுத்தலாம்.

நிலையான பயன்படுத்தி ( நிலையான) மாறிகள்

மாறி நோக்கத்தின் மற்றொரு முக்கியமான அம்சம் நிலையானமாறி. ஒரு நிலையான மாறி ஒரு செயல்பாட்டின் உள்ளூர் நோக்கத்தில் மட்டுமே உள்ளது, ஆனால் நிரல் செயல்படுத்தல் அந்த நோக்கத்தை விட்டு வெளியேறும்போது அதன் மதிப்பை இழக்காது. பின்வரும் உதாரணத்தைக் கவனியுங்கள்:

எடுத்துக்காட்டு #4 நிலையான மாறிகளின் தேவையை விளக்குகிறது

செயல்பாட்டு சோதனை ()
{
$a = 0 ;
எதிரொலி $a ;
$a++;
}
?>

இந்த செயல்பாடு மிகவும் பயனற்றது, ஏனெனில் ஒவ்வொரு முறையும் இது $a ஐ அமைக்கிறது 0 மற்றும் வெளியீடுகள் 0 . $a ++ மாறியின் அதிகரிப்பு இங்கு பங்கு வகிக்காது, ஏனெனில் செயல்பாடு வெளியேறும் போது $a மாறி மறைந்துவிடும். தற்போதைய கவுண்டர் மதிப்பை இழக்காத பயனுள்ள எண்ணும் செயல்பாட்டை எழுத, மாறி $a நிலையானதாக அறிவிக்கப்படுகிறது:

எடுத்துக்காட்டு #5 நிலையான மாறிகளைப் பயன்படுத்துவதற்கான எடுத்துக்காட்டு

செயல்பாட்டு சோதனை ()
{
நிலையான $a = 0 ;
எதிரொலி $a ;
$a++;
}
?>

இப்போது $a ஆனது முதல் செயல்பாட்டு அழைப்பிலும் ஒவ்வொரு செயல்பாட்டு அழைப்பிலும் மட்டுமே துவக்கப்படும் சோதனை ()$a இன் மதிப்பை அச்சிட்டு அதை அதிகரிக்கும்.

நிலையான மாறிகள் சுழல்நிலை செயல்பாடுகளுடன் வேலை செய்வதையும் சாத்தியமாக்குகின்றன. ஒரு சுழல்நிலை செயல்பாடு தன்னை அழைக்கும் ஒன்றாகும். ஒரு சுழல்நிலை செயல்பாட்டை எழுதும் போது, ​​நீங்கள் கவனமாக இருக்க வேண்டும், ஏனெனில் மறுநிகழ்வை எல்லையற்றதாக மாற்றுவதற்கான வாய்ப்பு உள்ளது. மறுநிகழ்வை நிறுத்த போதுமான வழி இருப்பதை உறுதிசெய்ய வேண்டும். நிலையான மாறி $count ஐப் பயன்படுத்தி, எப்போது நிறுத்த வேண்டும் என்பதைத் தீர்மானிக்க, பின்வரும் எளிய செயல்பாடு 10 வரை மீண்டும் மீண்டும் கணக்கிடப்படுகிறது:

கருத்து:

முந்தைய எடுத்துக்காட்டில் காட்டப்பட்டுள்ளபடி நிலையான மாறிகள் அறிவிக்கப்படலாம். வெளிப்பாடுகளின் விளைவாக இருக்கும் இந்த மாறிகளுக்கு மதிப்புகளை ஒதுக்க முயற்சிப்பது செயலாக்க பிழையை ஏற்படுத்தும்.

எடுத்துக்காட்டு #7 நிலையான மாறிகளை அறிவிக்கிறது

செயல்பாடு foo ()(
நிலையான $int = 0 ; //சரி
நிலையான $int = 1 + 2 ; // தவறானது (இது ஒரு வெளிப்பாடு என்பதால்)
நிலையான $int = sqrt(121); // தவறானது (இதுவும் ஒரு வெளிப்பாடு என்பதால்)

$int++;
எதிரொலி $int ;
}
?>

கருத்து:

ஸ்கிரிப்ட் தொகுப்பின் போது நிலையான அறிவிப்புகள் மதிப்பீடு செய்யப்படுகின்றன.

உலகளாவிய இணைப்புகள் ( உலகளாவிய) மற்றும் நிலையான ( நிலையான) மாறிகள்

PHP 4 ஐ இயக்கும் Zend Engine 1, நிலையான மற்றும் உலகளாவிய மாறி மாற்றிகளை குறிப்புகளாகக் கருதுகிறது. எடுத்துக்காட்டாக, முக்கிய சொல்லைக் குறிப்பிடுவதன் மூலம் ஒரு செயல்பாட்டின் நோக்கத்தில் உட்பொதிக்கப்பட்ட உண்மையான உலகளாவிய மாறி உலகளாவிய, விளைவு உலகளாவிய மாறிக்கு ஒரு குறிப்பை உருவாக்குகிறது. பின்வரும் எடுத்துக்காட்டில் காட்டப்பட்டுள்ளபடி, இது எதிர்பாராத நடத்தைக்கு வழிவகுக்கும்:

செயல்பாடு test_global_ref() (
உலகளாவிய $obj;
$obj = &புதிய stdclass ;
}

செயல்பாடு test_global_noref() (
உலகளாவிய $obj;
$obj = புதிய stdclass ;
}

test_global_ref();
var_dump ($obj);
test_global_noref();
var_dump ($obj);
?>

இந்த எடுத்துக்காட்டை இயக்குவதன் முடிவு: get_instance_noref () (
நிலையான $obj;

எதிரொலி "நிலையான பொருள்:";
var_dump ($obj);
என்றால் (!isset($obj )) (
// ஒரு பொருளை நிலையான மாறிக்கு ஒதுக்கவும்
$obj = புதிய stdclass ;
}
$obj -> சொத்து++;
திரும்ப $obj ;
}

$obj1 = get_instance_ref();
$still_obj1 = get_instance_ref();
எதிரொலி "\n" ;
$obj2 = get_instance_noref();
$still_obj2 = get_instance_noref();
?>

இந்த உதாரணத்தை இயக்குவதன் விளைவு:

நிலையான பொருள்: NULL
நிலையான பொருள்: NULL

நிலையான பொருள்: NULL
நிலையான பொருள்: பொருள்(stdClass)(1) (
["சொத்து"]=>
முழு எண்ணாக (1)
}

நிலையான மாறிக்கு ஒரு குறிப்பை நீங்கள் ஒதுக்கும்போது, ​​​​அது இல்லை என்பதை இந்த எடுத்துக்காட்டு நிரூபிக்கிறது மறக்கமுடியாததுநீங்கள் செயல்பாட்டை அழைக்கும் போது &get_instance_ref()இரண்டாவது முறை.

பரந்த அளவிலான செயல்பாடுகளுடன் ஒரு முழு அளவிலான வலைத்தளத்தை உருவாக்க, நீங்கள் நிறைய தெரிந்து கொள்ள வேண்டும். இருப்பினும், PHP ஒரு தளத்திற்கு உண்மையான தனித்துவத்தை கொடுக்க முடியும். இந்த நிரலாக்க மொழியில் குளோபல் மாறி அடிக்கடி பயன்படுத்தப்படுவதில்லை, ஆனால் சில சமயங்களில் அது எவ்வாறு செயல்படுகிறது என்பதை அறிவது மிகவும் பயனுள்ளதாக இருக்கும்.


இந்தக் கட்டுரையில், உலகளாவிய மாறி என்றால் என்ன, அது எவ்வாறு செயல்படுகிறது என்பதைப் படிப்போம்.

உலகளாவிய மாறி: நோக்கம்

ஒரு மாறி வரையறுக்கப்படும் சூழல் அதன் நோக்கம் என்று அழைக்கப்படுகிறது. பொதுவாக, மாறிகளுக்கு ஒரே ஒரு நோக்கம் மட்டுமே இருக்கும். PHP இல் உள்ள உலகளாவிய மாறிகள் மற்ற கோப்புகளிலிருந்து ஏற்றப்படும் போது, ​​அவை தேவைப்படலாம் அல்லது சேர்க்கப்படலாம். அவை இயல்பாக செயல்பாட்டின் உள்ளூர் நோக்கத்திற்கு வரம்புக்குட்பட்டவை. ஒரு மாறியை அதன் எல்லைகளுக்கு அப்பாற்பட்ட கோப்புகளுக்கு எவ்வாறு தெரியும்படி செய்யலாம் மற்றும் அதைப் பயன்படுத்த முடியுமா? இதனால்தான் PHP உலகளாவிய மாறியை வழங்குகிறது. இங்கே முக்கிய வார்த்தை "உலகளாவிய". PHP இல் உலகளாவிய மாறியை எவ்வாறு அறிவிப்பது? இந்த இலக்கை அடைய, "உலகளாவிய" என்ற வார்த்தையைப் பயன்படுத்த வேண்டும். நீங்கள் உலகளாவியதாக மாற்ற விரும்பும் மாறியின் முன் உடனடியாக வைக்கப்பட வேண்டும். இது போல் தெரிகிறது: உலகளாவிய "மாறி". இந்த வகையான வழிமுறைகளை செயல்படுத்திய பிறகு, எந்தவொரு கோப்பும் தரவுடன் வேலை செய்ய முடியும்.

இந்த மாறிக்கு எங்காவது குறிப்புகள் இருந்தால், நிரல் உலகளாவிய பதிப்பிற்கு கவனம் செலுத்தும். இத்தகைய விசித்திரமான வார்த்தைகள் ஏன் பயன்படுத்தப்படுகின்றன? விஷயம் என்னவென்றால், அதே நேரத்தில், உள்ளூர் பதிப்புகளும் இருக்கலாம். ஆனால் அவை அறிவிக்கப்பட்ட கோப்புகளில் பிரத்தியேகமாக அணுகக்கூடியதாக இருக்கும். மீதமுள்ளவற்றுக்கு, உலகளாவிய PHP வகுப்பு மாறிகள் பொருந்தும். இங்கே நீங்கள் மிகவும் கவனமாகவும் கவனமாகவும் செயல்பட வேண்டும். ஏதேனும் சந்தேகங்களைத் தடுக்க, அவை எப்படி இருக்கும் என்பதற்கான எளிய உதாரணத்தைக் கொடுப்போம்: உலகளாவிய a. ஒரு கோப்பில் பல மாறிகளுக்கான அணுகல் இருந்தால், இது மோதலை ஏற்படுத்தலாம். ஆனால் உலகளாவிய அல்லது உள்ளூர் மாறி படிக்கப்படுமா, அல்லது பிழை ஏற்படுமா என்பதை இங்கே உறுதியாகக் கூற முடியாது. நீங்கள் அதை ஒரு செயல்பாட்டிற்குள் எழுதினால், எந்த பிரச்சனையும் எழக்கூடாது. ஒரு செயல்பாட்டின் எல்லைக்கு வெளியே மாறியைப் பயன்படுத்துவது சிக்கலாக இருக்கும். எனவே, நீங்கள் குறியீட்டின் கட்டமைப்பை மிகவும் கவனமாக கண்காணிக்க வேண்டும் மற்றும் எங்கும் மோதலுக்கு முன்நிபந்தனைகள் இல்லை என்பதை உறுதிப்படுத்தவும்.

உலகளாவிய மாறிகள்: மற்றொரு குறிப்பு
உலகளாவிய மாறிகளை அமைக்க வேறு வழிகள் உள்ளதா? ஆம், தனியாக இல்லை. முதலில் $GLOBALS ஐப் பார்ப்போம். இது ஒரு துணை வரிசையாகும், அதில் முக்கிய பெயர் உள்ளது. உலகளாவிய மாறியின் உள்ளடக்கங்கள் மதிப்பாகப் பயன்படுத்தப்படுகின்றன. அறிவிப்புக்குப் பிறகு, இந்த வரிசை எந்த நோக்கத்திலும் உள்ளது என்பது கவனிக்கத்தக்கது. இது சூப்பர்-குளோபல் என்று கருதுவதற்கான காரணத்தை அளிக்கிறது. இது போல் தெரிகிறது: $GLOBALS ['மாறி'].

சூப்பர் குளோபல்ஸ்
எந்தவொரு நிரலாக்க மொழியிலும், தனிப்பட்ட செயல்பாடுகளுக்கு ஒதுக்கப்பட்ட பெயர்கள் உள்ளன. PHP இல் ஒரே பெயரில் உலகளாவிய மாறிகளை உருவாக்குவது சாத்தியமில்லை. இந்த நிரலாக்க மொழிக்கு அதன் சொந்த பண்புகள் உள்ளன. எடுத்துக்காட்டாக, முன் வரையறுக்கப்பட்ட மாறிகள் "சூப்பர்" என்ற முன்னொட்டைக் கொண்டிருக்கவில்லை என்பது மிகவும் முக்கியமானது. இதன் பொருள் அவை எல்லா இடங்களிலும் கிடைக்காது. இந்த நிலைமையை எவ்வாறு சரிசெய்வது? சில உள்ளூர் நெட்வொர்க்கில் முன் வரையறுக்கப்பட்ட மாறி கிடைக்க, நீங்கள் அதை இப்படி அறிவிக்க வேண்டும்: உலகளாவிய "மாறி". இது ஏற்கனவே முன்பே குறிப்பிடப்பட்டுள்ளது. இருப்பினும், இது முற்றிலும் உண்மை இல்லை. ஒரு உண்மையான உதாரணத்தைப் பார்ப்போம்:
உலகளாவிய $HTTP_POST_VARS; எதிரொலி $HTTP_POST_VARS ['பெயர்'].
வித்தியாசத்தை உணர்கிறீர்களா? PHP இல் உலகளாவிய மாறி ஒரு செயல்பாட்டிற்குள் பயன்படுத்தப்பட வேண்டும் என்பதை நினைவில் கொள்வது மதிப்பு. இது அதில் சேர்க்கப்பட்டுள்ள கோப்பிலும் இருக்கலாம்.

பாதுகாப்பு மற்றும் இணைப்புகள்
நீங்களே பார்க்க முடியும் என, PHP இல் உலகளாவிய மாறியை உருவாக்குவது ஒரு பிரச்சனையல்ல. ஆனால் இணைப்புகள் தொடர்பாக ஏதேனும் விவரங்கள் உள்ளதா? உலகளாவிய மாறிகளைப் பயன்படுத்தும் போது, ​​சில எதிர்பாராத நடத்தைகள் சாத்தியமாகும். ஆனால் இந்த சிக்கலை இன்னும் விரிவாகப் படிப்பதற்கு முன், பின்னணிக்குத் திரும்புவது அவசியம். Register_globals கட்டளையானது பதிப்பு 4.2 இல் முன்னிருப்பாக இயக்கப்பட்டது என்பதிலிருந்து முடக்கப்பட்டது என மாற்றப்பட்டது. பல பயனர்களுக்கு, இது முற்றிலும் முக்கியமற்றது மற்றும் வீணானது, ஏனெனில் உருவாக்கப்படும் தயாரிப்பின் பாதுகாப்பு நேரடியாக அதைப் பொறுத்தது. நீங்கள் ஒரு உலகளாவிய மாறியை உருவாக்க வேண்டும் என்றால், PHP கட்டளை இந்த அமைப்பை நேரடியாக பாதிக்காது. இருப்பினும், தவறான பயன்பாடு பாதுகாப்பு ஆபத்தை ஏற்படுத்தும். எனவே, எடுத்துக்காட்டாக, register_globals செயல்படுத்தப்பட்ட நிலையில் இருந்தால், குறியீடு செயல்படுத்தப்படுவதற்கு முன் பல்வேறு தேவையான மாறிகள் துவக்கப்படும். எனவே, அதை அணைக்க முடிவு செய்தனர். ஒரு உலகளாவிய மாறி ஏன் கொடுக்கப்பட்ட உத்தரவுக்கு அதன் மாநிலத்தின் பெரும்பகுதிக்கு கடன்பட்டிருக்கிறது? சிக்கல் என்னவென்றால், இயக்கப்பட்டால், டெவலப்பர்கள் எப்போதுமே அது எங்கிருந்து வந்தது என்ற கேள்விக்கு பதிலளிக்க முடியாது, ஆனால் மறுபுறம், இது குறியீட்டை எழுதும் செயல்முறையை பெரிதும் எளிதாக்கியது. அதே நேரத்தில், அத்தகைய அமைப்பு பாதுகாப்பிற்கு ஒரு குறிப்பிட்ட அச்சுறுத்தலை உருவாக்கியது. தரவு கலவை மற்றும் பிழைகளைத் தவிர்க்க, உத்தரவு முடக்கப்பட்டது. இப்போது பாதுகாப்பற்ற குறியீட்டின் உதாரணத்தைப் பார்ப்போம். PHP குளோபல் மாறியின் அறிவிப்பு, தகவலை மாற்றும் முயற்சியுடன் இருக்கும் போது, ​​நீங்கள் எப்படி வழக்குகளைக் கண்டறிவது என்பதையும் நாங்கள் பார்ப்போம். முதல் பயனரால் ஹேக் செய்ய முடியாத நிலையான வேலை செய்யும் தளங்களை உருவாக்க இது தேவைப்படுகிறது.

ஆபத்தான குறியீடுகள்
அங்கீகரிக்கப்பட்ட பயனர்களுக்கான மாறியை உண்மையாக அமைப்போம்:
என்றால் (authenticate_user()) ($authoriza=true;) என்றால் ($authorize) (“/highly/sensitive/data.php”;) அடங்கும். இந்த நிலையில் ஒரு மாறி தானாகவே அமைக்கப்படும். தரவை மாற்றியமைக்க முடியும் மற்றும் அதன் தோற்றத்தின் ஆதாரம் நிறுவப்படவில்லை என்பதைக் கருத்தில் கொண்டு, எந்தவொரு பயனரும் அத்தகைய சரிபார்ப்பை அனுப்பலாம் மற்றும் யாரையும் ஆள்மாறாட்டம் செய்யலாம். ஒரு தாக்குபவர், விரும்பினால், முழு ஸ்கிரிப்ட்டின் தர்க்கத்தையும் சீர்குலைக்கலாம். நீங்கள் கட்டளையின் மதிப்பை மாற்றினால், குறியீடு சரியாக வேலை செய்யும். இதைத்தான் நாம் செய்ய வேண்டும். இருப்பினும், மாறிகளை துவக்குவது புரோகிராமர்களிடையே ஒரு நல்ல நடைமுறை மட்டுமல்ல, இது ஸ்கிரிப்ட்டின் நிலைத்தன்மைக்கும் உத்தரவாதம் அளிக்கிறது.

நம்பகமான விருப்பம்
இந்த இலக்கை அடைய, நீங்கள் கட்டளையை முடக்க முயற்சி செய்யலாம் அல்லது மிகவும் சிக்கலான குறியீட்டை எழுதலாம், எடுத்துக்காட்டாக, இது போன்றது: என்றால் (isset($_SESSION ['பயனர்பெயர்'])) (எதிரொலி "ஹலோ" ($_SESSION ['பயனர்பெயர்'') ])";) வேறு ("ஹலோ கெஸ்ட்" எதிரொலி; எதிரொலி "வரவேற்க!";). இந்த வழக்கில், மாற்றீடு செய்வது கடினம். எனினும், அது சாத்தியம். இதைச் செய்ய, விரைவான மறுமொழி கருவிகள் கிடைப்பதை முன்கூட்டியே கவனித்துக் கொள்ள வேண்டும். PHP இல் உலகளாவிய மாறிகளை நீங்கள் சேர்க்க வேண்டும் என்றால், நீங்கள் பின்வரும் கருவியைப் பயன்படுத்தலாம்: எந்த வரம்பில் மதிப்பு பெறப்படும் என்பது உங்களுக்குத் தெரிந்தால், ஸ்கிரிப்ட் இந்த உண்மையை ஒப்பிட்டு சரிபார்க்கும் வகையில் அதை எழுதலாம். இது, நிச்சயமாக, மதிப்பு மாற்றுக்கு எதிராக 100% பாதுகாப்பிற்கு உத்தரவாதம் அளிக்க முடியாது. இருப்பினும், சாத்தியமான விருப்பங்களைச் செய்வது செயல்பாட்டை கணிசமாக சிக்கலாக்கும்.

ஏமாற்றும் முயற்சியை எவ்வாறு கண்டறிவது?
நீங்கள் முன்பு எழுதிய அனைத்தையும் சரியாகப் புரிந்து கொண்டீர்களா என்பதை இப்போது பார்க்கலாம். ஒரு செயல்பாட்டில் உலகளாவிய மாறிகளை நீங்களே அறிவிக்க வேண்டும். இது ஒரு வகையான வீட்டுப்பாடம். முதலில், இங்கே குறியீடு:

சில விளக்கங்கள் தருவோம். C_COOKIE மாறி நம்பகமான மூலத்திலிருந்து எடுக்கப்பட்டது. அதன் முடிவு எதிர்பார்த்தபடி இருப்பதை உறுதிசெய்ய, மாறியின் மதிப்பு சரிபார்க்கப்படுகிறது. சிக்கல்கள் ஏற்பட்டால், நிர்வாகி ஒரு அறிவிப்பைப் பெறுவார். எதுவும் நடக்கவில்லை என்றால், எந்த நடவடிக்கையும் எடுக்கப்படாது.