Dex*_*ter 2 php arrays variables scope
我正在阅读mysqli_stmt_bind_result 的PHP手册,并在评论中看到了这段代码:
while ( $field = $meta->fetch_field() ) {
$parameters[] = &$row[$field->name];
}
Run Code Online (Sandbox Code Playgroud)
鉴于在该行之前既没有$ params也没有$ row,为什么/该行如何工作?
PHP实际上没有变量声明.这意味着在某些情况下,您可以引用变量而无需事先声明它们.我说一些案例是因为:
foreach($undefinedArray as $key=>$value){
// will give a notice and a warning
// notice: undefined variable
// warning: invalid argument to foreach
}
Run Code Online (Sandbox Code Playgroud)
但这并不意味着你不能这样做:
for($i=0;$i<5;$i++){
$undefinedArray[]=$i;
}
// will create an array with 5 indexes, each holding the numbers 0 through 4
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为$undefinedArray没有在运行中找到和创建.
现在,关于你自己的情况.我会假设你的意思是这篇文章.而且我不得不承认,这是一个非常有趣的解决方案,我会试着抑制自己在那里评论任何一种不良做法,但让我们继续解释它!
$params[] = &$row[$field->name];
Run Code Online (Sandbox Code Playgroud)
这就是魔术发生的地方,实际上是由于&.因为&$row['unknown_index'],实际上创建了索引!
这意味着上面的语句做了两件事.首先,它创建一个数组,每个列名都保存为$row($row[$field->name])中的索引.然后,它保存一个指针到每个元件的从$row在$params.
call_user_func_array(array($stmt, 'bind_result'), $params);
Run Code Online (Sandbox Code Playgroud)
这样做$stmt->bind_result().但是将每个元素$params作为参数传递给bind_result.因为它们是通过引用传递的,所以$ row的每个索引都将保存每个选定的字段.
其余的应该很容易弄清楚.
如果您有任何疑问.随意问!
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |