Php $variable=$variable=$variable=array()

Php $variable=$variable=$variable=array(),php,arrays,variables,datatables,Php,Arrays,Variables,Datatables,我正在服务器端处理数据表。我有一个我不明白的例子 这部分到底在做什么,为什么在实际变量之前调用其中的一些 $params = $columns = $totalRecords = $data = array(); 还是这个 $where_condition = $sqlTot = $sqlRec = ""; 我搜索了答案,但我会找到像$$a这样的变量 <?php require_once("../connections/mysqli_connect.php");

我正在服务器端处理数据表。我有一个我不明白的例子

这部分到底在做什么,为什么在实际变量之前调用其中的一些

$params = $columns = $totalRecords = $data = array(); 
还是这个

$where_condition = $sqlTot = $sqlRec = "";
我搜索了答案,但我会找到像$$a这样的变量

<?php

    require_once("../connections/mysqli_connect.php");

    $params = $columns = $totalRecords = $data = array();

    $params = $_REQUEST;

    $columns = array(
        0 => 'post_id',
        1 => 'post_title', 
        2 => 'post_desc'
    );

    $where_condition = $sqlTot = $sqlRec = "";

    if( !empty($params['search']['value']) ) {
        $where_condition .= " WHERE ";
        $where_condition .= " ( post_title LIKE '%".$params['search']['value']."%' ";    
        $where_condition .= " OR post_desc LIKE '%".$params['search']['value']."%' )";
    }

    $sql_query = " SELECT * FROM li_ajax_post_load ";
    $sqlTot .= $sql_query;
    $sqlRec .= $sql_query;

    if(isset($where_condition) && $where_condition != '') {

        $sqlTot .= $where_condition;
        $sqlRec .= $where_condition;
    }

    $sqlRec .=  " ORDER BY ". $columns[$params['order'][0]['column']]."   ".$params['order'][0]['dir']."  LIMIT ".$params['start']." ,".$params['length']." ";

    $queryTot = mysqli_query($con, $sqlTot) or die("Database Error:". mysqli_error($con));

    $totalRecords = mysqli_num_rows($queryTot);

    $queryRecords = mysqli_query($con, $sqlRec) or die("Error to Get the Post details.");

    while( $row = mysqli_fetch_row($queryRecords) ) { 
        $data[] = $row;
    }   

    $json_data = array(
        "draw"            => intval( $params['draw'] ),   
        "recordsTotal"    => intval( $totalRecords ),  
        "recordsFiltered" => intval($totalRecords),
        "data"            => $data
    );

    echo json_encode($json_data);

这意味着所有变量都被分配到右侧相同的值。这与:

$data = array();
$totalRecords = $data; // which is an empty array (array())
$columns = $totalRecords; // which is an empty array (array())
$params = $columns; // which is an empty array (array())

文件说:

基本赋值运算符为“=”。你的第一个倾向可能是认为这是“等于”。不要。这实际上意味着将左侧操作数设置为右侧表达式的值(即“设置为”)

下表按优先级顺序列出了运算符,最高优先级的运算符位于顶部。同一行上的运算符具有相同的优先级,在这种情况下,关联性决定分组

右=+=-=*=***=/=.=%=&=|=^==赋值

这意味着,当使用
=
时,表达式从右向左求值。 所以这:

$params = $columns = $totalRecords = $data = array(); 

$data = array();
$totalRecords = $data;
$columns = $totalRecords;
$params = $columns;

这称为多重分配或分配

您可以在PHP中执行此操作,因为有两件事:

  • PHP按值赋值
  • 赋值是具有值(赋值)的表达式
  • 因此对于表达式
    $params=$columns=$totalRecords=$data=array()在您的示例中:

    $one = $two = $three = new StdClass;
    $three->newProperty = 'value';
    echo $one->newProperty;  // echoes value
    
    • $data=array()
      $data
      赋值(空数组),但它也是一个计算结果为空数组的表达式

    • $totalRecords=$data=array()
      将表达式
      $data=array()
      的值赋给
      $totalRecords
      ,但它也是一个计算结果为空数组的表达式

    等等

    需要注意的是,由于所有赋值都是按值进行的,因此每个赋值变量都有自己的值,并且赋值后没有一个变量内在地相互关联,例如,向其中一个变量附加一个值,如
    $data[]=“something”
    $totalRecords
    或分配在一起的任何其他变量不起作用

    作为将来的参考,它以这种方式工作,但如果指定的值是对象,效果会有所不同。每个变量都保存同一对象标识符的副本,因此所有变量都引用同一对象,例如:

    $one = $two = $three = new StdClass;
    $three->newProperty = 'value';
    echo $one->newProperty;  // echoes value
    

    您是专门询问
    =
    还是
    […]=$something=$something\u other
    ?变量刚刚初始化。这是速记。在$params行中,它们都被设置为空数组。在$where_条件行中,它们都被设置为noting。对于这个问题,代码检查是一个更好的地方。。。哦,等等,它已经存在了:PS:这样做没什么错,见鬼,我甚至经常在初始化多个调试变量为空时这样做。最好是用一行代码把它们全部打出来,而不是用一块十块左右的代码(lol:)那么YMMV。谢谢大家的帮助和codereview链接。你们对我说得很清楚。谢谢虽然我不能提高投票率,但我希望其他人能这样做。。。。但您应该已经能够将答案限定为“已接受答案”。