关于php和范围的澄清

关于php和范围的澄清,php,scope,Php,Scope,main.controller.php: final class MainController extends Controller { public function is_locked() { $lock = new View('lock'); Res::render($lock); } } view.class.php: final class View { private $data; public funct

main.controller.php:

final class MainController extends Controller   {

    public function is_locked() {
        $lock = new View('lock');
        Res::render($lock);
    }
}
view.class.php:

final class View {

    private $data;


    public function get_title() {
        return isset($this->title) ? $this->title : DEFAULT_TITLE;
    }
    public function get_layout() {
        return isset($this->layout) ? $this->layout : 'base';
    }
    public function get_layout_path() {
        return SITE_PATH .'app/views/layouts/'. $this->get_layout() .'.layout.php';
    }
    public function get_path() {
        return SITE_PATH .'app/views/' .$this->name .'.view.php';
    }


    public function print_title() {
        echo $this->get_title;
    }

    public function __construct($name) {
        $this->data = array();
        $this->data['name'] = $name;
    }
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }

        $trace = debug_backtrace();
        trigger_error('Undefined property via __get(): '. $name .' in '. $trace[0]['file'] .' on line' . $trace[0]['line'], E_USER_NOTICE);
        return null;
    }
    public function __isset($name) {
        return isset($this->data[$name]);
    }
    public function __unset($name) {
        unset($this->data[$name]);
    }
}
以下是我在响应类上的呈现方法:

public static function render($view) {
  include_once SITE_PATH .'app/views/layouts/root.layout.php');
}
从我的一个控制器调用。。。 param$view是一个简单的视图对象

这是我的root.layout.php:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title><?php $view->print_title(); ?></title>
</head>

<body>
 root layout
</body>
</html>

根布局
似乎我无法从包含的布局文件中访问$view对象,这可能是一个愚蠢的问题,但现在我真的不明白为什么不应该工作


有人能解释一下php在这种情况下是如何工作的吗?我做错了什么?

使用
include
而不是
include\u once
,因为可以多次调用您的方法,并且它只在第一次(“一次”)起作用

PHP文档介绍了(还包括一次):

包含文件时,它包含的代码将继承变量 包含发生的行的范围。任何可用的变量 在该行中,调用文件将在被调用的 文件,从那一点开始。但是,所有函数和类 包含文件中定义的具有全局范围

因此,所有操作都应该使用传递的
$view
变量


还有一个(页面上的第一个)解释了在包含之前行中可用的任何变量都将在包含的文件中可用

当你不能
render()
时,你真的传递了什么吗。请注意,您也有语法错误。问题用完整代码编辑。。