我怎样才能在这里更改$ number的值

时间:2017-06-11 15:47:20

标签: php

我想创建一个类。每次调用它时,它会将$number的值增加1.当它达到7时,它应该返回一条消息"达到最大限制"。在哪里定义$number以及如何在其中存储新值。

class addClass
{
    public $number = 0;
    public static function addOne($number)
    {
        $number = $number++;
        if ($number == 7) {
            return 'This is 7';
        }
    }
}`

3 个答案:

答案 0 :(得分:2)

我认为根据您的描述,您正在寻找这个:

class MyNumber {
    private static $number = 0;

    public static function addOne() {
        self::$number++;

        if (self::$number === 7) {
            return 'Maximum limit reached';
        }
        return self::$number;
    }
}

$result = MyNumber::addOne();
$result = MyNumber::addOne();
$result = MyNumber::addOne();
$result = MyNumber::addOne();
$result = MyNumber::addOne();
$result = MyNumber::addOne();
$result = MyNumber::addOne();

第一个结果是1

第二个结果是2

第三个结果是3

第四个结果是4

第五个结果是5

第六个结果是6

第七个结果是Maximum limit reached

答案 1 :(得分:1)

$number函数

中不需要addOne

有两种选择

如果您不想将$number保持为静态,则可以将addOne更改为非静态方法并使用$this->进行访问

class addClass
{
    public $number = 0;
    public function addOne()
    {
        $this->number = $this->number + 1;
        if ($this->number == 7) {
            return 'This is 7';
        }
    }
}

或者如果您希望addOne是静态的,那么您可以将$number声明为静态并使用self::

进行访问
class addClass
{
    private static $number = 0;
    public static function addOne()
    {
        self::number = self::number + 1;
        if (self::number == 7) {
            return 'This is 7';
        }
    }
}

答案 2 :(得分:0)

请记住:

1)addOne()方法中的$ number参数优先于addClass()参数中的$ number成员。

2)句子$ number = $ number ++完全没有影响变量$ number,因为它首先被分配。

3)addOne()方法不需要是静态的,除非打算在没有类addClass的实例的情况下使用。

4)静态变量只需初始化一次,有关static关键字的更多信息,请参阅php手册:http://php.net/manual/en/language.oop5.static.php

5)你不能在静态方法中引用成员变量(例如使用$ this),因为静态方法具有“类范围”,并且它们意味着在没有任何此类实例的情况下使用。另一方面,非静态方法需要类的实例,并且可以使用$ this引用类的成员。

6)以下是如何执行此操作的示例:

<?php
class addClass{ 
    public function addOne($number) {
        static $limit = 0;

        if (!isset($limit)) {
            $limit = $number;
        } 

        if ($limit+1 == 7) {
            return "Maximum limit reached";
        } else { 
            $limit = $number+1;
        }
    }
}

$a = new addClass();
for($i = 0; $i< 7; $i++) {
    echo $i+1, " => ", $a-> addOne($i), PHP_EOL;
}