2012-03-15 61 views
0

我想將學生對象存儲到數組。我嘗試使用下面的代碼。但它始終顯示陣列算作0Array對象在Php

class Student 
{ 
    $StudID = 0; 
    $Name = null; 
} 
class Students 
{ 
    static private $StudentData = array(); 
    static public function AddNewStudent($id,$name) 
    { 
    echo("AuctionID :".$AuctionID."<br/>"); 
     try{ 
      $objstd = new Student(); 
      $objstd->StuID = $id; 
      $objstd->Name = &name; 
      array_push($StudentData, $objstd); 
     } 
     catch (Exception $e) 
     { 
      echo("Error".$e->getMessage()); 
     } 
    } 
    static public function TotalStudent() 
    { 
     return count($StudentData); 
    } 
} 


Students::AddNewStudent(1,"name"); 
Students::AddNewStudent(2,"name2"); 
Students::AddNewStudent(3,"name3"); 
echo('Total auction running : '.Students::TotalStudent().'<br/>'); 

當我試圖表明陣列指望它顯示爲0。我想在存儲靜態列表 或再經過所有學生的數據時,曾經我想看到的名單,我得到從靜態類只有列表...

+0

你其實並不需要靜態這裏,你可能會尋找一個全局變量來代替。 – hakre 2012-03-15 19:53:56

+0

Thanx buddy你的幫助很棒。但實際上我試圖做一個靜態類,所以我可以使用網站的所有訪問者之間的相同數據。但我無法實現我的目標,這個靜態不知道發生了什麼。但是現在我想在所有訪問者之間做一些共同的數據,所以請告訴我一些如何實現相同的想法。 – Ronak 2012-03-16 11:11:55

+0

忘記靜態。靜態不好。會打破。努力工作。通常不起作用。壞主意靜態。會讓你受傷。 – hakre 2012-03-16 11:26:09

回答

4

因爲你正在創建一個新的數組,而不是引用你聲明的。使用self關鍵字來引用您的靜態對象屬性:

class Students 
{ 
    static private $StudentData = array(); 
    static public function AddNewStudent($id,$name) 
    { 
    echo("AuctionID :".$AuctionID."<br/>"); 
     try{ 
      $objstd = new Student(); 
      $objstd->StuID = $id; 
      $objstd->Name = &name; 
      array_push(self::$StudentData, $objstd); 
     } 
     catch (Exception $e) 
     { 
      echo("Error".$e->getMessage()); 
     } 
    } 
    static public function TotalStudent() 
    { 
     return count(self::$StudentData); 
    } 
} 
0

在PHP中你有self::前綴static variables,像這樣:

array_push(self::$StudentData, $objstd); 
// and in count: 

return count(self::$StudentData); 
0

爲什麼那麼複雜?你的Student班應該照顧它自己的,Students一樣。例如:

$students = new Students(); 
$students[] = new Student(1, "name"); 
$students[] = new Student(2, "name2"); 
$students[] = new Student(3, "name3"); 
printf('Total auction running : %d.', count($students)); 

輸出示例:

Total auction running : 3. 

的類:

class Student 
{ 
    /** 
    * @var int 
    */ 
    private $id; 
    /** 
    * @var string 
    */ 
    private $name; 
    /** 
    * @param int $id 
    * @param string $name 
    */ 
    public function __construct($id, $name) { 
     $this->id = $id; 
     $this->name = $name; 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

} 

class Students extends ArrayObject 
{ 
    public function __construct() 
    { 
     parent::__construct(array()); 
    } 
    public function offsetSet($index, $newval) { 
     if (!($newval instanceof Student)) { 
      throw new InvalidArgumentException('You can only add values of type Student.'); 
     } 
     parent::offsetSet($index, $newval); 
    } 
}