我在根文件夹中有3个文件
main.php:
require_once 'function.php';
load_layout($template="header"); // load header.php -- there are echo $session->user_id; code in header.php that not work
echo $session->user_id; //work
function.php:
require_once 'ses.php';
function load_layout($template="") {
include ('header.php');
}
ses.php:
class Session {
public $user_id = "1";
public function userinfoss() {
return $this->user_id;
}
}
$session = new Session();
和header.php
require_once 'function.php';
echo $session->user_id; //not work in main.php loading but work if header.php run seprate
如果echo $session->user_id;
分开运行,则{p> header.php
工作但main.php
中包含echo $session->user_id;
并main.php
无效{/ 1}}
如何更改我的代码以在包含的文件中显示echo $session->user_id;
?
更新
我在ses.php中创建了一个函数:
class Session {
public $user_id = "1";
public function userinfoss() {
return $this->user_id;
}
}
$session = new Session();
function testfun() {
global $session;
echo $session->user_id;
}
所以在header.php中调用此函数并运行
但为什么$session->user_id
不起作用?
答案 0 :(得分:1)
当您致电main.php
时,第一个require_once 'function.php';
将有效,并会调用require_once 'ses.php';
,这将使$session
变量在function.php
中可用,在main.php
;
但是,当header.php
被包含在内时,其中包含的require_once 'function.php';
将不会执行任何操作(因为已包含function.php
),并且$session
变量不会可在header.php
中找到。
理想情况下,您应该重新组织代码,这样您就不会有2个依赖于同一文件(main.php
)的文件(header.php
和function.php
)。
所以,也许你可以替换:
require_once 'function.php'
load_layout($template="header");
在main.php
中:
require_once 'header.php';
如果无法重新组织代码,则可以使用$session
的全局变量。添加:
global $session;
前
$session = new Session();
ses.php
中的。
您还需要添加
global $session;
前
echo $session->user_id;
header.php
中的