好吧,既然不能不参考,我也放一个答案,总结一下其他的货:
参考方式(又名C指针样)
Reference 可以在您想直接使用变量而不制作临时副本并返回新值以擦除旧值时使用。这是 C 语言的工作方式,可以提高大变量操作的性能。
要使用引用,您只需在函数参数的$ 之前放置一个&:
<?
function djikstra(&$source, &$destination){
//after some computations....
$source = 'new val 1';
$destination = 'new val 2';
// return can be omited or used to handle & return error
return ;
}
// init
$source = 'default val 1';
$destination = 'default val 2';
// will change the val on the fly
djikstra($source, $destination);
// will print "new val 1 - new val 2"
echo $source. ' - ' .$destination;
其他商品方式:
数组()
正如@Thamilan 所说,这可能是最常见的方式。
您不能返回多个值。但是你可以返回一个数组:
function djikstra($source, $destination){
//after some computations....
return [$distance_taken, $path];
// or `return array($distance_taken, $path)`
}
所以当你调用这个函数时,你可以利用list来获取
价值观:
list($distance_taken, $path) = djikstra($source, $destination);
注意:小心list(),这是一个很难使用的函数,请阅读文档
对象
如果您已经使用面向对象样式编码,@Topsy 也是一个好方法,因为您必须将函数应用于完整对象并期望完整修改的对象返回。
如果您从事程序性工作,请避免这种情况并选择 #1 或 #2。
函数总是返回一种类型。你可以使用一个数组,如果你
变量是同一类型。
但最好的方法是创建一个对象
<?php
class DikjstraObj {
var $source;
var $destination;
function __construct($source, $destination) {
$this->source = $source;
$this->destination = $destination;
}
}
// ///////////////
// in your function simply do
function djikstra($source, $destination){
//after some computations....
$dObj = new DikjstraObj($source, $destination);
return $dObj ;
}