2015-02-09 78 views
0

我有這個類:PHP類方法獲取和設置

<?php 
    class Test { 

     private $_ID; 
     private $_NAME; 
     private $_AGE; 

     public function setID() { $this->_ID++; } 
     public function getID() { return $this->_ID; } 

     public function setNAME($element) { $this->_NAME = $element; } 
     public function getNAME() { return $this->_NAME; } 

     public function setAGE($element) { $this->_AGE = $element; } 
     public function getAGE() { return $this->_AGE; } 

     public function addUser($name, $age) { 
      Test::setID(); 
      Test::setNAME($name); 
      Test::setAGE($age); 

      echo "OK"; 
     } 
    } 
?> 

我想創建該類的對象,並與功能ADDUSER這樣分配數據:

$test = new Test(); 
$test:: addUser("Peter", "12"); but I have errors. 

我有這個錯誤:

Strict Standards: Non-static method Test::addUser() should not be called statically in /var/www/public/testManu.php on line 13

Strict Standards: Non-static method Test::setID() should not be called statically in /var/www/public/class/Test.php on line 18

Fatal error: Using $this when not in object context in /var/www/public/class/Test.php on line 8

我有變量範圍的問題。有人可以告訴我這是我的問題嗎?

+1

你可以告訴更多的什麼問題呢? – Seti 2015-02-09 11:09:09

+0

「我對可變範圍有問題」太含糊 - 你看到了什麼症狀?錯誤?意外的行爲?任何錯誤消息? – 2015-02-09 11:10:36

+0

什麼是Teprohelper? – fortune 2015-02-09 11:11:33

回答

2

改變這一點:

... 
public function addUser($name, $age) { 
     $this->setID(); 
     $this->setNAME($name); 
     $this->setAGE($age); 

     echo "OK"; 
    } 
... 

調用像Classname::function()只適用於靜態方法。你有一個專用實例,需要使用構造$this->function()來解決。

而且這樣的:

... 
    $test->addUser("Peter", "12"); but I have errors. 
+1

他的班級名爲'Test',他使用的另一個班級是'Teprohelper'。所以這個用法很可能(你不知道'Teprohelper'是什麼,但是它的名字不是'Test'類,因此不能改成'$ this'; – Seti 2015-02-09 11:12:18

+0

我已經糾正了我的錯誤描述,現在是正確的 – Despotars 2015-02-09 11:13:48

+0

@ Seti只是假設'Teprohelper'是未命中的類型,它應該與您調用的方法相同的類/對象 - 定義在類'Test' – 2015-02-09 11:13:57

2
$test = new Test(); 
$test -> addUser("Peter", "12"); #now no errors 
+0

但仍然。你能告訴我們你想要達到什麼嗎?你在這裏使用兩個班。一個'測試'和一個'Teprohelper' ... – Seti 2015-02-09 11:14:19

+0

IGNORE TEPSOHELPER它是一個TYPO! – 2015-02-09 11:15:07

1

這應該爲你工作:

<?php 
    class Test { 

     private static $_ID = 1; 
     private static $_NAME; 
     private static $_AGE; 

     public static function setID() { self::$_ID++; } 
     public static function getID() { return self::$_ID; } 

     public static function setNAME($element) { self::$_NAME = $element; } 
     public static function getNAME() { return self::$_NAME; } 

     public static function setAGE($element) { self::$_AGE = $element; } 
     public static function getAGE() { return self::$_AGE; } 

     public static function addUser($name, $age) { 
      self::setID(); 
      self::setNAME($name); 
      self::setAGE($age); 

      echo "OK"; 
     } 
    } 

$test = new Test(); /*You don't need to instantiate the class 
         because you're calling a static function*/ 
$test:: addUser("Peter", "12"); but I have errors. 
?> 
+0

我認爲它不是他想要實現的...現在他有一個類可以存儲一個用戶....而那就是所有... – Seti 2015-02-09 11:17:11

+0

應該可以工作,但問題是他是否真的需要一個非靜態方法 - 實例或實例。當他實例化對象時,我認爲它不應該是靜態的。 – 2015-02-09 11:17:49

+0

我有這個錯誤:解析錯誤:語法錯誤,意想不到的'++'(T_INC)在/var/www/public/class/Test.php在線8 – Despotars 2015-02-09 11:27:53