首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php从不同的类运行时扩展(作为变量扩展?)

Php从不同的类运行时扩展(作为变量扩展?)
EN

Stack Overflow用户
提问于 2011-08-14 00:02:36
回答 3查看 691关注 0票数 4

这将会很奇怪。我有一个用于MySQL的数据库类,以及独立的类。例如:

代码语言:javascript
复制
class users extends MySQL

这个类是一个面向用户的通用类,可以多次使用。但偶尔会出现一个"MySQL_DEBUGGED“类,如果是这样的话,我想从它扩展:

代码语言:javascript
复制
class users extends MySQL_DEBUGGED

如果存在,我想继承MySQL_DEBUGGED,否则继承MySQL类。如果我把它放到变量中,它会抛出一个错误。该怎么做呢?

EN

回答 3

Stack Overflow用户

发布于 2011-08-14 00:05:53

我不认为你可以继承一个名字没有写在PHP脚本中的类。

一种可能的解决方案是:

  • 在两个单独的文件中定义两个类(均称为MySQL )
  • 使users类始终扩展MySQL类(表示这两个类中的一个)根据情况,包括:F19
  • 包含“生产”D11类的文件、H212
  • 或包含“

”D14

  • 的文件

这样,您的类总是扩展一个MySQL类--但您将包含正确的类。

基本上,在你的主文件中,你会有:

代码语言:javascript
复制
if (DEBUG) {
    require __DIR__ . '/MySQL-debug.php';
}
else {
    require __DIR__ . '/MySQL-production.php';
}

class users extends MySQL {
    // ...
}

MySQL-debug.phpMySQL-production.php都将包含一个名为MySQL的类--当然,这两个文件中包含的内容并不相同。

票数 4
EN

Stack Overflow用户

发布于 2011-08-14 00:04:56

您所需要做的就是使用class_exists()函数。

代码语言:javascript
复制
if (class_exists('MySQL_DEBUGGED')) {
    class users extends MySQL_DEBUGGED {
        ....
    }
} else {
    class users extends MySQL {
        ....
    }
}

不过,我不建议你这么做。有条件地声明类看起来像是一场噩梦。

票数 1
EN

Stack Overflow用户

发布于 2011-08-14 00:22:04

最简单的解决方案是有一个空的“桥”类,并总是从那个类继承。

然后,唯一需要声明两次的类就是空类。

代码语言:javascript
复制
if (class_exists('MySQL_DEBUGGED')) {
  class MySQLBridge extends MySQL { }
} else {
  class MySQLBridge extends MySQL_DEBUGGED { }
}

class User extends MySQLBridge {
  // ... your code ...
}

最后在你的页面上:

代码语言:javascript
复制
require_once('User.php');
$user = new User();

其他建议的解决方案要求您拥有继承类的两个副本,我不推荐这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7051606

复制
相关文章

相似问题

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