首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将数组分配给静态函数变量php

将数组分配给静态函数变量php
EN

Stack Overflow用户
提问于 2016-07-13 17:24:12
回答 3查看 476关注 0票数 2

我有一个替换回调方法,在这个方法中,我尝试用数组值替换多个字符串事件。

我已经通过$parametersArray关键字将use传递给回调方法,如下所示( regex匹配3个元素):

代码语言:javascript
运行
复制
$string = 'Welcome Mr MM1, MM2 MM3 to the website';
$parametersArray = array('K', 'A' , 'AD');

$line = preg_replace_callback(
    '(MM[1-9])',
    // anonymous
    function () use ($parametersArray) {
        static $paramArray = $parametersArray;
        return array_shift($paramArray);
    },
    $string
);

我得到了以下错误:

解析错误:语法错误,意外的'$parametersArray‘(T_VARIABLE)

如果我显式地将数组设置为静态变量,则不会得到错误并得到预期的行为。

将数组作为变量直接分配给函数中静态定义的变量有问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-13 17:42:12

您可以插入这样的静态变量

代码语言:javascript
运行
复制
$line = preg_replace_callback(
    '(MM[1-9]{1})',
    // anonymous
    function ($matches) use ($parametersArray) {
        static $paramArray;

        if (null === $paramArray) {
            $paramArray = $parametersArray;
        }

        return array_shift($paramArray);
    },
    $string
);
票数 1
EN

Stack Overflow用户

发布于 2016-07-13 18:40:37

按照文档 (参见示例6):不能用表达式初始化静态变量:

代码语言:javascript
运行
复制
<?php
function foo(){
    static $int = 0;          // correct 
    static $int = 1+2;        // wrong  (as it is an expression)
    static $int = sqrt(121);  // wrong  (as it is an expression too)

    $int++;
    echo $int;
}
票数 1
EN

Stack Overflow用户

发布于 2016-07-13 17:37:01

您可以引用数组,然后在闭包中使用它的原始值。请注意,参数是在定义时初始化的,而不是在您调用它时初始化的-因此,这可能对您有用:

代码语言:javascript
运行
复制
<?php

$string = 'Welcome Mr MM1, MM2 MM3 to the website';

$parametersArray = array('K', 'A' , 'AD');
$refArray =& $parametersArray;
$line = preg_replace_callback(
            '(MM[1-9]{1})',
            // anonymous
            function () use (&$refArray, $parametersArray) {
                # stays the same in every call
                # it is a copy after all
                print_r($parametersArray);
                return array_shift($refArray);
            },
            $string
);

echo $line;
# Welcome Mr K, A AD to the website
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38358094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档