用于创建新的,先前未定义的变量的函数

时间:2010-12-08 23:48:33

标签: php

对不起这样一个蹩脚的头衔,但我不知道该放什么,希望你能理解。另外,我不知道之前是否曾提出类似的问题,因为我不知道它的正确关键字 - 因此也不能谷歌。

基本......在查看preg_match_all();时,他们获得了匹配参数,该参数将创建在函数中定义的新数组,并使我们能够在函数执行后访问它。 / p>

问题是..我如何在自己的功能中实现这样的功能?但它可以创建单个变量和/或数组。

提前致谢!

4 个答案:

答案 0 :(得分:4)

preg_match_all()接受对数组的引用,该数组在其自己的范围内称为$matches。如函数原型中所示:

array &$matches

如果调用该函数并传入一个变量,如果它在调用范围中尚不存在,则会创建该变量。因此,在用户定义的函数中,您使用&通过引用接受参数,然后在函数内使用它。只需在函数调用中声明它就可以创建外部变量,就像使用preg_match_all()调用$matches一样。

一个例子:

function foo(&$bar) {
    $bar = 'baz';
}

// Declare a variable and pass it to foo()
foo($variable);
echo $variable; // baz

答案 1 :(得分:3)

我认为你指的是函数parameters passed by reference,不是吗?

function putValInVar(&$myVar, $myVal){
    $myVar = $myVal;
}

$myVar = 1;
putValInVar($myVar, 2);

echo $myVar; // outputs '2', but will output '1' if we remove the '&' //

默认情况下,PHP中的函数参数按值传递。这意味着在每个函数调用时都会创建新变量,这些变量只存在于函数内部,不会影响其外部的任何变量。

要指定参数引用,语法是在函数头中声明它之前附加&。这将指示PHP在函数内部使用传递的变量,而不是创建它的副本。

异常:对象总是通过引用传递。(嗯......不是真的,但它很复杂。有关详细信息,请参阅注释线程。)

答案 2 :(得分:2)

我认为你要求的是passing-by-reference。 preg_match_all基本上用于“创建”其范围之外的数组变量:

 function preg_match_all($foo, $bar, & $new_var) {
     $new_var = array(1,2,3);
 }

这里的关键点是函数定义中的&。这允许您在传递时覆盖外部作用域中的变量。

在风格上,这应该谨慎使用。尝试返回数组或结果,而不是通过引用传递。

答案 3 :(得分:0)

像这样:

$myvariable = runfunction();

function runfunction() {
//do some code assign result to variable (ie $result)
return $result;
}

或者

global $result;
function runfunction() {
global $result;
$result = 'something';
}