php\uuu autoload():自动生成类

php\uuu autoload():自动生成类,php,oop,Php,Oop,我正在寻找一种自动生成类的方法。例如,目前我的每一个类都是在这样一个单独的文件中定义的 class book{ public $name; public $isbn; public $id; } 然后,我还为每个类创建了一个数据类。这个数据类继承了一个运行良好的数据映射器。因此,如果我想加载一本$id=2的书,我将执行以下操作: $bookData = new bookData; $book = $bookData->find(2); $book将是book类

我正在寻找一种自动生成类的方法。例如,目前我的每一个类都是在这样一个单独的文件中定义的

class book{

    public $name;
    public $isbn;
    public $id;
}
然后,我还为每个类创建了一个数据类。这个数据类继承了一个运行良好的数据映射器。因此,如果我想加载一本$id=2的书,我将执行以下操作:

$bookData = new bookData;
$book = $bookData->find(2);
$book将是book类的初始版本,并将其所有属性设置为对应数据库中的属性

现在,我所做的是使用自动加载($className)来自动包含我的类文件。我想这样做,这样我就不必创建类文件

目前我想到的是:

__autoload( $className ){

    if( file_exists('classes/'.$className.'.php') ){

        include 'classes/'.$className.'.php';
    }else{

        //Go to DB, find table with $className and Get all column names
        //Use fopen() to create a new file (like the book class file above)
        //Use the coloumns from DB as vars for this new file..
        //fclose() file and include new file...
    }
}
不过,我认为上面的内容相当混乱。有没有关于如何更容易做到这一点的建议?例如,使用u_autoload()生成一个标准类,从数据库获取属性名并返回它,而不必创建新文件


提前感谢

我认为您不需要创建新文件。您正在寻找的内容看起来非常类似于“beans”(对于ORM)中的“beans”

如果我是你,我会做的就是不要在
autoloader
中创建类。我将创建一个名为
Data
的泛型类

然后,您可以执行以下操作:

$bookData = new Data('book');
然后在
Data
类中,您将拥有从数据库获取数据并将其应用于类的例程(假设您有一个包含数据的数组):

您还可以在
数据
对象中设置类型:

public function __construct($type){
   $this->type = $type;
}
通过这种方式,您可以很容易地判断数据类实例引用的“类型”(或数据库表)

如果“book”对象具有与“books”相关的特殊函数,则需要创建一个扩展
数据的类。这是不可避免的,因为在某些时候,您需要在某个地方插入计算价格方法:

class BookData extends Data(){

   public function calculatePrice(){
      //return calculated price
   }
}

另一种方法是编写一个脚本,该脚本可以对数据库进行爬网,并提前为您生成类。显然,缺点是每次更改数据库结构时都需要运行此脚本来重新生成类。

我认为不需要创建新文件。您正在寻找的内容看起来非常类似于“beans”(对于ORM)中的“beans”

如果我是你,我会做的就是不要在
autoloader
中创建类。我将创建一个名为
Data
的泛型类

然后,您可以执行以下操作:

$bookData = new Data('book');
然后在
Data
类中,您将拥有从数据库获取数据并将其应用于类的例程(假设您有一个包含数据的数组):

您还可以在
数据
对象中设置类型:

public function __construct($type){
   $this->type = $type;
}
通过这种方式,您可以很容易地判断数据类实例引用的“类型”(或数据库表)

如果“book”对象具有与“books”相关的特殊函数,则需要创建一个扩展
数据的类。这是不可避免的,因为在某些时候,您需要在某个地方插入计算价格方法:

class BookData extends Data(){

   public function calculatePrice(){
      //return calculated price
   }
}

另一种方法是编写一个脚本,该脚本可以对数据库进行爬网,并提前为您生成类。很明显,缺点是每次更改数据库结构时都需要运行此脚本来重新生成类。

我从来没有这样做过,但是,可能您正在寻找的一个好的搜索词是工厂=>类工厂


希望它能帮上忙…

我从来没有这样做过,但是,也许你正在寻找一个好的搜索词是工厂=>类工厂


希望对您有所帮助……

非常有趣!谢谢phpdev,我想我会按照你提到的第一种方式来做。如果我这样做,有些类可能是例外,例如,它们可能需要额外的方法作为类的一部分。例如,book类中可能包含calculatePrice()方法。。。关于新数据对象如何处理这些问题,有什么建议吗?我编辑了我的答案,以展示如何实现“calculatePrice()”。非常有趣!谢谢phpdev,我想我会按照你提到的第一种方式来做。如果我这样做,有些类可能是例外,例如,它们可能需要额外的方法作为类的一部分。例如,book类中可能包含calculatePrice()方法。。。关于新数据对象如何处理这些问题,有什么建议吗?我已经编辑了我的答案,以说明如何实现“calculatePrice()”。