Php 在zend中复制功能

Php 在zend中复制功能,php,zend-framework,Php,Zend Framework,我一直在讨论Zend_视图以及构成该视图的各种类和接口。我试图在一个不以任何方式使用zend shape或form的项目中复制的一件事是: $this->view->variable = 'Hello world'; 您可以在控制器中设置,然后执行以下操作: echo $this->view->variable; 我的最终目标是: $this->variable = new SomeClass 然后,在其他情况下,特别是在视图中,执行以下操作: $this-&

我一直在讨论Zend_视图以及构成该视图的各种类和接口。我试图在一个不以任何方式使用zend shape或form的项目中复制的一件事是:

$this->view->variable = 'Hello world';
您可以在控制器中设置,然后执行以下操作:

echo $this->view->variable;
我的最终目标是:

$this->variable = new SomeClass
然后,在其他情况下,特别是在视图中,执行以下操作:

$this->variable->someMethod();
我的问题是:

  • 我如何复制zend在不使用全局变量的情况下做类似的事情
  • zend如何能够在不实例化或说出视图是什么的情况下执行$this->view这样的操作
这将帮助我理解变量是如何传递的,对象是如何从逻辑传递到视图的,以及php是如何允许$this->view这样的东西在视图中工作的


注意:这不是特定于Zend的问题,“使用Zend”不是答案。我希望复制一个特定的功能。我的项目不以任何方式使用zend或与zend建立附属关系。

我不知道您为什么想要实现这一点,但作为一个超级简单的设置(它绝对不适合作为MVC框架的基础),您可以查看以下内容:

<?php
class Controller
{
    private $view = null;

    public function __construct()
    {
        $this->view = new View();
        $this->view->someVar = "foobar";
    }

    public function render()
    {
        include "view.php";
    }
}

class View
{

}

$controller = new Controller();
$controller->render();

其实很简单。当您使用
include
require
eval
等时,加载的代码被带入当前范围。所以如果你有一个模板文件

template.php

<span><?=$this->view->somevar?></span>
<?php
class Controller
{
    private $view;

    public function doSomething()
    {
        $this->view->somevar = 'Hello World';
        include 'template.php';
    }
}
<?php
require 'Controller.php';
$oC = new Controller();
$oC->doSomething();

更详细地说,如果Controller.php中的
$this->view
是您定义的一个类,而不是上面演示的
stdClass
的简单实例,并且它有一个函数
someMethod
,那么您可以调用
$this->view->someMethod()
与template.php完全相同。

这与zend无关。这只是正常的OOP。zend不能做任何PHP本身不能做的事情。zend只是php之上的一堆额外的东西,用php(或至少作为php模块)编写,让您的生活更轻松。但是,即使你没有zend“锤子”,仍然有常用的php石头可以敲打钉子。
<?php
require 'Controller.php';
$oC = new Controller();
$oC->doSomething();
<span>Hello World</span>