generator은 데이터 구조가 아닙니다. 이는 Generator
클래스의 인스턴스이며, 실제로는 Iterator
의 특수한 종류입니다. 따라서, 당신이 직접 항목을 셀 수 없다 -
것은 계산하기 (정확합니다. Generator
클래스는 Iterator
인터페이스를 구현하기 때문에 그건 아닌 Countable
인터페이스 솔직히 말해서, 나는 그것을 구현할 수있는 방법을 상상할 수 없다) 네이티브 생성기를 사용하면 값을 반복 할 수 있습니다. 하지만 대부분의 경우 입니다. 수혜자가 몇 명인지 결정됩니다. 상식적으로는 할 수 없습니다. 매뉴얼에서 유명한 xrange()
샘플 : 당신이 볼 수 -as
function xrange($start, $limit, $step = 1) {
if ($start < $limit) {
if ($step <= 0) {
throw new LogicException('Step must be +ve');
}
for ($i = $start; $i <= $limit; $i += $step) {
yield $i;
}
} else {
if ($step >= 0) {
throw new LogicException('Step must be -ve');
}
for ($i = $start; $i >= $limit; $i += $step) {
yield $i;
}
}
}
, 그것은 국경을 정의해야합니다 당신입니다. 그리고 최종 집계는 그것에 달려 있습니다. 생성기를 통한 반복은 정의 된 정적 경계 (static-borders) 생성기에서만 의미가 있습니다 (예 : 항목 수가 항상 정적 인 경우 - 예 : 생성기 내에서 엄격하게 정의 된 경우). 다른 경우에는 매개 변수 종속 결과가 나타납니다.
function getCount(Generator $functor)
{
$count = 0;
foreach($functor as $value)
{
$count++;
}
return $count;
}
- 그리고 사용 : xrange()
를 들어 당신이 볼 수 -as
var_dump(getCount(xrange(1, 100, 10)));//10
var_dump(getCount(xrange(1, 100, 1)));//100
변경됩니다 "계산". 심지어 발전기가 유한 한 것은 아닙니다. 그것은 무한한 값을 산출 할 수 있습니다 (예를 들어, 테두리는 외부 루프에서 정의됩니다). 이것은 "카운팅"을 거의 감지 할 수없는 또 하나의 이유입니다. 당신이 그것을해야 할 경우
나는 당신이 무슨 말을하고 있는지 전혀 모른다. – AmazingDreams
이 글을 게시하는 순간 나는 게시물에 언급 된 count() 만 시도했지만 작동하지 않았습니다. 내가 가진 특정 프로그래밍 문제이기 때문에 나는 또한 주제에 대해서도 다루고있다. 코드 예제를 제공하는 것에 관해서는, 현재의 사용법을 보여주기 위해 할 수 있다고 생각하지만,이 게시물을 클릭 한 사람들이 PHP의 사용량을 알 수있을 것이라고 기대하고있었습니다. 커버 된 것으로, 나는 어떤 규칙도 어기지 못함을 깨닫지 만, 그렇게한다면 나는 정말로 미안하다. – JLT93