干草 我的班级
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
答案 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'];