PHP-യിൽ ഒരു ഐറ്ററബിൾ എന്താണ്?
ഒരു ഐറ്ററബിൾ എന്നത് വീണ്ടും ആവർത്തിക്കാൻ കഴിയുന്ന ഒരു മൂല്യമാണ്. നിങ്ങൾ എത്ര തവണ ഒരു ലൂപ്പിലൂടെ കടന്നുപോയി എന്നതിന്റെ ട്രാക്ക് സൂക്ഷിക്കുന്നതിനുള്ള മികച്ച ഓപ്ഷനാണിത്. ഉദാഹരണത്തിന്, 10 ആവർത്തനങ്ങൾക്ക് ശേഷം നിങ്ങൾക്ക് ഒരു ലൂപ്പിൽ നിന്ന് പുറത്തുകടക്കാൻ താൽപ്പര്യമുണ്ടെങ്കിൽ, നിങ്ങൾക്ക് അത് ഒരു ഐറ്റബിൾ ഉപയോഗിച്ച് ചെയ്യാം.
പിഎച്ച്പിയിൽ ഐറ്ററബിൾസ് എങ്ങനെ ഉപയോഗിക്കാം
- ഒരു ഐറ്ററബിൾ എന്നത് a അംഗീകരിച്ച ഏതൊരു മൂല്യവും ആണ് foreach ലൂപ്പ്.
- PHP 7.1 ഈ വ്യാജ-ഡാറ്റ തരം അവതരിപ്പിച്ചു, ഇത് ഫംഗ്ഷനുകളുടെ റിട്ടേൺ ഡാറ്റാ തരമായി ഉപയോഗിക്കാം. കൂടാതെ, ഫംഗ്ഷന് ഇറ്ററബിൾസ് അതിന്റെ ആർഗ്യുമെന്റായി സ്വീകരിക്കാൻ കഴിയും.
ലൂപ്പുകളുമായി ഇടപെടുമ്പോൾ ആവർത്തനങ്ങളുടെ എണ്ണം ട്രാക്ക് ചെയ്യാൻ ഐറ്ററബിളുകൾ ഒരു ലളിതമായ രീതി നൽകുന്നു, ഇത് ചില സാഹചര്യങ്ങളിൽ ഉപയോഗപ്രദമാകും. ഇത് ഒരു ഫംഗ്ഷന്റെ റിട്ടേൺ തരമായും ഉപയോഗിച്ചേക്കാം, കൂടാതെ ഫംഗ്ഷന് ഇറ്ററബിൾസ് ആർഗ്യുമെന്റുകളായി എടുക്കാം.
ഒരു ഒബ്ജക്റ്റ് ആവർത്തനയോഗ്യമാണോ എന്ന് എങ്ങനെ പരിശോധിക്കാം
ഒരു ഒബ്ജക്റ്റ് IteratorAggregate അല്ലെങ്കിൽ Iterator ഇന്റർഫേസുകളുടെ ഒരു ഉദാഹരണമാണോ എന്ന് നിർണ്ണയിക്കാൻ, ഓപ്പറേറ്ററുടെ ഉദാഹരണം ഉപയോഗിക്കുക. ഒരു ഉദാഹരണം എന്ന നിലക്ക്:
$obj = new MyClass();
if ($obj instanceof IteratorAggregate || $obj instanceof Iterator) {
// object is iterable
}
ഒരു ഐറ്റബിൾ ഒബ്ജക്റ്റിൽ എങ്ങനെ ലൂപ്പ് ചെയ്യാം
നിങ്ങൾക്ക് ഉപയോഗിക്കാം foreach
പുനഃസ്ഥാപിക്കാവുന്ന ഒബ്ജക്റ്റിന് മുകളിലൂടെ ലൂപ്പ് ചെയ്യുക. ഉദാഹരണത്തിന്:
$iterable = new MyIterableClass();
foreach ($iterable as $value) {
// do something with $value
}
നിങ്ങളുടെ സ്വന്തം ഇറ്ററബിൾ ക്ലാസ് സൃഷ്ടിക്കുന്നു
നിങ്ങൾ തീർച്ചയായും നടപ്പിലാക്കുക ഇറ്ററേറ്റർ അഗ്രഗേറ്റ് ഇന്റർഫേസ് വ്യക്തമാക്കുക getIterator നിങ്ങളുടെ സ്വന്തം ഇറ്ററബിൾ ക്ലാസ് നിർമ്മിക്കുന്നതിനുള്ള പ്രവർത്തനം. ഒരു ഉദാഹരണം എന്ന നിലക്ക്:
class MyIterableClass implements IteratorAggregate {
private $data = array();
public function __construct($data) {
$this->data = $data;
}
public function getIterator() {
return new ArrayIterator($this->data);
}
}
ചോദ്യോത്തരങ്ങൾ
ചോദ്യം: പിഎച്ച്പിയിലെ വ്യത്യസ്ത തരം ഐറ്ററബിളുകൾ ഏതൊക്കെയാണ്?
A: അണികൾ, വസ്തുക്കൾ ഇറ്ററേറ്റർ ഇന്റർഫേസ് നടപ്പിലാക്കുന്നതും ട്രാവേർസബിൾ ഇന്റർഫേസ് നടപ്പിലാക്കുന്ന ഒബ്ജക്റ്റുകളും പിഎച്ച്പിയിലെ ഐറ്ററബിളുകളുടെ ഉദാഹരണങ്ങളാണ്.
ചോദ്യം: തമ്മിലുള്ള വ്യത്യാസം വിശദീകരിക്കാമോ Iterator
ഒപ്പം Traversable
ഇന്റർഫേസുകൾ?
എ: ഇറ്ററേറ്റർ ഇന്റർഫേസ് റിവൈൻഡ്, കറന്റ്, കീ, അടുത്തത്, സാധുത എന്നിവ പോലുള്ള ഒരു ഒബ്ജക്റ്റിലൂടെ ആവർത്തിക്കുന്നതിനുള്ള രീതികളുടെ ഒരു ശേഖരം വാഗ്ദാനം ചെയ്യുന്നു. മറുവശത്ത്, ട്രാവേർസബിൾ ഇന്റർഫേസ്, ഒരു ക്ലാസ് സഞ്ചരിക്കാവുന്നതാണെന്നും പ്രത്യേക രീതികളൊന്നും നടപ്പിലാക്കേണ്ട ആവശ്യമില്ലെന്നും പറയുന്നു. ഇറ്ററേറ്റർ നടപ്പിലാക്കിയ ക്ലാസുകളും ട്രാവേർസബിൾ ഇന്റർഫേസ് നടപ്പിലാക്കണം.
ചോദ്യം: എന്താണ് പ്രയോജനം IteratorAggregate
ഇന്റർഫേസ്?
A: IteratorAggregate ഇന്റർഫേസ്, ഇനത്തിന്റെ ഉള്ളടക്കങ്ങളിലൂടെ കടന്നുപോകാൻ കഴിയുന്ന ഒരു ബാഹ്യ ഇറ്ററേറ്റർ ഒബ്ജക്റ്റ് സ്ഥാപിച്ച് ഒരു ഒബ്ജക്റ്റിന് മുകളിൽ ആവർത്തിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഇറ്ററേറ്റർ ഇന്റർഫേസ് നടപ്പിലാക്കാതെ തന്നെ ഒബ്ജക്റ്റിനെ അതിന്റേതായ ട്രാവേസൽ രീതി സൃഷ്ടിക്കാൻ ഇത് പ്രാപ്തമാക്കുന്നു. ഈ ഇന്റർഫേസ് നടപ്പിലാക്കുന്ന ക്ലാസുകൾ, Iterator ഇന്റർഫേസ് ഒബ്ജക്റ്റിന്റെ ഒരു ഉദാഹരണം നൽകുന്ന getIterator എന്ന ഒരൊറ്റ രീതി വ്യക്തമാക്കണം.
ചോദ്യം: എന്താണ് തമ്മിലുള്ള വ്യത്യാസം foreach
ഒപ്പം for
ഇറ്ററേറ്ററുകൾ ഉപയോഗിക്കുമ്പോൾ ലൂപ്പ് ചെയ്യണോ?
ഉത്തരം: ദി foreach
ലൂപ്പ് ഇറ്ററേറ്ററുകളുമായി പ്രവർത്തിക്കാൻ പ്രത്യേകം രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു, അത് യാന്ത്രികമായി വിളിക്കുന്നു rewind
ലൂപ്പിന്റെ തുടക്കത്തിലെ രീതിയും valid
ആവർത്തിക്കാൻ കൂടുതൽ ഘടകങ്ങൾ ഉണ്ടോ എന്ന് പരിശോധിക്കുന്നതിനുള്ള രീതി.
The for
ഇറ്ററേറ്ററുകൾക്കൊപ്പം ലൂപ്പും ഉപയോഗിക്കാം, പക്ഷേ പ്രോഗ്രാമർ നേരിട്ട് വിളിക്കേണ്ടതുണ്ട് rewind
, valid
, current
, key
, ഒപ്പം next
ലൂപ്പിലെ ഉചിതമായ പോയിന്റുകളിലെ രീതികൾ.
ചോദ്യം: ക്ലോഷറിനൊപ്പം ഇറ്ററേറ്റർ എങ്ങനെ ഉപയോഗിക്കാം?
A: PHP-യിൽ ക്ലോഷറുകൾ ആവർത്തനങ്ങളായി ഉപയോഗിക്കാം. ഇത് ചെയ്യുന്നതിന്, IteratorIterator ക്ലാസിന്റെ ഒരു ഉദാഹരണം സൃഷ്ടിച്ച് അതിനെ ഒരു ആർഗ്യുമെന്റായി അടച്ചുപൂട്ടുക. അടച്ചുപൂട്ടൽ പരാമീറ്ററുകളൊന്നും എടുക്കുകയും നിലവിലെ കീയും മൂല്യവും അടങ്ങുന്ന ഒരു അറേ നൽകുകയും വേണം. ക്ലോഷറിനുള്ളിൽ ബാഹ്യ വേരിയബിളുകൾ ലഭ്യമാക്കുന്നതിന്, ക്ലോഷറിൽ ഒരു ഉപയോഗ പ്രസ്താവന കൂടി ഉൾപ്പെടുത്തണം.
$myArray = [1, 2, 3, 4];
$iter = new IteratorIterator(new ArrayIterator($myArray));
foreach ($iter as $key => $val) {
echo $val . PHP_EOL;
}
ഇവിടെ, IteratorIterator
മേൽ ആവർത്തിക്കാൻ ക്ലാസ് ഉപയോഗിക്കുന്നു ArrayIterator
ക്ലോഷർ ഫംഗ്ഷൻ പാസ്സായ ക്ലാസ്.
വ്യായാമങ്ങൾ:
- PHP-യിലെ ഐറ്ററബിളുകൾ എന്തൊക്കെയാണ്?
- പിഎച്ച്പിയിൽ ഫോർ ലൂപ്പ് ഉപയോഗിച്ച് ഒരു അറേയിൽ എങ്ങനെ ആവർത്തിക്കാം?
- PHP-യിലെ ഒരു ഫോർച്ച് ലൂപ്പ് ഉപയോഗിച്ച് നിങ്ങൾ എങ്ങനെയാണ് ഒരു അറേയിൽ ആവർത്തിക്കുന്നത്?
- പിഎച്ച്പിയിലെ ഫോർച്ച് ലൂപ്പ് ഉപയോഗിച്ച് ഒരു ഒബ്ജക്റ്റിന് മുകളിൽ എങ്ങനെ ആവർത്തിക്കാം?
- പിഎച്ച്പിയിലെ ഒരു ഇഷ്ടാനുസൃത ക്ലാസിനായി നിങ്ങൾ എങ്ങനെയാണ് ഒരു ഇറ്ററേറ്റർ സൃഷ്ടിക്കുന്നത്?
- നിങ്ങൾ എങ്ങനെയാണ് ഉപയോഗിക്കുന്നത്
yield
PHP-യിൽ ഒരു ജനറേറ്റർ ഫംഗ്ഷൻ സൃഷ്ടിക്കുന്നതിനുള്ള കീവേഡ്?
ഉത്തരങ്ങൾ:
- ഒരു അറേ അല്ലെങ്കിൽ ഒബ്ജക്റ്റ് പോലെ ആവർത്തിച്ച് (ലൂപ്പ്) ചെയ്യാൻ കഴിയുന്ന ഒരു വസ്തുവാണ് ഐറ്ററബിൾ.
for ($i = 0; $i < count($array); $i++) { // code to be executed; }
foreach ($array as $value) { // code to be executed; }
foreach ($object as $property => $value) { // code to be executed; }
- ഒരു ഇഷ്ടാനുസൃത ക്ലാസിനായി ഒരു ഇറ്ററേറ്റർ സൃഷ്ടിക്കുന്നതിന്, ക്ലാസ് നടപ്പിലാക്കണം
Iterator
ഇന്റർഫേസ് ചെയ്ത് നിർവചിക്കുകrewind
,valid
,current
,key
, ഒപ്പംnext
രീതികൾ. function generator() { yield $value1; yield $value2; }