首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$variable = $variable = $variable =数组()

$variable = $variable = $variable =数组()
EN

Stack Overflow用户
提问于 2018-08-04 04:50:09
回答 3查看 130关注 0票数 0

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

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

代码语言:javascript
复制
$params = $columns = $totalRecords = $data = array(); 

或者这个

代码语言:javascript
复制
$where_condition = $sqlTot = $sqlRec = "";

我寻找了答案,但我会找到像$$a这样的变量变量

代码语言:javascript
复制
<?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);
EN

回答 3

Stack Overflow用户

发布于 2018-08-04 05:40:57

这称为多赋值或chained assignment

您可以在PHP中做到这一点,因为有两件事:

  1. PHP assigned by value
  2. 赋值是具有值(赋值的值)的表达式

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

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

诸若此类。

重要的是要注意,因为所有的赋值都是通过值来完成的,所以每个赋值的变量都有自己的值,并且在赋值之后,它们没有一个内在地相互关联,例如,将一个值附加到像$data[] = 'something';这样的变量中不会对$totalRecords或一起赋值的任何其他变量产生任何影响。

对于将来的引用,它以这种方式适用于scalar types and arrays,但如果指定的值是一个对象,则效果会有所不同。每个变量都保存同一对象的标识符的副本,因此所有变量都引用同一对象,例如:

代码语言:javascript
复制
$one = $two = $three = new StdClass;
$three->newProperty = 'value';
echo $one->newProperty;  // echoes value
票数 1
EN

Stack Overflow用户

发布于 2018-08-04 05:04:31

这意味着所有的变量都被赋予了右边相同的值。等同于:

代码语言:javascript
复制
$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())

代码语言:javascript
复制
$sqlRec = "";
$sqlTot = $sqlRec; // which is ""
$where_condition = $sqlTot; // which is ""
票数 0
EN

Stack Overflow用户

发布于 2018-08-04 05:09:28

文件上写着:

基本赋值运算符是"=“。您的第一个倾向可能是认为这是“等于”。这实际上意味着左边的操作数被设置为右边表达式的值(也就是,“set set to")。

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

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

right = += -= *= **= /= .= %= &= |= ^= <<= >>= assignment

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

这意味着,在使用=时,表达式的计算顺序是从右到左。所以..。这一点:

代码语言:javascript
复制
$params = $columns = $totalRecords = $data = array(); 

等同于

代码语言:javascript
复制
$data = array();
$totalRecords = $data;
$columns = $totalRecords;
$params = $columns;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51679943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档