我对通过 PHP OO 的页面使用参数感到非常困惑。我正在关注有关创建框架的教程(就像 Zend 框架一样);但是,我不明白什么时候发生这种情况:
例如,索引:
// File: sourcefiles/index.php
define('DS', DIRECTORY_SEPARATOR);
define('ROOT', realpath(dirname(__FILE__)).DS );
define ('APP_PATH',(ROOT.'aplicacion'));
require_once APP_PATH. DS.'Config.php';
require_once APP_PATH. DS.'Request.php';
require_once APP_PATH. DS.'BootStrap.php';
require_once APP_PATH. DS.'Controller.php';
require_once APP_PATH. DS.'View.php';
try
{
BootStrap::run(new Request());
我有:
// File: sourcefiles/controladores/IndexController.php
<?php
class IndexController extends Controller
{
public function __construct() {
parent::__construct();
}
public function indexAction()
{
$this->view->titulo='Homepage';
$this->view->contenido='Whatever';
$this->view->renderizar('index');
}
}
?>
和这个:
// file : sourcefiles/aplicacion/View.php
<?php
class View
{
private $controlador;
private $layoutparams;
public function __construct(Request $peticion)
{
$this->controlador = $peticion->getControlador();
}
public function renderizar($vista,$item=false)
{
$rutaview = ROOT.'vistas'.DS.$this->controlador.DS.$vista.'.phtml';
if (is_readable($rutaview))
{
include_once $rutaview;
}
else
{
throw new Exception('Error de vista');
}
}
}
?>
这是视图:
// file : sourcefiles/vistas/index/index.phtml
<h1>
Vista index..
<?php
echo $this->titulo;
echo $this->contenido;
?>
</h1>
现在我的问题是:
IndexController 可以如何使用该行?$this->view->titulo = blabla;
视图类没有“titulo”属性;但是,我可以做到。但这是一件奇怪的事情,如果我在调用 之后这样做$this->view->renderizar('index')
,我会收到错误消息。
index.phtml 文件是如何知道这一点的?echo $this->titulo;
因为,没有调用 include 或 require,这让我感到困惑。
当我在文件中执行 require 或 include 调用时,所需或包含的文件知道调用者的变量吗?
如果有人可以向我解释这些,我将不胜感激:D 或将我链接到有关此的官方信息的讨论,或者如何称呼它?