PHP如何获取实例化的类名

PHP如何获取实例化的类名,php,function,Php,Function,我正在尝试一些从数据库中检索数据的方法。 我创建了一个抽象类(ppdao),在这个类中,我有一个函数根据表名构建select查询,并将结果转换为对象 对于每个表,我制作一个小文件,如下所示: class user extends ppdao{ public $table = 'user'; public function __set ( $name, $value ){ $this->$name = $value; } public function __get

我正在尝试一些从数据库中检索数据的方法。 我创建了一个抽象类(ppdao),在这个类中,我有一个函数根据表名构建select查询,并将结果转换为对象

对于每个表,我制作一个小文件,如下所示:

class user extends ppdao{

public $table = 'user';    

public function __set ( $name, $value ){   
    $this->$name = $value;
}

public function __get ( $name ){
    return $this->$name;
}
假设我希望所有用户对象都在一个数组中,我使用ppdao类中的以下函数:

public static function get_ar_obj( $arWhere = array() , $arWhereWay = array(), $order = null ){                
    $class = get_called_class();

    $obj = new $class();       
    $sql = "SELECT * FROM ".$obj->table. $obj->arWheretoString($arWhere);
    $res = mysqli_conn::getinstance()->query($sql)->all_assoc();         
    return $obj->createObjects($res);
}
这一切都很好,它给了我希望的结果

现在我将uuu get函数稍微改为:

public function __get ( $name ){        
        switch ($name){
        case 'oAlbums':
             return $this->oAlbums = albums::get_ar_obj($arWhere = array('user_id' => $this->id) );
        break;

        default:
        return $this->$name;
        break;
}
我想我想得到一个用户拥有的所有相册,在相册表中有一个名为user_id的字段,所以我想我应该像这样链接我

现在,当我这样调用album类时:

$userobject->oAlbums
get_called_class()仍然使用用户类名而不是调用的album类,因此它创建了一个类似

SELECT * FROM user WHERE user_id = 63

And it should be SELECT * FROM album WHERE user_id = 63
有人知道我该怎么做吗


对不起,人们,它不是使用get_调用的_类来创建查询,而是使用公共$表。通过将其更改为名为_类变量的get_,使其工作正常

结果是:

$arUser = user::get_ar_obj( $arWhere = array('id' => 1));
$oUser = $arUser[0];

echo '<pre>';
    print_r($oUser->oAlbums);
echo '</pre>';

你看过
静态
关键字了吗?它将在PHP5>=5.3时工作


出于好奇,我测试了你的代码(至少我试着重新组装它:D)嘿,酷,我不知道!工作起来很有魅力!
Array
(
    [0] => album Object
        (
            [table] => album
            [data:ppdao:private] => 
            [className:ppdao:private] => album
            [id] => 2
            [name] => My new album 1
            [slug] => my-new-album-1
            [user_id] => 1
            [views] => 0
            [datecreated] => 2013/03/23 16:00:43
            [location] => Muaha
        )
public static function get_ar_obj( $arWhere = array() , $arWhereWay = array(), $order = null ){                
    $obj = new static();       

    $sql = "SELECT * FROM ".$obj->table. $obj->arWheretoString($arWhere);
    $res = mysqli_conn::getinstance()->query($sql)->all_assoc();         
    return $obj->createObjects($res);
}