如何使用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)"。