PHP echo回显结果在Class?

时间:2010-05-23 21:46:16

标签: php class

我对PHP Class有疑问。我试图通过PHP从Mysql获取结果。我想知道最佳做法是在类中显示结果还是存储结果并在html中处理它。

例如,在Class

中显示结果
class Schedule {
           public $currentWeek;

            function teamQuery($currentWeek){

            $this->currentWeek=$currentWeek;


            }
            function getSchedule(){
                $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
                    if (!$connection) {
                        die("Database connection failed: " . mysql_error());
                    }

                    $db_select = mysql_select_db(DB_NAME,$connection);
                    if (!$db_select) {
                        die("Database selection failed: " . mysql_error());
                    }

                  $scheduleQuery=mysql_query("SELECT guest, home, time, winner, pickEnable FROM $this->currentWeek ORDER BY time", $connection);

                    if (!$scheduleQuery){
                        die("database has errors: ".mysql_error());
                          }


                    while($row=mysql_fetch_array($scheduleQuery, MYSQL_NUMS)){
                    //display the result..ex: echo $row['winner'];

                    }     
                    mysql_close($scheduleQuery); 

                    //no returns
                    }


        }

或者将查询结果作为变量返回并在php中处理

class Schedule {
           public $currentWeek;

            function teamQuery($currentWeek){

            $this->currentWeek=$currentWeek;


            }
            function getSchedule(){
                $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
                    if (!$connection) {
                        die("Database connection failed: " . mysql_error());
                    }

                    $db_select = mysql_select_db(DB_NAME,$connection);
                    if (!$db_select) {
                        die("Database selection failed: " . mysql_error());
                    }

                  $scheduleQuery=mysql_query("SELECT guest, home, time, winner, pickEnable FROM $this->currentWeek ORDER BY time", $connection);

                    if (!$scheduleQuery){
                        die("database has errors: ".mysql_error());
                    // create an array    }
                    $ret = array();   

                    while($row=mysql_fetch_array($scheduleQuery, MYSQL_NUMS)){

                    $ret[]=$row;
                    }     
                    mysql_close($scheduleQuery); 

                    return $ret;  // and handle the return value in php
                    }


            }

这里有两件事:

  1. 我发现php中返回的变量有点复杂,因为它是二维数组。我不确定最佳做法是什么,并想问你专家意见。

  2. 每次创建新方法时,我都必须重新创建$ connection变量:见下文

    $ connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);                         if(!$ connection){                             die(“数据库连接失败:”。mysql_error());                         }

                        $db_select = mysql_select_db(DB_NAME,$connection);
                        if (!$db_select) {
                            die("Database selection failed: " . mysql_error());
                        }
    
  3. 对我来说似乎多余。我可以只做一次,而不是在我需要查询时随时调用它吗?我是php类的新手。希望你们能帮助我。感谢。

2 个答案:

答案 0 :(得分:2)

我将这些类视为“访问者”,因此他们纯粹查询数据库并返回结果。这样,任何调用它的PHP代码都可以随意使用它。这可能是显示或可能是支票或可能是更新。这是一个很好的设计,因为它将数据存储区与逻辑与显示区分开,这意味着您的代码将更加灵活。但是,是的,它有点复杂。

每次重新创建连接。这可能是也可能不是必要的。根据您的设置,您可以创建连接池。为了使您现在更容易,您可以抽象创建与其自己的方法的连接。这样,您只需在开始时调用此方法即可获得连接句柄。这样可以避免在整个地方拥有相同代码的许多副本。

如果您是PHP新手,我建议您对面向对象设计进行一些研究。这将让您了解为什么抽象某些函数是有益的,以及为什么要返回结果而不是显示结果。

答案 1 :(得分:1)

在类中回显结果可能是一个坏主意,你应该返回结果或结果集来回显其他地方。

可以连接类的mebmer,如:

protected $_connection = null;

然后在构造函数中,您可以分配数据库连接。虽然通常你的数据库连接会被另一个类包装。

此外,如果我是你,我不会使用mysql功能。而是使用Mysqli或PDO_Mysql驱动程序。默认情况下,它们以对象方式封装所有这些功能。然后,您可以使用自定义功能扩展这些类,而不是从头开始。