【问题标题】:Dynamic MySQL table name within a class类中的动态 MySQL 表名
【发布时间】:2014-01-15 20:38:01
【问题描述】:
class Patient {

   protected static $table_name = "siteA";
   public $id;
   public $first_dx;
   public $confidence;
   public $second_dx;
   public $path_dx;

}

我在这里简单地展示了类属性。我在课堂上有 CRUD 方法,但我没有发布它们只是为了说明这一点。在这种情况下,上面的 $table_name 是 siteA 但是我需要使它动态化。当用户登录我的站点时,他们的站点将保存在会话中(站点A、站点B、站点C 等),我需要根据登录的人在此处切换表名。站点是$_SESSION['user_site'],我尝试过在花括号中使用它,没有引号,引号等,没有运气。

显然我缺乏知识(技能)。这可以做到吗?任何帮助表示赞赏。 西蒙

【问题讨论】:

    标签: php oop dynamic tablename


    【解决方案1】:
    class Patient {
    
        protected static $table_name = "siteA";
        public $id;
        public $first_dx;
        public $confidence;
        public $second_dx;
        public $path_dx;
    
        public function __construct(){
            self::$table_name = $_SESSION['user_site'];
        }
    
    }
    

    基本上,构造函数是一种神奇的方法,在创建对象的新实例时首先要执行它,这是初始化值的完美候选者。

    您不能在属性声明中使用$_SESSION['user_site'] 的原因是因为它们是在会话尚不存在的编译时创建的。

    【讨论】:

    • 效果很好。我可以问一下,据我所知....您在属性声明中将表名保留为 siteA。这大概是默认设置,然后当有人登录时,它会被覆盖,对吗?所以在编译时,创建了患者类,然后在登录时进行覆盖?原谅我的无知...我是一名已经学习 php 4 个月的医生,以创建从多个医院收集数据的平台(研究) .
    • 我问的原因是因为如果我用“”替换siteA,那么它就不起作用。我认为“”可以用作默认值。
    • @GhostRider 使用此设置$table_name始终被您的会话所覆盖。因此,它最初设置的内容并不重要,无论如何它都会被覆盖。在这种情况下,最好不要使用任何默认值以节省一点编译时间,但这是一种微不足道的变化。我刚刚复制了您的代码并且没有对属性进行任何更改,我没有明确地将其保留为“siteA”。希望有帮助!
    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多