类实例变量在php中变为null

时间:2010-08-17 14:43:55

标签: php

我有这个PHP类,其目的是从数据库中获取一些配置数据并存储它以供以后使用:

class GSConfig {
  private $configurationData;
  private $repository;

  public function __construct($pRepository) {
    $this->repository = $pRepository;
    $this->configurationData = $this->InitializeConfiguration();
  }

  public function InitializeConfiguration() {
    $result = $this->repository->configLoadAll();
    if ( $result['data'] ) {
      $conf_array = $result['data'];
      foreach ( $conf_array as $row) {
        $code = strtolower($row ['code']);
        $value = strtolower($row ['value']);
        //if ($value == "true") $value = (bool)true;
        //if ($value == "false") $value = (bool)false;
        $this->configurationData[$code] = $value;
      }
    } else {
      $this->configurationData = null;
    }
    print_r($this->configurationData);
  }

  public function getConfigValue($key) {
    $key = strtolower($key);
    if ($this->configurationData != null) {
      if( isset($this->configurationData[$key])) {
        return $this->configurationData[$key];
      }
    } else if ($this->configurationData == null) {
      // If we reach this code, something went wrong
      // (TODO: throw Exception)
      echo "<p>Tick</p>";
    }
  }
}

InitializeConfiguration获取数据并将其作为数组存储在$ configurationData属性中。这正如预期的那样工作,如print_r函数的输出所示。 但是,在初始化之后,如果我尝试从$ configurationData读取任何值,我得到Tick。不知何故,变量在初始化后变为空。

输出类似于:

print_r output:
Array ( [show_cart] => true [order_mail] => order@shop.de [debug_mode] => true [branch_mode] => true [default_branch] => 1 [agb_file] => agb.txt [kat_order] => k_nr [show_rows] => 5 [product_order] => p_produktnr [cost_per_wu] => 0.66 [message_lang] => eng [free_shipping] => true [free_ship_amt] => 25 [special_price] => true [discounts] => true [cat_show_mode] => all [price_att] => ersatzpreis [mwst_att] => mehrwertsteuer [aktionsp_att] => aktionspreis [katalog_mode] => per_branch )
further output: 
Tick
Tick
...
Tick

任何人都知道为什么会这样?顺便说一句,我的PHP版本是5.3.1

3 个答案:

答案 0 :(得分:3)

您正在分配InitializeConfiguration()的返回值,但此函数中没有return语句(默认为“return null”)。

答案 1 :(得分:1)

问题是你在构造函数中将InitializeConfiguration的返回值赋给$this->configurationData,这将是null。

以下仍然是合理的建议:

强烈怀疑您使用错误的comparison operator

导致错误

永远不要在PHP中这样做:

if ($this->configurationData == null)

在针对nullfalse0进行测试时,请始终使用===检查每个变量的值和类型是否相同。只需使用==,就可以在转换前将一侧转换为另一侧的类型。

使用==运算符时,以下都是正确的:

null == 0;
array() == null;
null == false;
false == 0;

您也不应该在else if ($this->configurationData == null)中使用getConfigValue;使用简单的else,因为您的意图似乎是涵盖所有其他情况。

答案 2 :(得分:1)

我怀疑是因为在构造函数中,您将$ this-&gt; configurationData分配给InitializeConfiguration()的返回值。但它看起来不像InitializeConfiguration()返回任何东西。我认为解决这个问题的最简单方法是改变:
$ this-&gt; configurationData = $ this-&gt; InitializeConfiguration();

于:
$这 - &GT; InitializeConfiguration();