如何在不使用全局php的情况下在函数外部获取$ var?

时间:2012-05-01 21:52:45

标签: php function global-variables

这里需要一些帮助。正在阅读在功能中添加全局变量并在外面调用它有多糟糕,但是在将变量放到外面时遇到小问题。全球帮助但我也想要安全,因为我在这里处理一些文件

我的循环就是这个

<?php 
require_once('functions.php'); 
?>

<?php 
foreach( $files as $key=> $file ){  

global $download_link;
get_file_info($key,$file);
?>

<span><a href="<?php echo $download_link ?>"><?php echo $file->name ?></a></span>

<?php } ?>
我的function.php /的

PART 大约有150行,但这是主要的snipp

function  get_file_info($key,$file){

global $download_link;
$access     = explode(",",$file->access);
$permission = in_array(1,$access);

if($permission){

$download_link = 'ok to download';
}else{
$download_link = 'canot download';
}


}

在链接var旁边我还有其他几个像日期,计数器等,但它们都受到某些条件的约束。

我试着做

返回$ link;在函数的最后使用全局但得到未定义的变量错误;

这里的基本问题是,如何在不使用全局的情况下将download_link var置于函数外部?

3 个答案:

答案 0 :(得分:0)

通过修改File类

,您可以更轻松地完成此操作

class File {

    # ...

    function get_url() {
        return in_array(1, explode(',', $this->access))
            ? $this->url  # return the file's url
            : "/path/to/subscribe" # return a default path for non-access
        ;
    }
}

您的HTML将按如下方式使用

<?php

foreach ($files as $file) {
    echo '<a href="'.$file->get_url().'">Download this '.$file->name.'</a>';
}

答案 1 :(得分:0)

由于您只是使用get_file_info来设置$download_link,为什么不返回$permission并在函数外定义$download_link

<?php 
function  get_file_info($key,$file){
    $access     = explode(",",$file->access);
    $permission = in_array(1,$access);
    return $permission;
}

foreach( $files as $key=> $file ){  
    $download_link = 'canot download';
    if(get_file_info($key,$file)) {
        download_link = 'ok to download';
    }
    echo '<span><a href="$download_link ">'. $file->name . '</a></span>';
} 
?>

答案 2 :(得分:0)

您可以像这样更改循环:

    <?php 
require_once('functions.php'); 
?>

<?php 
foreach( $files as $key=> $file ){  

   $download_link = get_file_info($key,$file);

?>

<span><a href="<?php echo $download_link ?>"><?php echo $file->name ?></a></span>

<?php } ?>

你的功能代码:

  function  get_file_info($key,$file){
 $access     = explode(",",$file->access);
 $permission = in_array(1,$access);

  if($permission){

return  'ok to download';
  }
  else {
return 'canot download';
  }
 }