Dè a th’ ann an Iterable ann am PHP?
Is e luach a th’ ann an ath-aithris a dh’ fhaodar ath-aithris thairis air. Tha e na dheagh roghainn airson cunntas a chumail air cia mheud uair a chaidh thu tro lùb. Mar eisimpleir, ma tha thu airson lùb fhàgail às deidh 10 tionndadh, faodaidh tu dìreach a dhèanamh le bhith a’ cleachdadh ath-aithris.
Mar a chleachdas tu Iterables ann am PHP
- Is e ath-aithris luach sam bith ris an gabhar le a foreach lùb.
- Thug PHP 7.1 a-steach an seòrsa dàta meallta seo agus faodar a chleachdadh mar an seòrsa gnìomh dàta tilleadh. Cuideachd, faodaidh an gnìomh gabhail ri iterables mar an argamaid aige.
Tha ierables a’ toirt seachad dòigh shìmplidh airson cunntas a chumail air a’ chunntadh ath-aithris fhad ‘s a thathar a’ dèiligeadh ri lùban, a dh’ fhaodadh a bhith feumail ann an cuid de shuidheachaidhean. Faodaidh e cuideachd a bhith air a chleachdadh mar sheòrsa tilleadh gnìomh, agus faodaidh an gnìomh nithean a ghabhas a chleachdadh mar argamaidean.
Mar a nì thu sgrùdadh a bheil nì a ghabhas ath-aithris
Gus faighinn a-mach a bheil nì na eisimpleir den eadar-aghaidh IteratorAggregate no Iterator, cleachd eisimpleir gnìomhaiche. Mar eisimpleir:
$obj = new MyClass();
if ($obj instanceof IteratorAggregate || $obj instanceof Iterator) {
// object is iterable
}
Mar a nì thu lùb thairis air nì a ghabhas ath-aithris
Faodaidh tu a 'cleachdadh an foreach
lùb gus lùbadh thairis air nì a ghabhas ath-aithris. Mar eisimpleir:
$iterable = new MyIterableClass();
foreach ($iterable as $value) {
// do something with $value
}
A’ cruthachadh do chlas Iterable fhèin
Feumaidh tu cur an gnìomh an eadar-aghaidh IteratorAggregate agus sònraich an faighIterator gnìomh gus do chlas ath-aithriseach fhèin a thogail. Mar eisimpleir:
class MyIterableClass implements IteratorAggregate {
private $data = array();
public function __construct($data) {
$this->data = $data;
}
public function getIterator() {
return new ArrayIterator($this->data);
}
}
Q&A
C: Dè na diofar sheòrsaichean ath-aithris ann am PHP?
A: Arrays, Rudan a tha a’ cur an gnìomh an eadar-aghaidh Iterator, agus tha nithean a tha a’ cur an gnìomh an eadar-aghaidh Traversable uile nan eisimpleirean de iterables ann am PHP.
C: An urrainn dhut an diofar eadar Iterator
agus Traversable
eadar-aghaidh?
A: An Iterator eadar-aghaidh a’ tabhann cruinneachadh de dhòighean airson ath-aithris tro nì, leithid ath-fhilleadh, sruth, iuchair, ath, agus dligheach. Tha an eadar-aghaidh Traversable, air an làimh eile, dìreach ag ràdh gu bheil clas furasta a ghluasad agus nach eil feum air dòighean sònraichte sam bith a chuir an gnìomh. Feumaidh clasaichean a tha air an cur an gnìomh le Iterator cuideachd an eadar-aghaidh Traversable a chuir an gnìomh.
C: Dè an cleachdadh a th’ ann IteratorAggregate
eadar-aghaidh?
A: Leigidh an eadar-aghaidh IteratorAggregate leat ath-aithris thairis air rud le bhith a’ stèidheachadh nì iterator bhon taobh a-muigh as urrainn faighinn thairis air susbaint an nì. Leigidh seo leis an nì a dhòigh tar-chuir fhèin a chruthachadh gun a bhith feumach air an eadar-aghaidh Iterator a chuir an gnìomh. Feumaidh clasaichean a chuireas an eadar-aghaidh seo an gnìomh aon dòigh a shònrachadh ris an canar getIterator, a thilleas eisimpleir de nì eadar-aghaidh Iterator.
C: Dè an diofar eadar foreach
agus for
lùb nuair a bhios tu a’ cleachdadh iterators?
A: Tha an foreach
lùb air a dhealbhadh gu sònraichte gus obrachadh le iterators, bidh e gu fèin-ghluasadach a’ gairm an rewind
dòigh-obrach aig toiseach an lùb agus an valid
dòigh gus faighinn a-mach a bheil barrachd eileamaidean ann airson ath-aithris.
The for
Faodar lùb a chleachdadh cuideachd le iterators, ach feumaidh am prògramadair an rewind
, valid
, current
, key
, agus next
dòighean-obrach aig na puingean iomchaidh san lùb.
C: Ciamar a chleachdas tu Iterator le Closure?
F: Faodar dùnadh a chleachdadh mar iterators ann am PHP. Gus seo a dhèanamh, cruthaich eisimpleir den chlas IteratorIterator agus thoir biadh dha do dhùnadh mar argamaid. Cha bu chòir don dhùnadh crìochan sam bith a ghabhail agus sreath a thilleadh anns a bheil an iuchair agus an luach làithreach. Gus am bi na caochladairean taobh a-muigh rim faighinn taobh a-staigh an dùnaidh, bu chòir aithris cleachdaidh a bhith anns an dùnadh a bharrachd.
$myArray = [1, 2, 3, 4];
$iter = new IteratorIterator(new ArrayIterator($myArray));
foreach ($iter as $key => $val) {
echo $val . PHP_EOL;
}
An seo, IteratorIterator
clas air a chleachdadh airson aithris thairis air an ArrayIterator
clas a tha an uairsin a’ dol seachad air a’ ghnìomh dùnaidh.
Exercises:
- Dè a th 'ann an ath-aithris ann am PHP?
- Ciamar a nì thu aithris thairis air sreath a’ cleachdadh airson lùb ann am PHP?
- Ciamar a nì thu aithris thairis air sreath a’ cleachdadh lùb foreach ann am PHP?
- Ciamar a nì thu aithris air rud a’ cleachdadh lùb foreach ann am PHP?
- Ciamar a chruthaicheas tu iterator airson clas àbhaisteach ann am PHP?
- Ciamar a chleachdas tu an
yield
prìomh fhacal gus gnìomh gineadair a chruthachadh ann am PHP?
freagairtean:
- Is e rud a th’ ann an iterable a ghabhas ath-aithris (lùb) thairis air, leithid sreath no nì.
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; }
- Gus iterator a chruthachadh airson clas àbhaisteach, feumaidh an clas an
Iterator
eadar-aghaidh agus mìneachadh anrewind
,valid
,current
,key
, agusnext
modhan. function generator() { yield $value1; yield $value2; }