数组在课堂上变得无用

时间:2009-12-17 15:44:02

标签: php

干草 我的班级

class language{

    function merge($filename = ''){ 
// the path is true
    return include_once ('language/'.$filename);
    }

}

确定这个lang测试

en.php

<?php

if (empty($lang) || !is_array($lang))
{
    $lang = array();
}

$lang = array_merge($lang, array(
    'test'      => 'Home Page'

));

?>

如果我添加

echo $lang['test']; 

在en.php中返回主页

但是我上课了

$l = new language;
$l->merge('en.php');

它不起作用 我查了一下

var_dump($lang);

它返回null

3 个答案:

答案 0 :(得分:1)

$lang变量不存在,因为您在合并函数的范围内包含en.php文件。来自PHP manual ...

  

当包含文件时,代码就是它   包含继承变量范围   包含的行   发生。任何可用的变量   调用文件中的那一行将是   在被调用文件中可用,来自   那一点。但是,所有   中定义的函数和类   包含文件具有全局范围。

因此,当$lang返回时,merge会丢失,除非您在该函数中将其声明为全局。

答案 1 :(得分:1)

如果你想从include_once电话中返回一些内容,你必须在文件中返回一些内容。请参阅Example 5

<?php // return.php
    $var = 'PHP';
    return $var;
?>

VS

<?php // noreturn.php
     $var = 'PHP';
?>

给出

<?php
    $foo = include 'return.php';
    echo $foo; // prints 'PHP'

    $bar = include 'noreturn.php';
    echo $bar; // prints 1
 ?>

答案 2 :(得分:0)

看我的灵魂

function __construct(){ 
$this->lang =  array();
}

class language{

    function merge($filename = ''){     
include_once ('language/'.$filename);

    return $this->lang = $lang;
    }

}

使用时 echo $ l-&gt; lang ['test'];