PHP5面向对象编程

Mic*_*fle 3 php oop

我已经开始在PHP中使用OO编程构建一些应用程序,但是我不确定如果我以标准方式执行它.

下面是一个例子,如果我有一本书课

    class book{

            private $name;
            private $id;
            private $isbn;
    }
Run Code Online (Sandbox Code Playgroud)

有两种情况,一种,我想在我的数据库中添加一本全新的书......

我应该a)在我的新班级中使用一个函数来创建新书...即.

    $book = new book;

    $book->addAsNew($name, $isbn);
Run Code Online (Sandbox Code Playgroud)

或者IB)是否应该完全独立于添加新书的类?

其次..打开我的书课时,我应该有A)构造函数

    function __construct( $bookId ){

            //Call mysql DB and set $name and $isbn var based on $bookId

    }

    ...

    $book = new book( $bookId );
Run Code Online (Sandbox Code Playgroud)

我应该b)有一个单独的功能..

    class book{

            private $name;
            private $id;
            private $isbn;

            public initiated = 0;

            function initiate( $bookId ){

                    //Load $name and $isbn from DB based on $bookId

                    $initiated = 1;
            }
    }

    ...

    $book = new book;

    $book = initiate( $bookId );
Run Code Online (Sandbox Code Playgroud)

大多数程序员都会采用标准方式吗?还是主要由程序员自行决定?

Gol*_*rol 6

您也可以向构造函数添加参数,以便编写

book = new Book($name, $isbn). 
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我会选择像您一样拥有一个具有单独属性的类,并创建一个单独的工厂类或函数来实例化图书对象.

B也是如此.不要将DB查询放在这个类中.创建一个可以充当工厂的单独BookData对象.它可以查询数据库并返回书籍对象.当然,如果你觉得工厂级别过于复杂,你也可以创建一个功能,但是,嘿,想要去OO.;-)