对我的第一个项目PHP类的建议/建议

时间:2010-05-13 13:07:05

标签: php function class

欢迎任何建议! 我对php类的理解非常有限,但下面是我想要采用的路线的起点。代码反映了我在脑海中看到的内容以及我希望如何开展业务。我的代码看起来还不错,还是我离开了?

你有什么想法,你将如何实现如form-> validate-> insertquery-> sendmail->返回消息和错误这样的任务?

请尽量让你的答案变得简单,以便我能够理解它的理解,而不仅仅是复制/粘贴工作。

最诚挚的问候, 菲尔。

注意:这只是一个基础结构,没有添加完整的代码。

<?php
//=======================================
    //class.logging.php
//========================================
    class logging
    {

        public $data = array();
        public $errors = array();



        function __construct()
        {
            array_pop($_POST);
            $this->data =($this->_logging)? is_isset(filterStr($_POST) : '';

            foreach($this->data as $key=> $value)
            {
                $this->data[$key] = $value; 
            }
            //print_r($this->data); de-bugging
        }

        public function is_isset($str)
        {
            if(isset($str)) ? true: false;
        }

        public function filterStr($str)
        {
            return preg_match(do somthing, $str);
        }

        public function validate_post()
        {
            try
            {
                if(!is_numeric($data['cardID'])) ? throw new Exception('CardID must be numeric!') : continue;   
            }
            catch (Exception $e)
            {

                return $errors = $e->getCode();
            }
        }

        public function showErrors()
        {
            foreach($errors as $error => $err)
            {
                print('<div class="notok"></div><br />');
            }
        }

        public function insertQ()
        {
            $query = "";
        }

    }


//=======================================
    //Usercp.php
//========================================
if(isset($_GET['mode']))
     {
     $mode = $_GET['mode'];
     }
     else
     {
     $mode = 'usercp';
     }


     switch($mode)
    {
        case 'usercp':
        echo 'Welcome to the User Control Panel';
        break;

        case 'logging':
            require_once 'class.logging.php';
            $logger = new logging();

            if(isset($_POST['submit'])
            {
                if($logger->validate_post === true)
                {
                    $logger->insertQ();
                    require_once '/scripts/PHPMailer/class.phpmailer.php';
                    $mailer = new PHPMailer();
                    $mailer->PHPMailer();
                }
                else
                {
                    echo ''.$logger->showErrors.''; 
                }
            }
            else
            {
                echo 
                    '
                    <form action="'.$_SERVER['PHP_SELF'].'?mode=logging" method="post">

                    </form>
                    ';  
            }
        break;

        case 'user_logout':
        // do somthing
        break;

        case 'user_settings':
        // do somthing
        break;






?>

我已决定使用此方法返回错误而不是在方法中打印错误,感谢Igor的建议!

catch (Exception $e)
            {
                $this->errors[] = $e->getMessage();

            #ERROR DE_BUGGING ONLY================================
            #print('<pre>');
                    #print_r($this->errors); 
            #print('</pre>');
            #=====================================================
            }
            if($this->errors)
            {
                return false;
            }
            else
            {
                return true;    
            }

2 个答案:

答案 0 :(得分:3)

看起来你对OOP代码有一个很好的理解。我看到声明的公共变量甚至是尝试/捕获,但我要说的是不要忘记“function __construct()”前面的“公共”可见性关键字 - 这不是绝对必要的,但它与良好的编码实践保持一致。

此外,我会说你在这里所做的一切都已经被编写,调试和修复,而且已经证实的产品已经被那些数十个PHP框架中的每一个所有。您提到的具体任务“form-&gt; validate-&gt; insertquery-&gt; sendmail-&gt;返回消息和错误”使用我选择的框架Zend Framework非常容易。而我想象Symphony,Solar,Cake等也是如此。

帮自己一个忙,停止编码已编码的内容。学习一个具有社区,定期更新和编写良好的完整文档的框架。我再推荐Zend Framework

答案 1 :(得分:1)

首先想到的建议:将逻辑与表示分开。您可以先使用Smarty之类的模板引擎。如果你把这一切都搞砸了,很快它将是一个巨大的转储。

还尝试从单独的文件中包含类定义,作为下一步,我建议采用模型 - 视图 - 控制器等模式将模型与逻辑分开。

如果不深入研究代码,我就能想到这一点。