如何使用面向对象的php迭代for循环

时间:2014-02-18 07:09:05

标签: php

如何使用oop

迭代循环
$myobj = new number_ series_ class(10);
$myobj->print_number();

,输出就是这个

输出 1-2-3-4-5-6-7-8-9-10

4 个答案:

答案 0 :(得分:1)

你的问题不明确,但你想要这个吗?

class number_series_class{
  private $index; 
  function number_series_class($num){
    $this->index = $num;
  }
  function print_number(){
    for ($i=1; $i <=$this->index; $i++) { 
      if($i!=$this->index) echo $i.'-';
      else echo $i;
    }
  }
}

$myobj = new number_series_class(10);
$myobj->print_number();

答案 1 :(得分:1)

试试这个

class number_series_class
{
    public $num;

     function __construct($number)
     {
       $this->num = $number;
     }

     function print_number()
     {
        $arr_temp = array();
        for($i=1; $i<=$this->num; $i++)
        {
            $arr_temp[] = $i;
        }
        echo implode("-", $arr_temp);
     }
}

$myobj = new number_series_class(10);
$myobj->print_number(); // output :  1-2-3-4-5-6-7-8-9-10

$myobj2 = new number_series_class(5);
$myobj2->print_number(); // output :  1-2-3-4-5

答案 2 :(得分:1)

<?php

class number_series_class {

public $var ;

function __construct($var) {

$this->var = $var ;

}

function print_number() {

    $j = '';
    for($i=1; $i<=$this->var; $i++) {
        if($i == 10) {
        $j .= $i;
        }
        else {
        $j .= $i."-";
        }
    }

    return $j ;
}
}

$ob = new number_series_class(10);
echo $ob->print_number();
?>

答案 3 :(得分:1)

你的问题不是特别清楚,但我想你可能想看一下PHP SPL中的Iterator接口:

http://www.php.net/manual/en/spl.iterators.php

有很多可供选择的产品提供略有不同的功能。最简单的就是调用Iterator,它允许你在对象上使用foreach

我打算稍微调整你的例子并说你有一个名为NumberSeries的类,如下所示:

class NumberSeries implements Iterator
{
    private $position = 0;
    private $array = array();

    public function __construct($max)
    {
        if ( !is_integer($max) || $max < 1 ) {
            throw new Exception('You must supply a positive integer!');
        }
        $this->array = range(1, $max);
        $this->position = 0;
    }

    function rewind() {
        $this->position = 0;
    }

    function current() {
        return $this->array[$this->position];
    }

    function key() {
        return $this->position;
    }

    function next() {
        ++$this->position;
    }

    function valid() {
        return isset($this->array[$this->position]);
    }

    function getNumberString() {
        return implode('-', $this->array);
    }
}

现在您可以像这样使用它:

$number_series = new NumberSeries(10);
foreach ( $number_series as $number ) {
    print $number;
}
print $number_series->getNumberString();

可能甚至更好而不是坚持面向对象是使用生成器。事实上,关于生成器的PHP文档可以为您提供所需的输出:

http://www.php.net/manual/en/language.generators.overview.php

正如您可以看到的那样,您可以像这样实现“xrange”生成器:

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;
        }
    }
}

然后像这样使用它:

$number_range = xrange(1, 10);
foreach ( $number_range as $number ) {
    print $number;
}

请注意,你要求的确切输出是有点棘手的,因为生成器对象(你从xrange返回的内容)不是数组,你不能只调用“implode(' - ',$ array)“就在他们身上。