我有一个Admin类:
<?php
Class Admin extends Controller{
function __construct() {
parent::__construct();
}
function getPage(){
$num = 5;
$this->view->load('test');
}
}
?>
扩展的Controller类:
<?php
class Controller{
function __construct() {
$this->view = new View();
}
}
?>
查看课程:
<?php
Class View{
function __construct() {
}
public function load($file){
include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php');
}
}
?>
所以在test.php
文件中我尝试echo $num;
,但我什么都没得到......
如果我尝试
$num = 5;
include($_SERVER["DOCUMENT_ROOT"].'/main/views/test.php');
它回应5
这里的问题是什么?
答案 0 :(得分:1)
您可以将关联数组作为可选参数传递给函数load
,然后使用extract
该数组在范围内包含变量。
public function load($file, $data = array()){
extract($data);
include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php');
}
或者
public function load($file, $data = array()){
foreach ($data as $key => $val)
${$key} = $val;
include($_SERVER["DOCUMENT_ROOT"].'/main/views/'.$file.'.php');
}
正如我个人的经验所示,第二种方法稍快一些。
在功能getPage()
中,您需要做的只是:
$this->view->load('test', array('num' => 5));
答案 1 :(得分:0)
您的$ num范围已本地化为函数getPage,并且永远不会将其作为对象的peice。你可以修改函数创建一个函数getPage()来返回$ num并从test.php中回显它,或者你可以这样重写代码:
<?php
Class Admin extends Controller{
function __construct() {
parent::__construct();
}
public $num = 5;
function getPage(){
$this->load->view('test');
}
}
class Controller{
function __construct() {
$this->view = new View();
}
}
Class View{
function __construct() {
}
public function load($file){
echo "I shall skip the file include";
}
}
$test = new Admin();
echo $test->num;
?>
您可能需要查看此内容:http://www.php.net/manual/en/language.oop5.visibility.php
它可以让您了解将来可以实施哪些可见性选项。