2012-03-15 4 views
0

Я хочу сохранить объект Student для массива. и я пытаюсь сделать это с помощью кода ниже. но это всегда показывает подсчитывать массив в 0Array Object In 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

+0

Thanx приятель, ваша помощь замечательная. но на самом деле я пытаюсь создать статический класс, поэтому я могу использовать одни и те же данные между всеми посетителями сайта. но я не могу достичь своей цели с помощью этой статики, не знаю, что происходит. Но теперь я хочу сделать что-то общее для всех посетителей, так что PLZ дать мне некоторое представление о том, как добиться того же. – Ronak

+0

Забудьте о статике. Статический нехорошо. Сломает. Сделайте вещи тяжело. Часто не работает. Плохая идея статическая. Будет больно. – hakre

ответ

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 вы должны префикс static variables с self::, как это:

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); 
    } 
}