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



如何使用oop 迭代循环

$myobj = new number_ series_ class(10);
$myobj->print_number();

输出就是这个

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

您的问题不清楚,但您想要这个吗?

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();

尝试这个

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
<?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();
?>

您的问题不是特别清楚,但我认为您可能想看看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返回的对象)不是数组,并且不能对它们直接调用"内爆('-',$array)"。

最新更新