PHP OOP - 我试图输出一个已加载到另一个类的数组

时间:2011-03-17 22:30:16

标签: php

class_1.php

class class_1
{
    public function __construct()
    {
        require_once $_SERVER['DOCUMENT_ROOT'].'/array.php';
    }
}

class_2.php

class class_2
{
    static function output_array()
    {
        return $array_NUMBERS;
    }
}

array.php

$array_NUMBERS = array('1', '2', '3');

page.php文件

require_once $_SERVER['DOCUMENT_ROOT'].'/class_1.php';

require_once $_SERVER['DOCUMENT_ROOT'].'/class_2.php';

$obj = new class_1();

$numbers = class_2::output_array();

echo '<pre>';
print_r($numbers);

我在这里做错了什么?你不应该在课堂上使用“require_once”吗?

问题:它没有输出数组值。

3 个答案:

答案 0 :(得分:3)

您正在class_1::__construct()中创建一个局部变量,该变量会立即超出范围而永远丢失。

即使不是,在函数内声明的变量对于该函数是本地的,并且不能从其他函数访问。 class_2::output_array()没有变量$array_NUMBERS的概念。您需要阅读scope

要使这项工作成功,您必须使变量成为class_1的公共成员:

class class_1 {
    public $array_NUMBERS;
    function __construct() {
        require_once('array.php');
    }
}

class class_2 {
    public static function output_array() {
        $class1 = new class_1();
        return $class1->array_NUMBERS;
    }
}

<强> array.php:

$this->array_NUMBERS = array(...);

答案 1 :(得分:0)

以这种方式思考:include()和co。是为了在某个地方提取代码,基本上class_1.php中发生的事情就是你最终会得到相同的结果:

class class_1
{
    public function __construct()
    {
        $array_NUMBERS = array('1', '2', '3');
    }
}

因此,$array_NUMBERS是构造函数中的局部变量,这就是class_2无法看到它的原因。

答案 2 :(得分:0)

使用require_once代码变为:

class class_1
{
    public function __construct()
    {
        $array_NUMBERS = array('1', '2', '3');
    }
}

所以你正在做的是在函数中分配一个变量。因此,该变量的范围仅在该函数内。

有些丑陋的黑客可以将变量传递给你的其他类/函数,但整个方法似乎都是错误的(另见@Mike Lewis的回答)。

解决方案是在class_1中定义变量,将数组赋值给该变量,并将该类的实例作为参数传递给output_array函数。