Hi guys,
For the life of me I can't figure this out. I have two classes as follows:
1. Config.php (based on the Singleton pattern; gets/sets properties).
2. Database.php (also based on the Singleton pattern; extends mysqli).
-- BEGIN CLASS CONFIG --
<?php
class Config {
private static $INSTANCE;
private static $CONFIGFILE = "sys.cfg";
private $properties = array();
/** Constructor is private; getInsntace() will mediate object
* instantiation*/
private function __construct() {
// ...
}
/** Return the path to the configuration file.*/
public static function getConfigFile() {
return self::$CONFIGFILE;
}
/** Set the path to the configuration file.*/
public static function setConfigFile($file) {
self::$CONFIGFILE = $file;
}
/** Create or return an existant instance. */
public static function getInstance() {
if (empty(self::$INSTANCE)) {
self::$INSTANCE = new Config();
// Read the configuration file.
$lines = file(self::$CONFIGFILE);
foreach ($lines as $line_num => $line) {
if (ereg("^#", $line) || ereg("^[[:space:]]",
$line)) {
// Ignore the comments and blank lines.
}
else { // Get properties from the file.
$tokens = explode("=", $line);
self::$INSTANCE->setProperty(trim($tokens[0]), trim($tokens[1]));
}
}
}
return self::$INSTANCE;
}
/** Set a property. */
public function setProperty($key, $val) {
$this->properties[$key] = $val;
}
/** Get a property. */
public function getProperty($key) {
return $this->properties[$key];
}
}
?>
-- END CLASS CONFIG --
-- BEGIN CLASS DATABASE --
<?php
/*
* Created on May 15, 2007
*
* Written/coded/hacked by Lee Reilly <[EMAIL PROTECTED]>.
*
* Extends PHP's MySQLi.
*/
require_once("Config.php");
class Database extends mysqli {
private static $CONFIG;
private static $INSTANCE;
public function __construct() {
}
public static function getConnection() {
if(empty(self::$INSTANCE)) {
self::$CONFIG = Config::getInstance(); // ERROR HERE
self::$INSTANCE = new Database();
}
return self::$INSTANCE;
}
}
?>
-- END CLASS DATABASE --
Now, in one of my unit tests, I call `$CONN =
Database::getConnection()` and receive an error message, "Fatal error:
Call to undefined method Config::getinstance() in
C:\xampp\htdocs\rsfs\php\classes\core\Database.php on line 23".
Can anyone tell me why the Database class can't see the Config class?
If it's any use, here's my unit test that's breaking:
-- BEGIN UNIT TESTS --
<?php
/*
* Created on June 8, 2007
*
* Written/coded/hacked by Lee Reilly <[EMAIL PROTECTED]>.
*
* Test class for Database class. */
require_once('../../external/SimpleTest/unit_tester.php');
require_once('../../external/SimpleTest/reporter.php');
require_once('../../classes/sys/Database.php');
class DatabaseTest extends UnitTestCase {
private static $CONN;
public function testConstructor() {
$CONN = Database::getConnection();
}
}
$test = &new DatabaseTest();
$test->run(new HtmlReporter());
?>
-- END UNIT TESTS --
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php