gpt4 book ai didi

PHP定义包含文件的范围

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:24 24 4
gpt4 key购买 nike

我有很多 PHP View 文件,我过去常常使用简单的 include 语句将它们包含在我的 Controller 中。他们都使用在 View 类中声明的方法,就像 $view->method();然而,我最近决定,如果包含也由这个 View 类完成会更好。但是,这会更改包含文件的范围,因此不再定义 $view。这是一个代码示例:

in someViewFile.php (BOTH siuations)
<html>
<head><title><?php echo $view->getAppTitle(); ?></title>
etc.
OLD SITUATION in controller:
$view = new view;
include('someViewFile.php'); //$view is defined in someViewFile.php
NEW SITUATION in controller:
$view = new view;
$view->show('someViewFile'); //$view is not defined in someViewFile.php

现在我在 View 类中使用它解决了这个问题:

public function show($file){
$view = &$this;
include($file.".php");
}

有没有声明包含文件的范围或者这是解决问题的最佳方法?

这些例子是粗略的简化。

最佳答案

这是一个简化但实用的 View 类,我经常看到它并经常使用它。
正如您在下面的代码中看到的:您使用模板文件的文件名实例化了一个 View 。
客户端代码(可能是 Controller )可以将数据发送到 View 中。此数据可以是您需要的任何类型,甚至是其他 View 。
嵌套 View 将在渲染父 View 时自动渲染。
希望这会有所帮助。

// simple view class
class View {
protected $filename;
protected $data;

function __construct( $filename ) {
$this->filename = $filename;
}

function escape( $str ) {
return htmlspecialchars( $str ); //for example
}

function __get( $name ) {
if( isset( $this->data[$name] ) ) {
return $this->data[$name];
}
return false;
}

function __set( $name, $value ) {
$this->data[$name] = $value;
}

function render( $print = false ) {
ob_start();
include( $this->filename );
$rendered = ob_get_clean();
if( $print ) {
echo $rendered;
return;
}
return $rendered;
}

function __toString() {
return $this->render();
}
}

用法

// usage
$view = new View( 'template.phtml' );
$view->title = 'My Title';
$view->text = 'Some text';

$nav = new View( 'nav.phtml' );
$nav->links = array( 'http://www.google.com' => 'Google', 'http://www.yahoo.com' => 'Yahoo' );

$view->nav = $nav;

echo $view;

模板

//template.phtml
<html>
<head>
<title><?php echo $this->title ?></title>
</head>
<body>
<?php echo $this->nav ?>
<?php echo $this->escape( $this->text ) ?>
</body>
</html>

//nav.phtml
<?php foreach( $this->links as $url => $link ): ?>
<a href="<?php echo $url ?>"><?php echo $link ?></a>
<?php endforeach ?>

关于PHP定义包含文件的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com