الفرق بين المراجعتين لصفحة: «PHP/iterable»
ط استبدال النص - 'PHP/Control Structures/for' ب'PHP/for' |
ط نقل عبد اللطيف ايمش صفحة PHP/Types/iterable إلى PHP/iterable: إعادة هيكلة التوثيق |
||
(2 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 1: | سطر 1: | ||
<noinclude>{{DISPLAYTITLE:المتغير التكراري في PHP}}</noinclude> | <noinclude>{{DISPLAYTITLE:المتغير التكراري في PHP}}</noinclude> | ||
إن المتغير التكراري Iterable هو شبه نوع (نوع زائف، pseudo-type) عُرِّفَ في الإصدار 7.1 من PHP وهو يقبل أية مصفوفة أو كائن يستخدم واجهة <code>[[PHP/Interfaces/Traversable|Traversable]]</code> (أي Traversable interface)، كلا النوعين يمكن تكراره باستخدام حلقة <code>[[PHP/foreach|foreach]]</code> ويمكن أن يُستخدم مع تعبير yield داخل [[PHP/ | إن المتغير التكراري Iterable هو شبه نوع (نوع زائف، pseudo-type) عُرِّفَ في الإصدار 7.1 من PHP وهو يقبل أية مصفوفة أو كائن يستخدم واجهة <code>[[PHP/Interfaces/Traversable|Traversable]]</code> (أي Traversable interface)، كلا النوعين يمكن تكراره باستخدام حلقة <code>[[PHP/foreach|foreach]]</code> ويمكن أن يُستخدم مع تعبير yield داخل [[PHP/generators|دالة مولِّدة]] (generator). | ||
== استخدام Iterables == | == استخدام Iterables == | ||
يمكن استخدام Iterable كنوع لمعاملات الدالة (function parameter type) للإشارة إلى الدالة تتطلب مجموعةً من القيم، لكن دون أن تهتم لصيغة القيمة لأنها ستُستخدَم مع حلقة <code>[[PHP/foreach|foreach]]</code>، إذا لم تكن القيم مصفوفة أو مبنيةً على واجهة <code>[[PHP/Interfaces/Traversable|Traversable]]</code>، فسيُرمى خطأٌ من النوع <code>[[PHP/ | يمكن استخدام Iterable كنوع لمعاملات الدالة (function parameter type) للإشارة إلى الدالة تتطلب مجموعةً من القيم، لكن دون أن تهتم لصيغة القيمة لأنها ستُستخدَم مع حلقة <code>[[PHP/foreach|foreach]]</code>، إذا لم تكن القيم مصفوفة أو مبنيةً على واجهة <code>[[PHP/Interfaces/Traversable|Traversable]]</code>، فسيُرمى خطأٌ من النوع <code>[[PHP/exceptions/TypeError|TypeError]]</code>. | ||
=== مثال 1: نوع معامل iterable === | === مثال 1: نوع معامل iterable === | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
سطر 26: | سطر 26: | ||
?> | ?> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
يمكن استخدام iterable كنوع للقيمة المُعادة للإشارة إلى أنَّ الدالة ستُعيد قيمةً تكراريةً، وسيظهر خطأ من نوع <code>[[PHP/ | يمكن استخدام iterable كنوع للقيمة المُعادة للإشارة إلى أنَّ الدالة ستُعيد قيمةً تكراريةً، وسيظهر خطأ من نوع <code>[[PHP/exceptions/TypeError|TypeError]]</code> إذا كانت القيمة المُعادة ليست مصفوفةً أو مبنيةً على <code>[[PHP/Interfaces/Traversable|Traversable]]</code>. | ||
=== المثال 3: نوع القيمة المُعادة هو تكراري === | === المثال 3: نوع القيمة المُعادة هو تكراري === | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
سطر 37: | سطر 37: | ||
?> | ?> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
الدوال التي عُرِّف نوع القيمة المُعادة فيها كتكرارية iterable يمكن أن تكون [[PHP/ | الدوال التي عُرِّف نوع القيمة المُعادة فيها كتكرارية iterable يمكن أن تكون [[PHP/generators|دوالًا مولِّدةً]] (generators). | ||
=== المثال 4: نوع القيمة المُعادة هو تكراري والدالة هي دالة مولِّدة === | === المثال 4: نوع القيمة المُعادة هو تكراري والدالة هي دالة مولِّدة === | ||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> |
المراجعة الحالية بتاريخ 03:50، 4 أبريل 2018
إن المتغير التكراري Iterable هو شبه نوع (نوع زائف، pseudo-type) عُرِّفَ في الإصدار 7.1 من PHP وهو يقبل أية مصفوفة أو كائن يستخدم واجهة Traversable
(أي Traversable interface)، كلا النوعين يمكن تكراره باستخدام حلقة foreach
ويمكن أن يُستخدم مع تعبير yield داخل دالة مولِّدة (generator).
استخدام Iterables
يمكن استخدام Iterable كنوع لمعاملات الدالة (function parameter type) للإشارة إلى الدالة تتطلب مجموعةً من القيم، لكن دون أن تهتم لصيغة القيمة لأنها ستُستخدَم مع حلقة foreach
، إذا لم تكن القيم مصفوفة أو مبنيةً على واجهة Traversable
، فسيُرمى خطأٌ من النوع TypeError
.
مثال 1: نوع معامل iterable
<?php
function foo(iterable $iterable) {
foreach ($iterable as $value) {
// ...
}
}
?>
يمكن للمعاملات المعرّفة كنوع البيانات iterable أن تستخدم القيمة NULL
أو مصفوفة (array) كقيمة افتراضية لها.
المثال 2: قيم افتراضية لمعامل iterable
<?php
function foo(iterable $iterable = []) {
// ...
}
?>
يمكن استخدام iterable كنوع للقيمة المُعادة للإشارة إلى أنَّ الدالة ستُعيد قيمةً تكراريةً، وسيظهر خطأ من نوع TypeError
إذا كانت القيمة المُعادة ليست مصفوفةً أو مبنيةً على Traversable
.
المثال 3: نوع القيمة المُعادة هو تكراري
<?php
function bar(): iterable {
return [1, 2, 3];
}
?>
الدوال التي عُرِّف نوع القيمة المُعادة فيها كتكرارية iterable يمكن أن تكون دوالًا مولِّدةً (generators).
المثال 4: نوع القيمة المُعادة هو تكراري والدالة هي دالة مولِّدة
<?php
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
?>
تباين النوع التكراري
يمكن توسيع (broaden) الدوال (methods) في الأصناف (classes) التي تستخدم مصفوفة أو قيمة مبنية على Traversable
كنوع معامل؛ أو تضييق مجال أنواع القيم المُعادة من تكراري (iterable) إلى مصفوفة أو Traversable
.
مثال 5: تباين النوع التكراري
<?php
interface Example {
public function method(array $array): iterable;
}
class ExampleImplementation implements Example {
public function method(iterable $iterable): array {
// تم توسيع المعاملات وتضييق نوع القيم المعادة
}
}
?>