我正在处理服务器端的数据表。我有一个我不理解的例子。
这个部分到底在做什么,为什么在实际的变量之前调用其中的一些呢?
$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);发布于 2018-08-04 05:40:57
这称为多赋值或chained assignment。
您可以在PHP中做到这一点,因为有两件事:
因此,对于示例中的表达式$params = $columns = $totalRecords = $data = array();:
$data = array()将文字值(空数组)分配给$data,但它也是一个计算结果为空的表达式array.$totalRecords = $data = array()将表达式$data = array()的值分配给$totalRecords,但它也是一个计算结果为空数组的表达式。诸若此类。
重要的是要注意,因为所有的赋值都是通过值来完成的,所以每个赋值的变量都有自己的值,并且在赋值之后,它们没有一个内在地相互关联,例如,将一个值附加到像$data[] = 'something';这样的变量中不会对$totalRecords或一起赋值的任何其他变量产生任何影响。
对于将来的引用,它以这种方式适用于scalar types and arrays,但如果指定的值是一个对象,则效果会有所不同。每个变量都保存同一对象的标识符的副本,因此所有变量都引用同一对象,例如:
$one = $two = $three = new StdClass;
$three->newProperty = 'value';
echo $one->newProperty; // echoes value发布于 2018-08-04 05:04:31
这意味着所有的变量都被赋予了右边相同的值。等同于:
$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 ""发布于 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
这意味着,在使用=时,表达式的计算顺序是从右到左。所以..。这一点:
$params = $columns = $totalRecords = $data = array(); 等同于
$data = array();
$totalRecords = $data;
$columns = $totalRecords;
$params = $columns;https://stackoverflow.com/questions/51679943
复制相似问题