在PHP类中使用另一个数组初始化数组时出错


Error when initiating an array using another array in PHP class

我尝试在php类中使用另一个数组初始化数组。下面是代码:

 <?php class test
{
    var $nodeDomain = array
        ("gd88" =>"10.10.104.88", "gd02" =>"10.10.104.2");
    var $node = array
        ("x86-mysql" =>$nodeDomain['gd88'],
         "x86-hbase" =>$nodeDomain['gd02']);
    function show ()
    {
        print_r($node);
    }
}
?>

我得到了这个错误:解析错误:语法错误,在/root/workspace/php/array.php第6行

但是当我不使用类运行代码时,它工作得很好。我的意思是我运行以下代码:

var $nodeDomain = array
    ("gd88" =>"10.10.104.88", "gd02" =>"10.10.104.2");
var $node = array
    ("x86-mysql" =>$nodeDomain['gd88'],
     "x86-hbase" =>$nodeDomain['gd02']); 

我不太清楚php类和php脚本的区别。有人能解释一下吗?

谢谢。

在声明类成员时不能使用其他变量。尝试在构造函数中初始化它们。

<?php class test
{
    var $nodeDomain;
    var $node;
    public function __construct() {
       $this->nodeDomain = array("gd88" =>"10.10.104.88", "gd02" =>"10.10.104.2"); 
       $this->node = array("x86-mysql" =>$this->nodeDomain['gd88'],
         "x86-hbase" =>$this->nodeDomain['gd02']);
    }
    function show ()
    {
        print_r($node);
    }
}
?>

尝试将这些数组初始化放到测试类的构造函数中

不能在字段声明中引用变量。这个变量应该从哪里来呢?没有局部变量,也没有办法定位全局语句。(当然,超全局变量可以工作,但显然没有实现;-))相反,你可以这样做:

<?php class test
{
    var $nodeDomain = array
        ("gd88" =>"10.10.104.88", "gd02" =>"10.10.104.2");
    var $node;
    function __construct()
    {
      $this->node = array
        ("x86-mysql" =>$nodeDomain['gd88'],
         "x86-hbase" =>$nodeDomain['gd02']);
    }
    function show ()
    {
        print_r($node);
    }
}
?>

注意$nodeDomain必须以某种方式在构造函数的作用域中。它要么是一个全局变量,所以你需要一个global $nodeDomain语句在赋值之前,或者你可以传递$nodeDomain作为构造函数参数。