0

我有一个管理类:

<?php
    Class Admin extends Controller{


        function __construct() {
            parent::__construct();
        }

            function getPage(){
                $num = 5;
                $this->view->load('test');
            }

    }
?>

扩展控制器类:

<?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

这里有什么问题?

4

2 回答 2

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));
于 2012-10-08T16:03:18.397 回答
0

您的 $num 范围已本地化为函数 getPage 并且永远不会将其作为对象的一部分。您可以修改该函数,创建一个函数 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

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

于 2012-10-08T16:15:21.033 回答