你会用OOP PHP以相同的方式编写这段代码吗?

时间:2010-08-27 21:57:50

标签: php oop coding-style

我正在尝试使用我的一个脚本。这是一个联系脚本,通过jQuery的ajax函数发送电子邮件时处理编码。

我想让用户能够在同一页面中使用两个表单的相同脚本,并使其变得轻松。

现在我已经制作了一个原型,它将如何用oop重写它。

这对我来说真的很困惑,但我每天都在学习。对我来说最困难的部分是我应该在哪里放置我的方法以及如何制作剧本流程。

为了证明我的意思,以下是我现在使用的代码的一些部分:

/*
 * Start defining some vars at the runtime
 */
public function __construct($data, $config = array()) {
    $lang = isset($config['language']) ? $config['language'] : 'en';
    $this->_getPhrases($lang);
    $this->_recieverEmail = isset ($config['reciever_email']) ? filter_var($config['reciever_email'], FILTER_SANITIZE_EMAIL) : die($this->_phrase['noRecieverEmail']);
    $this->_ajax = ($this->_enableAjax($config['ajax_enabled'])) ? true : false;
    $this->_data = isset($data) ? (is_array($data) ? $data : die($this->_phrase['errors']['dataNotArray'])) : $_POST;
}

/*
 * Send the message
 */
public function send() {
    if(!$this->isDataVaild($this->_data)) {
        return false;
    }

    $this->_data = $this->_cleanData($this->_data);
    $this->setSenderName($this->_data['name']);
    $this->setSenderEmail($this->_data['email']);
    $this->_message = $this->_generateMsg($this->data);

    $PHPMailer = new PHPMailerLite();
    $this->_sendUsing($PHPMailer, $this->_message);

    return true;
}

我之所以选择这两种方法,是因为他们正在为我的脚本完成大部分工作。我这样用它:

$config = array(
    'language' => 'en',
    'ajax_enabled' => false,
    'reciever_email' => 'recieve@localhost'
);

$contact = new coolContact($_POST, $config);

if($contact->send()) {
    echo 'Message sent with No problems';
} else {
    echo $contact->getErrors();
}

毕竟,这是我的问题:

我的问题

  1. 我应该在send()方法内部还是_generateMsg()内部进行验证?
  2. 这个代码可以被认为是oop php吗?
  3. 问题1对某些人来说可能很奇怪,所以让我解释一下:

    用我认为是oop的代码重写代码之后,我现在可以在不破坏代码的情况下在许多顺序中使用这些方法,这就是为什么我很困惑何时何地最好的地方使用它。

2 个答案:

答案 0 :(得分:2)

如果我是你,我会将验证放在它自己的方法validate()中。这样你就可以从任何函数调用该代码。尽量保持每种方法尽可能简短和甜蜜,并尽可能将方法组合成更大的方法。看起来您可能已经验证了它自己的功能,在这种情况下,您调用它取决于逻辑中需要验证数据的位置。如果coolContact可能存在无效数据,但在更正数据之前无法发送,请在send()中进行验证。如果coolContact必须包含有效数据,包含无效数据,那么_generateMsg()应该调用validate()

对于#2,我会考虑这个OOP,是的。但我在这里的答案都是意见......

答案 1 :(得分:0)

正如您所问的那样将此代码视为OOP php,我想分享一下使用OOP php的方式。

我使用.class扩展名创建单独的类文件。该类文件大致具有以下结构。

    class classname
    {
    var $var1;  //defining variables
    var $var2;
    .
    .
    var $varn;

    public function __construct($parm1,$param2,....$paramn)
    {
    //intialise variables

    $this->var1=$param1;
    .
    .
    $this->varn=$paramn;
    }

    //give definitions of all the functions here

    public function functionname($param1,$param2...$paramn)

    $city=$param1;
    $country=$param2;
    {
    /*include database connection file(created as db_conf) or explicitly write connection code(not preferable)*/

    //give function definition, manipulation, expresstions and sql queries

    $query1="INSERT INTO city(name,country) VALUES('$city','$country')";
    $result=mysql_query($query1);

return value;
    }

    //similarly define other functions too


    }

现在,如果要对两个或更多表单使用相同的脚本,则需要在其中包含类文件并调用相应的方法。对于例如

<?php
include_once './classname.class.php'  //give complete path of the class file.
$obj=new classname($par1,...,$parn); //create object

$ret=$obj->functionname($par1,...,$parn);

?>

我希望这有用:)