php rector:如何使用$_SERVER元素返回一个定义?

muk1a3rh  于 2022-12-02  发布在  PHP
关注(0)|答案(1)|浏览(116)

我想改变

define('USER','pippo');

define('USER', $_SERVER["DB_USER"]);

我无法使用字符串作为第一个参数,并使用$_SERVER的“DB_USER”索引中的数组元素创建新的FuncCall...
另外,我试图解决这个问题,但它不起作用

if ($node->args[0]->value->value == "USER") {
        if (!$node->args[1]->value instanceof Node\Scalar\String_) {
            return null;
        }
        $node->args[1]->value->value = "\$_SERVER[\"_DB_USER\"]";
        return $node;
    }

我必须重建的是

expr: Expr_FuncCall(                             
            name: Name(                                  
                parts: array(                            
                    0: define                            
                )                                        
            )                                            
            args: array(                                 
                0: Arg(                                  
                    name: null                           
                    value: Scalar_String(                
                        value: USER                      
                    )                                    
                    byRef: false                         
                    unpack: false                        
                )                                        
                1: Arg(                                  
                    name: null                           
                    value: Expr_ArrayDimFetch(           
                        var: Expr_Variable(              
                            name: _SERVER                
                        )                                
                        dim: Scalar_String(              
                            value: CLAL_ENV_DB_USER      
                        )                                
                    )                                    
                    byRef: false                         
                    unpack: false                        
                )                                        
            )                                            
        )
8hhllhi2

8hhllhi21#

我终于找到路了!!

return new FuncCall(
            new Node\Name('define'),
            [
                new Node\Arg(
                    new Node\Scalar\String_("USER")
                ),
                new Node\Arg(
                    new Node\Expr\ArrayDimFetch(
                        new Node\Expr\Variable(new Node\Name("_SERVER")),
                        new Node\Scalar\String_("DB_USER")
                    )
                ),
            ]
        );

它会这样做

-DEFINE("USER","root");
+define('USER', $_SERVER['DB_USER']);

相关问题