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

时间:2018-08-03 20:50:09

标签: 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();

    $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);

3 个答案:

答案 0 :(得分:1)

这称为多重分配或chained assignment

您可以在PHP中执行此操作,原因有两点:

  1. PHP按值分配
  2. 赋值是具有值(指定值)的表达式

对于您的示例中的表达式$params = $columns = $totalRecords = $data = array();

  • $data = array()将文字值(一个空数组)分配给$data,但它也是一个表达式,其结果为一个空数组。

  • $totalRecords = $data = array()将表达式$data = array()分配给$totalRecords,但这也是一个表达式,其结果为空数组。 / p>

以此类推。

请务必注意,由于所有分配都是通过值完成的,因此每个分配的变量都有其自己的值,并且在分配后,它们中的任何一个都不固有地相互关联,例如将值附加到像$data[] = 'something';这样的变量之一对$totalRecords或一起分配的任何其他变量没有任何作用。

对于以后的参考,它对scalar types and arrays起作用,但是如果分配的值是一个对象,则效果会有所不同。每个变量都包含同一对象的标识符的副本,因此所有 do 都引用同一对象,例如:

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

答案 1 :(得分:0)

这意味着所有变量都在右侧分配了相同的值。等同于:

$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())

$sqlRec = "";
$sqlTot = $sqlRec; // which is ""
$where_condition = $sqlTot; // which is ""

答案 2 :(得分:0)

文档说:

  

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

http://php.net/manual/en/language.operators.assignment.php

  

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

     

正确= + =-= * = ** = / =。=%=&= | = ^ = << = >> =分配

http://php.net/manual/en/language.operators.precedence.php

这意味着,当使用=时,表达式是从右到左求值的。 所以..

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

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