Re: Is their something like $classname::$tablename ?

From: Date: Tue, 15 Mar 2005 12:28:58 +0000
Subject: Re: Is their something like $classname::$tablename ?
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-210759@lists.php.net to get a copy of this message
André Pletschette wrote:
Hi, I've got one function getTableName() which returns the Database-Table with the data of a class (see below). As you can see it always calls the static $tablename of the subclass described by $this->classname.
I solved this problem by doing the following: abstract class DBTable { // we can't define abstract consts. // but this must be defined in your subclass // const TABLE_NAME = 'xxxxx'; // define this func in your subclasses abstract function getTableName(); } class C1 extends DBTable { function getTableName() { return self::TABLE_NAME; } } it seems like a crap way of doing it but its very flexible and easy to understand (it just doesn't have that certain 'je ne c'est quoi') - none the less it was born out of a need for major flexibility (for pretty much similar reasons to you - namely generic data objects), anyway it gives you many ways to skin the cat (get the tablename): <? $c = new C1; echo $c->getTableName(); echo C1::getTableName(); echo C1::TABLE_NAME; $a = 'C1'; if (defined("$a::TABLE_NAME")) { echo constant("$a::TABLE_NAME"); } if someone has a better way, bring it on :-) I'd love to be able to improve my own code. You may also want to look at the possibility of using class names that are always indentical to the table names - I tried that but I didn't like it.
Thankyou, André Here the function: function getTableName() {
       if ($this->classname == "class1") {
           return class1::$tablename;
       } elseif ($this->classname == "class2") {
           return class2::$tablename;
       } elseif ($this->classname == "class3") {
           return class3::$tablename;
       }...
         ...
       }else {
           throw new Exception($this->classname." not found!");
       }          }


« previous php.general (#210759) next »