我正在服务器端处理数据表。我有一个我不明白的例子。
这部分甚至在做什么,为什么其中一些在实际变量之前被调用?
$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);
答案 0 :(得分:1)
这称为多重分配或chained assignment。
您可以在PHP中执行此操作,原因有两点:
对于您的示例中的表达式$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;