0

ここで小さな助けが必要です。関数内にグローバル変数を追加して外部で呼び出すことがいかに悪いかを読んでいましたが、変数を外部に取得する際に小さな問題がありました。グローバルは役に立ちましたが、ここでいくつかのファイルを処理しているので、安全を確保したいと思います

私のループはこれです

<?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の一部/は約150行の長さですが、これはメインのスニップです

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';
}


}

link var のほかに、 date 、 counter などの他のものもほとんどありませんが、それらはすべて何らかの条件に拘束されています。

やってみました

$link を返します。関数の最後で代わりにグローバルを使用しますが、未定義の変数エラーが発生します。

ここでの基本的な質問は、グローバルを使用せずに関数の外側で download_link 変数を取得する方法です。

4

3 に答える 3

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>';
}
于 2012-05-01T21:58:01.810 に答える
0

get_file_infosetを使用するだけなので、関数の外で$download_link単に return$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>';
} 
?>
于 2012-05-01T21:58:25.410 に答える
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';
  }
 }
于 2012-05-01T22:07:28.693 に答える