如何使用面向对象编程改进此代码?

时间:2010-10-27 00:11:15

标签: php oop

这与面向对象的PHP有什么关系,还是可以通过将HTML放入类中来进一步改进?我该怎么做呢?注意:以下代码使用PEAR的QuickForm。提前谢谢。

  <?php
    //MySQL class
    require_once('database/class.mysql.php');

    //Session class
    require_once('session/class.session.php');

    //SignUp class
    require_once('access/class.signup.php');

    //QuickForm class
    require_once('HTML/QuickForm.php');

    //PHPMailer class
    require_once('thirdparty/phpmailer/class.phpmailer.php');

    //Instantiate the MySQL class
    require_once('database/dbconnect.php');
    $db = &new MySQL($host, $dbUser, $dbPass, $dbName);

    //Instantiate the Session class
    $session = new Session;

     ?>

    <html>
        <head>
            <title>Test page</title>
        </head>
        <body>
            <?php
                //Instantiate Quickform
                $form = new HTML_QuickForm('regForm', 'POST');

                ///Header
                $form->addElement('header', null, 'Quickform tutorial example!');

                //First name
                $form->addElement('text', 'fname', 'First name:', array('size' => 30));
                $form->addRule('fname', 'Please enter your first name', 'required', null, 'client');

                //Last name
                $form->addElement('text', 'lname', 'Last name', array('size' => 30));
                $form->addRule('lname', 'Please enter your last name', 'required', null, 'client');

                //Password
                $form->addElement('password', 'pass', 'Password: ', array('size' => 30));

                //Gender
                $form->addElement('radio', 'sex', 'Gender: ', 'Male', 'male');
                $form->addElement('radio', 'sex', '', 'Female', 'female');

                //County
                $form->addElement('select', 'county', 'County:', array(
                    '0' => 'Select',
                    '1' => 'Louth',
                    '2' => 'Meath'
                ));

                //Date of Birth
                $form->addElement('date', 'dob', 'Date of Birth:', array('format' => 'dMY', 'minYear' => 1950, 'maxYear' => date('Y')));

                //Submit
                $form->addElement('submit', null, 'Submit');

                //Try to validate the form
                if ($form->validate()) {
                    echo 'Hello';
                }

                //Output the form
                $form->display();
            ?>
        </body>
    </html>

3 个答案:

答案 0 :(得分:2)

您可能希望使用像Smarty这样的PHP模板系统。这将允许您完全将HTML与PHP代码分开。它还增加了允许您为所有页面创建标准页眉,页脚,菜单等的好处。

特别是Smarty模板系统似乎是用良好的OOP原则编写的。您创建了一个Smarty对象,调用assign()方法以安全方式注入信息,然后使用display()方法生成HTML。

答案 1 :(得分:2)

就个人而言,我不建议为您的页面构建使用任何类型的HTML元素生成类,特别是如果它还包括动态生成的javascript。

你可能会说“Dude:如果它最终都以HTML结尾会有什么不同?”

如果你这样做,那么考虑到标准改变的频率,你将在明年留下一个古老的代码项目。当然,像a这样的元素不太可能很快被折旧,但它的基础和样式属性可能会是。您还需要以编程方式考虑新的特殊情况元素,例如canvas。您尝试验证HTML并发现br和其他一些标记突然不接受结束斜杠,更不用说结束标记了。当你在元素生成类中处理CSS时,你可能会意识到你一直都在浪费。

当然编程PHP 大多数当时只是混合HTML和脚本编写,但是对于一些随机的,没有经验的Web管理员来说,在您更新HTML以符合当前标准之后总是更容易而不是盲目地挖掘你的PHP源代码。任何时候在您的堆栈或Web标准中的任何地方都有更新,您个人必须在整个项目中升级和更新所有,以确保a)您的HTML生成器类仍然可以运行; b)它可以处理每个已知的HTML元素和Javascript函数,以支持每个已知的浏览器。通常,您不必担心同时更新PHP和HTML / Javascript。

因此,使用PHP来处理后端数据库,远程提取,用户身份验证,表单验证,文件管理和数学计算,但在专门处理HTML结构时要小心。

只是恕我直言。虽然模板很好,但这基本上就是PHP网站的设计。

答案 2 :(得分:1)

如果您想使用面向对象原则和其他最佳实践开发Web应用程序,最好的办法是研究MVC框架,例如(对于PHP)SymfonyCakePHP

除了带有模板框架的强大的面向对象方法之外,它们还设计了其他最佳实践,例如单元测试或数据库访问的对象/关系映射。