$test = 'love';
$eff = end(explode('ov',$test));
我找不出来;奇怪的是,这并没有得到一个抱怨:为什么php抱怨通过引用在此代码中传递?
$test = 'love';
$eff = current(explode('ov',$test));
我得到的错误是: 严格:只有变量应该按引用传递
$test = 'love';
$eff = end(explode('ov',$test));
我找不出来;奇怪的是,这并没有得到一个抱怨:为什么php抱怨通过引用在此代码中传递?
$test = 'love';
$eff = current(explode('ov',$test));
我得到的错误是: 严格:只有变量应该按引用传递
end()
通过引用修改传递给它的数组。首先将爆炸分配给变量,以便end()
有一个可以修改的参考。
$test = 'love';
$explosion = explode('ov',$test);
$eff = end($explosion);
end()
只所以不修改数组的内容,无论如何,除非你正在使用的current()
,each()
,next()
很多关于迭代,你不会注意到变化的内部指针。
如果end()
这个限制是讨厌你身边有它的方式:
function last($array) { return end($array); }
$test = 'love';
$eff = last(explode('ov', $test));
<?php
error_reporting(E_STRICT);
$test = 'love';
$eff = end(explode('ov',$test));
var_dump($eff);
?>
如果您的错误报告级别未设置为E_STRICT
,它将正常工作。
看到,当你有一个临时数组返回时,你不能像这样设置内部指针。您需要首先将其设置为变量,然后使用end()
将内部指针移至末尾。
确实如此:reset()
,next()
,prev()
等等。
下面的工作会改变。
<?php
error_reporting(E_STRICT);
$test = 'love';
$a = explode('ov',$test);
$eff = end($a);
var_dump($eff);
?>
current()
的作品,因为它不会移动内部指针,但要获得当前有哪些元素,内部指针所指向。
当你在PHP 5.x中使用''error_reporting(E_STRICT)''时,你会得到错误。 E_STRICT只是PHP 6.x下E_ALL的一个子集。 – p00ya 2009-10-14 02:26:42
我认为,根据PHP版本的不同,'E_STRICT'是否是'E_ALL'的一个子集。它不是,然后它是,然后它不再。但是你永远不想只把'error_reporting'设置为'E_STRICT'。你想和'E_ALL'('error_reporting(E_ALL | E_STRICT);')一起使用,否则你会错过重要的非严格错误。如果'E_STRICT'包含在'E_ALL'中,它不会对OR造成任何伤害。 – 2009-10-14 04:03:15
end
通过将数组的内部指针移动到数组的末尾来更改数组的内部指针。因此,该参数必须是可变的(即对数组的引用)才能有用。这就是你收到警告的原因。
current
根本不接触阵列;它只看数组。因此,该参数不需要是可变的(因此可以通过值传递),并且操作不会给出警告。
这是一个奇怪的一个。 – mauris 2009-10-14 02:10:19
你想在这里做什么?如果你期待end()给你数组中的最后一个元素,那么你误解了这个函数。 – 2009-10-14 04:02:46