类函数中的全局变量

时间:2017-01-24 16:32:26

标签: php oop global

  1. 我有一些旧的代码需要处理,重写
  2. 我需要扩展和/或替换它的一些部分
  3. 在代码中,SQL查询中使用了一个声明的变量$table_prefix(非全局),如下所示:

    $sql="SELECT * FROM {$table_prefix}table WHERE id = %d";
    
  4. $table_prefix根据某些条件(即主机,远程IP等)进行更改

  5. 问题

    为了实现我的目标,我创建了一个具有许多函数的类,用于向SQL读取/写入数据。现在我不得不在每个功能中重复global $table_prefix。它看起来与此相似:

    class MyClass {
    
        function loadData($id=0){
    
            global $table_prefix;
    
            $sql = "SELECT * FROM {$table_prefix}table WHERE id = %d;";
            [...]
        }
    
        function saveData($id=0, $data){
    
            global $table_prefix;
    
            if(is_array($data) [...] ){
                $sql = "UPDATE
                     {$table_prefix}table
                    SET
                        data_1= %s,
                        data_2 = %d
                    WHERE id = %d;";
                [...]
            }
        }
    }
    

    问题 有没有办法声明这个$table_prefix一次并在每个类函数中使用它而不重复它。

    protip 如果您发现我的英语有误,请随时写信给我 - 我还在学习,学习和学习。 ..似乎永远都是这样,不仅仅是因为我的语言技能,因为人们学习一生:)

2 个答案:

答案 0 :(得分:0)

在班级的构造函数中执行此操作:

 class MyClass {
     private $table_prefix;

     public function __construct($table_prefix) {
            $this->table_prefix = $table_prefix;
     }
     private function table($name) {
           return $this->table_prefix.$name;
     }
     function loadData($id=0){             
        $sql = "SELECT * FROM ".$this->table("table")." WHERE id = %d;";
        //Or you can not define the function and do the following:
        //$sql = "SELECT * FROM ".$this->table_prefix."table WHERE id = %d;";
        [...]
    }

     ...         

}

然后,您需要以不同方式构建您的类:

 $class = new MyClass($tablePrefix); //Where $tablePrefix is the prefix you've computed

答案 1 :(得分:-4)

我建议您在配置阶段使用Define功能全局定义table_prefix

示例代码:

的config.php

<?php define('table_prefix','prefix_');

MyClass.php

$sql = "UPDATE " . table_prefix . "...";

来源:http://php.net/manual/en/function.define.php