php在include之前设置变量并在之后回显它

时间:2012-10-08 15:48:43

标签: php oop class include echo

我有一个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

这里的问题是什么?

2 个答案:

答案 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

它可以让您了解将来可以实施哪些可见性选项。