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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I now solved my third problem as followed, I write the fields of a table into global Variables.

If anybody has a better (nicer) way of doing this, I would be pleased to know ;)

/**
* Returns the Fields of a class
*/
static function getFields($classname) {
$tablename = self::getTableName($classname);
return $GLOBALS["fields_of_".$tablename];
}
/**
* Saves the fields of a table in a global Array
*/
static function setFields($tablename, $fields) {
$GLOBALS["fields_of_".$tablename] = $fields;
}


I just don't have a solution for my second problem: I don't want to supply $classname as Parameter when calling:

testTable::toHtml_table_heading($dbConnect, "testTable");


André


André Pletschette wrote:

Thanks Jochem, I now solved the problem with your help, the following way:

In the parent-class I define:

static function getTableName($classname) {
if (defined("$classname::TABLE_NAME")) {
return(constant("$classname::TABLE_NAME"));
} else {
throw new Exception("No TABLE_NAME for ".$classname." defined!");
}
}

And in each child-class I define, the const TABLE_NAME.

Now I have two more problems:
- I have to pass the Classname as a parameter to all my static functions:
for Example: echo testTable::toHtml_table_heading($dbConnect, "testTable");


- I need a similar thing for an Array $fields, which contains the field descriptions of the class:
static function toHtml_table_heading($dbConnect, $classname) {
$result = "\n\t<tr>";
if (!isset("$classname::$fields")) {
$classname->intializeClass($dbConnect, $classname);
}
...


Thankyou,
André


Jochem Maas wrote:

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!");
} }


-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux