Php 在zend中复制功能
我一直在讨论Zend_视图以及构成该视图的各种类和接口。我试图在一个不以任何方式使用zend shape或form的项目中复制的一件事是: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-&
$this->view->variable = 'Hello world';
您可以在控制器中设置,然后执行以下操作:
echo $this->view->variable;
我的最终目标是:
$this->variable = new SomeClass
然后,在其他情况下,特别是在视图中,执行以下操作:
$this->variable->someMethod();
我的问题是:
- 我如何复制zend在不使用全局变量的情况下做类似的事情
- zend如何能够在不实例化或说出视图是什么的情况下执行$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>