我只是试图通过尝试在php.net上找到的一些示例来理解PHP中的引用传递。我在php网站上找到了一个例子,但它不起作用:
function foo(&$var)
{
return $var++;
}
$a=5;
echo foo($a); // Am I not supposed to get 6 here? but I still get 5
这是一个here
的例子有人可以告诉我为什么变量$ a变为5而不是6?
答案 0 :(得分:6)
您的代码和示例代码不一样。难道他们表现得与众不同吗?
要查看您期望的行为,您必须将$var++
更改为++$var
。
这里发生的是,虽然函数返回后$a
的值 6,但返回的值是5,因为后增量运算符({{1 }})工作。你可以用以下方法测试:
$var++
答案 1 :(得分:1)
答案 2 :(得分:1)
这与increment operator有关,而不是通过引用传递。如果您查看手册,您将看到展示您想要的行为,您必须更改foo()
以使用预增量而不是后增量,如下所示:
function foo(&$var)
{
return ++$var;
}
现在:
> $a = 5;
> echo foo($a);
6
答案 3 :(得分:0)
不,这很好用。 $var++
返回$var
的值,然后递增变量。因此返回的值为5
,这是echo
。变量$a
现在已更新为6
。
答案 4 :(得分:0)
尝试回显实际变量:
echo $a; // 6
如果在返回之前递增,那么您的示例将起作用:
return ++$var;
答案 5 :(得分:0)
与问题没有直接关系,只与主题有关。 似乎有一个PHP错误...
one => 4
two => 5
three => 5
(changing '$v' to '$val' (or some other variable name other than '$v')
in the second (i.e. last) 'foreach' will result in the expected correct
output (one => 4 two => 5 three => 6)
输出:
var nextButton = document.getElementById('next-feeds');
var imgs = []; // store the images for caching
var images = [];
var currentPage = 1;
var feed = new Instafeed({
get: 'tagged',
tagName: 'ajith',
clientId: '467ede5a6b9b48ae8e03f4e2582aeeb3',
resolution: 'thumbnail',
limit: 60,
mock: true,
template: '<a href="{{link}}" target="_blank"><img src="{{image}}" class="instagramImg"/></a><label>Liked by <b>{{model.likes.count}}</b> people</label>',
cachedNext: function () { // read the cached instagram data
var nextImages = imgs.slice((currentPage - 1) * feed.options.limit, (currentPage) * feed.options.limit);
$("#instafeed").html(nextImages);
},
after: function () {
if (images.length < 300)
{
feed.next();
}
else
{
var result;
images.sort(compare);
for (i = 0; i < images.length; i++) {
image = images[i];
result = this._makeTemplate(this.options.template, {
model: image,
id: image.id,
link: image.link,
image: image.images[this.options.resolution].url,
likeCount: image.likes.count
});
imgs.push(result);
}
var imgsPerPage = imgs.slice((currentPage - 1) * feed.options.limit, (currentPage) * feed.options.limit);
$("#instafeed").html(imgsPerPage);
}
},
success: function (data) {
images.push.apply(images, data.data);
}
});
feed.run();
// bind the next button
nextButton.addEventListener('click', function () {
$("#instafeed").fadeOut(100);
$("#instafeed").empty();
$("#instafeed").fadeIn(100);
currentPage++;
feed.options.cachedNext();
});
function compare(a, b) {
// alert(a.likes.count);
if (a.likes.count < b.likes.count)
return -1;
if (a.likes.count > b.likes.count)
return 1;
return 0;
}