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”吗?
问题:它没有输出数组值。
答案 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
函数。