2017-06-11 17 views
0

我想創建一個班級。每次調用時它都會將$number的值增加1.當它達到7時,它應該返回一個消息「達到最大限制」。在哪裏定義$number以及如何在其中存儲新值。

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

你想'私有靜態$數= 0;',並把它稱爲你的方法裏面'自:: $ number'。 –

+0

我不確定。但我只是想每次調用時將$ number的值增加到1。 @NiettheDarkAbsol – PRM

+0

'$ this-> number'而不是'$ number ++' –

回答

2

我認爲這是你在找什麼根據您的描述聲明$number靜態和訪問:

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

你不會需要有$numberaddOne功能

有兩個備選方案

如果你不想保持$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是靜態的,那麼你可以使用self::

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

如何在靜態函數中使用$ this – PRM

+0

我更改了代碼並從方法名稱中刪除了靜態... –

+0

謝謝Akshay – PRM

0

請記住:

1)$ addOne()中的number參數方法優先於addClass()參數中的$ number成員。

2)句子$ number = $ number ++根本不影響變量$ number,因爲它是第一次被賦值的。

3)addOne()方法不需要是靜態的,除非打算在沒有類addClass的實例的情況下使用。

4)靜態變量只需要初始化一次,參考PHP手冊的詳細信息,所述靜態關鍵字:http://php.net/manual/en/language.oop5.static.php

5)不能引用靜態方法中的成員變量(例如,使用$此) ,因爲靜態方法具有「類範圍」,並且它們的目的是沒有任何這樣的類的實例。另一方面,非靜態方法需要類的實例,並且可以使用$ 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; 
}