我非常想使用PDO,因此可能会使用PDO。
用法可以是:
$m = new MDB();
$m->Users()->GetRec($param);
Users()
是数据库中表的名称,GetRec($param)
是我的函数。
我看起来像这样:
class MDB extends DB {
function __construct(){
parent::__construct();
if ($result = $this->pdo->query("SHOW TABLES"))
{
while ($row = $result->fetch(PDO::FETCH_NUM))
{
// this is only my imagination (not working at all)
__set($row[0],true);
}
}
}
// set
public function __set($name, $value)
{
// here could be a method (not properties)
$this->$name = $value;
}
当然,这似乎并不完全是我想要的。所以我能够在这个问题上得到一些建议和意见。
更新 1。
感谢神奇的方法__call,现在我正试图让它进入。观看我更新的代码:
class MDB extends DB {
function __construct(){
parent::__construct();
}
public function __call( $method, $param )
{
$tables = array();
if ($result = $this->pdo->query("SHOW TABLES"))
{
while ($row = $result->fetch(PDO::FETCH_NUM))
{
$tables[] = $row[0];
}
}
if (in_array($method,$tables))
{
return $this;
}
else
{
return FALSE;
}
}
嗯,好像对我有用了!
答案 0 :(得分:0)
是的,这是可能的!代码中的错误行是:
__set($row[0],true);
你应该致电:
$this->$row[0] = true;
看看下面的简单示例以及PHP http://www.php.net/manual/en/language.oop5.overloading.php的重载文档。
class A{
//The array which will contain your data
private $tables;
function __construct($array){
$counter = 1;
foreach($array as $value){
//That's the right call!
$this->$value = $counter++;
}
}
function __set($name, $value){
$this->tables[$name] = $value;
}
function __get($name){
if (array_key_exists($name, $this->tables)) {
return $this->tables[$name];
}
}
}
$array = array('a1', 'a2', 'a3', 'a4', 'a5');
$a = new A($array);
foreach($array as $key){
echo $a->$key;
}
希望这有帮助!