初始化静态数组以在其他类的其他静态变量中使用它

时间:2011-08-18 01:37:58

标签: php arrays function variables static

class Assignation {
  private $VVal_1 = 1;
  private $VNam_1 = "One";
  //....Multiple Items
  private $VVal_2000 = 2000; //For Example
  private $VNam_2000 = "Two Thousands"; //For Example
  private static $Hash = array(); //How to initialize???

  private static function Assigning(){
  //This function for to assign the array elements (initialize)
    global $Hash;
    $this->Hash = array(); //to empty Hash variable and not add more data than it should.
    $this->Hash[$this->VVal_1] = $this->VNam_1;
    //....Multiple Items
    $this->Hash[$this->VVal_2000] = $this->VNam_2000;
  }

  public static function GetVal($Nam) {
    $this->Assigning();  //or use self::Assigning(); //I want to avoid this call
    if (array_search($Nam, $this->Hash))
      return array_search($Nam, $this->Hash);
    return -1;//error
  }

  public static function GetNam($Val) {
    $this->Assigning();  //or use self::Assigning(); //I want to avoid this call
    if (array_key_exists($Val, $this->Hash))
      return $this->Hash[$Val];
    return "Error";
  }
}

Class Testing {
  static $OtherVal = Assignation::GetVal("BLABLA"); //for example
  static $OtherNam = Assignation::GetNam(20); //for example
  //Other functions...
}

嗨,你可以看到我的脚本或代码php ... 我需要初始化 Hash 数组,这有静态字,因为我需要在其他静态函数中使用它。而这个“其他功能”需要将它用于其他静态变量...... 我需要知道如何以正确的方式实施它。

谢谢chep .-。


<?php
echo "pre-Class Assignation<br/>";
class Assignation {
  private $VVal_1 = 1;
  private $VNam_1 = "One";
  private $VVal_2K = 2000;
  private $VNam_2K = "Two Thousands";
  private static $Hash = array();

  private static function Assigning(){
    if(!empty(self::$Hash)) return;
    self::$Hash[$this->VVal_1] = $this->VNam_1;
    self::$Hash[$this->VVal_2K] = $this->VNam_2K;
  }

  public static function GetVal($Nam) {
    self::Assigning();
    if (array_search($Nam, self::$Hash)) return array_search($Nam, self::$Hash);
    return -1;//error
  }

  public static function GetNam($Val) {
    self::Assigning();
    if (array_key_exists($Val, self::$Hash)) return self::$Hash[$Val];
    return "Error";
  }
}
echo "post-Class Testing<br/>";
echo Assignation::GetVal("BLABLA");
echo "post-Class Mid<br/>";
echo Assignation::GetNam(20);
echo "post-Class Sample<br/>";
//Testing::MyPrint();
?>

这段代码没有运行,有人帮我测试代码...... 结果:

pre-Class Assignation
post-Class Assignation
post-Class Testing

意思是: “echo Assignation :: GetVal(”BLABLA“);” 有错误......

1 个答案:

答案 0 :(得分:1)

Assigning()中,尝试使用self::$Hash而不是$this->Hash,然后移除global $Hash。同样适用于您的评论建议调用Assigning()self::Assigning()

$this引用当前对象,因此在类内部时必须对self::使用所有静态函数和成员数据。

此外,如果这是您的真实代码而不仅仅是示例,您可能需要检查是否已经完成初始化,否则您将在每次调用GetVal()GetNam()时执行此操作。您可以在if(!empty(self::$Hash)) return

的开头添加Assigning()之类的内容

修改

private static function Assigning() {
    if(!empty(self::$Hash)) return; // already populated
    self::$Hash = array();
    self::$Hash[$this->VVal_1] = $this->VNam_1;
    //....Multiple Items
    self::$Hash[$this->VVal_2K] = $this->VNam_2K;
}