【发布时间】:2015-06-23 21:09:38
【问题描述】:
我有一个抽象类 DatabaseManager,其中包含很多子类,例如 General_db_manager、Data_Importer、Translation_Manager 等。以前可以正常工作。当我实际上没有运行我的单元测试时,它仍然可以正常工作......
我刚刚写完这个需要数据库连接的 ExceptionLogger 类,但我不希望它成为 DataBaseManager 的子类,因为我打算使用它在 DatabaseManager 中(我想避免“死亡钻石”)。
所以我把一些 DatabaseManager 代码放在这样的特征中:
trait ConnectionnHelper{
protected static $support_user = "not_real_value";
protected static $support_pass = "Not_real_value";
protected static $whitelist = array('127.0.0.1.', "::1");
/**
* Return the host for a connection to our mysql server database.
*
* @return String
*/
protected static function getMySqlHost() {
$host = "";
if (getenv('REMOTE_ADDR')) {
if (in_array(getenv('REMOTE_ADDR'), self::$whitelist)) {
$host = "127.0.0.1.";
}
}
elseif (isset($_SERVER['REMOTE_ADDR'])) {
if (in_array($_SERVER['REMOTE_ADDR'], self::$whitelist)) {
$host = "127.0.0.1.";
}
}
elseif(!getenv('REMOTE_ADDR') and !isset($_SERVER['REMOTE_ADDR'])) {
$host = "127.0.0.1.";
}
return $host;
}
}
我的 DataBaseManager 和 ExceptionLogger 都包含我的 trait。
abstract class DataBaseManager {
use ConnectionHelper;
当我删除“use ConnectionnHelper”时,我的单元测试运行没有错误;但如果我保留它,我会收到这样的结果:
FILE : BACKUP_MANAGER_TEST.PHP
Fatal error: Class 'DataBaseManager' not found in C:\xampp\htdocs\general_controler\general_db_manager.php on line 14
FILE : GC_DATA_IMPORTER_TEST.PHP
Fatal error: Class 'DataBaseManager' not found in C:\xampp\htdocs\general_controler\general_db_manager.php on line 14
让我烦恼的是我的特点是不需要任何课程。所以,我不太确定为什么它需要我的 GeneralDBManager 类,它也是 DatabaseManager 的子类并且运行时没有错误
FILE : GENERAL_DB_MANAGER_TEST.PHP
PHPUnit 3.7.21 by Sebastian Bergmann.
.....
Time: 0 seconds, Memory: 2.75Mb
OK (5 tests, 22 assertions)
这是我在 GeneralDBManager 中的第 14 行(也是类中唯一的要求):
require_once(realpath(dirname(__FILE__)) . '../database_manager.php');
class generalDbManager extends DataBaseManager{
我的 ExceptionLogger 中也没有错误:
FILE : EXCEPTION_LOGGER_TEST.PHP
PHPUnit 3.7.21 by Sebastian Bergmann.
.
Time: 0 seconds, Memory: 2.75Mb
OK (1 test, 2 assertions)
有人遇到过类似的问题吗?
谢谢,
Jonathan Parent-Lévesque
【问题讨论】:
标签: php class inheritance phpunit traits