在没有直接插入的情况下,数据不会在多个 class 方法之间发送
Data not being sent between multiple class methods without direct insertion
我有一个class我正在开发它的方法相互调用并发送数据,
Class Template(){
public variables = array('text' => 'test');
public function loadTemplate( $filename ){
require PROJECT_PATH .DS. $filename;
}
public function render(){
extract($this->variables);
$this->loadTemplate('index.php');
}
}
index.php 现在显示提取的变量
<html>
<body>
<?php
var_dump($text);
?>
</html>
但是现在不显示NULL值了!!但是当我直接要求它时,它起作用了,我做错了什么?
提前致谢。
简单的答案是您需要将 extract()
调用移动到实际发出 require
调用的函数中。
较长的答案是 extract()
将变量提取到当前函数的范围内。当您调用新函数以实际需要模板时,它有一个新的作用域。事实上,您只能访问 $filename
变量。
另外一点,请 添加 EXTR_SKIP
作为 extract()
的第二个参数,这样它就不会覆盖文件名(因此变成一个安全漏洞):
function loadTemplate($filename) {
extract($this->variables, EXTR_SKIP);
require PROJECT_PATH .DS. $filename;
}
或者根本不将其存储在变量中:
function render() {
extract($this->variables);
require $this->findTemplatePath("index.php");
}
function findTemplatePath($template) {
return PROJECT_PATH .DS. $filename;
}
我有一个class我正在开发它的方法相互调用并发送数据,
Class Template(){
public variables = array('text' => 'test');
public function loadTemplate( $filename ){
require PROJECT_PATH .DS. $filename;
}
public function render(){
extract($this->variables);
$this->loadTemplate('index.php');
}
}
index.php 现在显示提取的变量
<html>
<body>
<?php
var_dump($text);
?>
</html>
但是现在不显示NULL值了!!但是当我直接要求它时,它起作用了,我做错了什么?
提前致谢。
简单的答案是您需要将 extract()
调用移动到实际发出 require
调用的函数中。
较长的答案是 extract()
将变量提取到当前函数的范围内。当您调用新函数以实际需要模板时,它有一个新的作用域。事实上,您只能访问 $filename
变量。
另外一点,请 添加 EXTR_SKIP
作为 extract()
的第二个参数,这样它就不会覆盖文件名(因此变成一个安全漏洞):
function loadTemplate($filename) {
extract($this->variables, EXTR_SKIP);
require PROJECT_PATH .DS. $filename;
}
或者根本不将其存储在变量中:
function render() {
extract($this->variables);
require $this->findTemplatePath("index.php");
}
function findTemplatePath($template) {
return PROJECT_PATH .DS. $filename;
}