2016-04-28 56 views
1

请温和我我只是一个新手,我只是自学。我有一个关于函数(showdata)中的变量的问题,它们是$ data,$ con,$ limit,$ adjacent,请参阅下面的代码。我已经在寻找解释,但我找不到任何东西。 3个变量data,con,limit在include php文件中,而数据变量在 之内,这是一个查询函数。你能告诉我这背后有什么解释吗?如果我删除了任何这种变量分页将不起作用。关于函数内多个变量的问题

<?php 
include('db.php'); 

if(isset($_REQUEST['actionfunction']) && $_REQUEST['actionfunction']!=''){ 
$actionfunction = $_REQUEST['actionfunction']; 

    call_user_func($actionfunction,$_REQUEST,$con,$limit,$adjacent); 
} 
function showData($data,$con,$limit,$adjacent){ 
    $page = $data['page']; 
    if($page==1){ 
    $start = 0; 
    } 
    else{ 
    $start = ($page-1)*$limit; 
    } 
    $sql = "select * from ajaxpage order by id asc"; 
    $rows = $con->query($sql); 
    $rows = $rows->num_rows; 

    $sql = "select * from ajaxpage order by id asc limit $start,$limit"; 

    $data = $con->query($sql); 
    $str='<table><tr class="head"><td>Id</td><td>Firstname</td><td>Lastname</td></tr>'; 
    if($data->num_rows>0){ 
    while($row = $data->fetch_array(MYSQLI_ASSOC)){ 
     $str.="<tr><td>".$row['id']."</td><td>".$row['firstname']."</td><td>".$row['lastname']."</td></tr>"; 
    } 
    }else{ 
    $str .= "<td colspan='5'>No Data Available</td>"; 
    } 
    $str.='</table>'; 

echo $str; 
pagination($limit,$adjacent,$rows,$page); 
} 
function pagination($limit,$adjacents,$rows,$page){ 
    $pagination=''; 
    if ($page == 0) $page = 1;     //if no page var is given, default to 1. 
    $prev = $page - 1;       //previous page is page - 1 
    $next = $page + 1;       //next page is page + 1 
    $prev_=''; 
    $first=''; 
    $lastpage = ceil($rows/$limit); 
    $next_=''; 
    $last=''; 
    if($lastpage > 1) 
    { 

     //previous button 
     if ($page > 1) 
      $prev_.= "<a class='page-numbers' href=\"?page=$prev\">previous</a>"; 
     else{ 
      //$pagination.= "<span class=\"disabled\">previous</span>"; 
      } 

     //pages 
     if ($lastpage < 5 + ($adjacents * 2)) //not enough pages to bother breaking it up 
     { 
     $first=''; 
      for ($counter = 1; $counter <= $lastpage; $counter++) 
      { 
       if ($counter == $page) 
        $pagination.= "<span class=\"current\">$counter</span>"; 
       else 
        $pagination.= "<a class='page-numbers' href=\"?page=$counter\">$counter</a>";     
      } 
      $last=''; 
     } 
     elseif($lastpage > 3 + ($adjacents * 2)) //enough pages to hide some 
     { 
      //close to beginning; only hide later pages 
      $first=''; 
      if($page < 1 + ($adjacents * 2))   
      { 
       for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) 
       { 
        if ($counter == $page) 
         $pagination.= "<span class=\"current\">$counter</span>"; 
        else 
         $pagination.= "<a class='page-numbers' href=\"?page=$counter\">$counter</a>";     
       } 
      $last.= "<a class='page-numbers' href=\"?page=$lastpage\">Last</a>";    
      } 

      //in middle; hide some front and some back 
      elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) 
      { 
       $first.= "<a class='page-numbers' href=\"?page=1\">First</a>"; 
      for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) 
       { 
        if ($counter == $page) 
         $pagination.= "<span class=\"current\">$counter</span>"; 
        else 
         $pagination.= "<a class='page-numbers' href=\"?page=$counter\">$counter</a>";     
       } 
       $last.= "<a class='page-numbers' href=\"?page=$lastpage\">Last</a>";    
      } 
      //close to end; only hide early pages 
      else 
      { 
       $first.= "<a class='page-numbers' href=\"?page=1\">First</a>"; 
       for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) 
       { 
        if ($counter == $page) 
         $pagination.= "<span class=\"current\">$counter</span>"; 
        else 
         $pagination.= "<a class='page-numbers' href=\"?page=$counter\">$counter</a>";     
       } 
       $last=''; 
      } 

      } 
     if ($page < $counter - 1) 
      $next_.= "<a class='page-numbers' href=\"?page=$next\">next</a>"; 
     else{ 
      //$pagination.= "<span class=\"disabled\">next</span>"; 
      } 
     $pagination = "<div class=\"pagination\">".$first.$prev_.$pagination.$next_.$last; 
     //next button 

     $pagination.= "</div>\n";  
    } 

    echo $pagination; 
} 
?> 
+0

这是因为'$ data','$ con','$ limit'和'$ adjacent'变量在函数的作用域中不可用,请使用'global'在'showData()'函数内使用它们。 –

+0

函数内部定义的$ data变量如何? – MarlZ15199

+0

@ MarlZ15199 $ data基于$ con,如果从函数参数中删除$ con,它也是未定义的 –

回答

-1

所以你的意思是$ data是在call_user_func()里面定义的?如果是这样,你需要的是funcition外声明数据,然后在函数中使用全局访问它:

$data=0; 
function somefunction() { 
    global $data; 
    $data=50; 
} 
// now call the function - $data has been updated at top level 
somefunction(); 
echo $data; // prints 50