【问题标题】:How to use variables inside view without assigning them php如何在视图中使用变量而不分配它们php
【发布时间】:2013-02-11 20:38:19
【问题描述】:

我有一个问题。我为我的网站做了一些 mvc'ish 结构。 我希望能够在视图中使用我的变量而不分配它们。

让我通过一个例子来解释一下,这是我的控制器的一小部分:

class members extends controller{

public function _construct()
{
    parent::__construct();        

}
public function index()
{
    $test = 'test variable';
    $data['test2'] = 'test variable 2';

    view::setTemplate('header');
    view::setTemplate('homepage', $data);
    view::setTemplate('footer');
}
}

在我的视图类的 setTemplate() 函数中,我使用extract($data),然后包含视图文件。这样我就可以回显 $test2 并按预期将“测试变量 2”作为输出。

但是,有没有办法让视图“记住”第一个 $test 变量而无需将其添加到 setTemplate 函数?

【问题讨论】:

  • 我想这里要问的问题是:为什么?请记住,编写明确的、自记录的代码是可维护性的重中之重。
  • $this->test = 'test variable'; 所以它成为对象的一个​​属性。
  • extract() 是有史以来最糟糕的 PHP 函数之一。感谢您让需要调试代码的未来开发人员的生活陷入困境。
  • 为什么提取物这么差?
  • 因为它使调试成为一场噩梦——应该声明变量并将其公开给脚本。提取就像 - “嘿,相信我,有一些传入的变量......下面引用的那些可能或可能没有在我正在提取的废话数组中定义,但是......那是你的问题不是我的”

标签: php model-view-controller view


【解决方案1】:

免责声明:此代码未经测试

您可以使用变量变量在 setTemplate 方法中定义变量,并直接从那里包含视图。

<?php
function setTemplate($view, $data) {
  if(is_array($data)){
    foreach($data as $var => $val){
      $$var = $val;
    }
  }
  include('views/'.$view.'.php');
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2012-01-30
    • 2021-02-11
    • 2021-01-23
    • 1970-01-01
    • 2021-12-22
    • 2012-09-24
    相关资源
    最近更新 更多