Php 从过程代码到oop

Php 从过程代码到oop,php,ajax,json,oop,Php,Ajax,Json,Oop,我对编程比较陌生,有大约1年的兼职学习经验,我对PHP非常陌生,只有几周的时间,并且使用w3schools来帮助我 我现在正试图切换到OOP风格,只是无法理解这个概念,或者更确切地说是如何以及何时应用它,因此我转向了这里,在这里我一直是一个潜伏者,而不是提供一些帮助和建议的贡献者 我希望得到一些帮助/简短的解释,说明我将如何以PHP oop的方式编写以下内容 $sql="SELECT name, lastname, member_nr, joindate, order, creditCardIn

我对编程比较陌生,有大约1年的兼职学习经验,我对PHP非常陌生,只有几周的时间,并且使用w3schools来帮助我

我现在正试图切换到OOP风格,只是无法理解这个概念,或者更确切地说是如何以及何时应用它,因此我转向了这里,在这里我一直是一个潜伏者,而不是提供一些帮助和建议的贡献者

我希望得到一些帮助/简短的解释,说明我将如何以PHP oop的方式编写以下内容

$sql="SELECT name, lastname, member_nr, joindate, order, creditCardInfo
 from members 
 WHERE member_nr = $'member_nr'";
$result = mysql_query($sql) or die("error");
 while($row = mysql_fetch_array){
  echo '<h3>Personal Profile</h3>';
 echo  $name = $row['name'];
  echo $lastName = $row['lastname'];
 :
 :
 }
$sql=“选择名称、姓氏、成员号、joindate、订单、creditCardInfo
来自成员
其中,member_nr=$'member_nr';
$result=mysql_query($sql)或die(“错误”);
while($row=mysql\u fetch\u数组){
回声“个人资料”;
echo$name=$row['name'];
echo$lastName=$row['lastName'];
:
:
}
我的问题是,我不知道我是否应该为上述内容创建一个类,个人档案可以被视为一个人,对吗,这是一个对象。。。?但是我的课堂上是否包括了HTML部分和mysql\u查询部分等……我只是在OOP方面遇到了很多问题,很难自己学习,这就是为什么我非常感谢能在这里得到的任何帮助或建议


谢谢你

这个案子不是个好例子。当您想要封装一个实体的逻辑以简化其在类之外的使用时,您需要一个类

例如:

class Member {
   private $id, $name, 
           $lastname, $member_nr, $joindate, $order, $creditCardInfo;
   public function __construct($id = 0) {
        if($id != null) $this->loadFromDB();
   }

   private function loadFromDB() {
       //Do db load here...
   }

   public function Update(){
      //Do db update
   }

   public function Delete() {
      //Do db delete...
   }

   public function GetFromMemberNR($nr) {
        //Do select
   }

   //Additional Functions Verfication
}
最后,这里的代码会相当复杂。但要在外部使用它,只需包含类的php文件

include 'member.php';
$member = new Member();
$member->GetFromMemberNR(2); //Does everything for you inside the function..

有很多工具可以帮助您简化数据库操作,但这是OOP的基础。其主要思想是为了重用而进行封装。

首先,您应该使用
mysqli
,因为所有
mysql.*
都已弃用,并且将来会从PHP中删除

这里是一个带有一些函数的基类,但您应该扩展它以供使用!并了解没有自己评论的函数的作用,以了解更多信息。 这会建立到数据库的多个连接,因此阅读一些关于singleton的内容也会对您有好处

<?php
class dbconnection {
    private $dbHostname;
    private $dbName;
    private $dbUsername;
    private $dbUserpassword;

    private $error;
    private $querysuccess;
    private $connected;

    private $mysqli;

    public function __construct() {
        $this->dbHostname = 'localhost';
        $this->dbName = 'databasename';
        $this->dbUsername = 'username';
        $this->dbUserpassword = 'password';
        $this->connected = false;
    }
    public function __destruct() {
        $this->mysqli->Close();
    }

    public function connect() {
        //establishing a database connection
        $this->mysqli = new mysqli($this->dbHostname, $this->dbUsername, $this->dbUserpassword, $this->dbName);
        if($this->mysqli->connect_errno) {//When there was an error during the connecting
            echo 'Connection Error:<br>'.$this->mysqli->connect_error;
            $this->connected = false;
        } else {
            $this->connected = true;
        }
        if(!$this->mysqli->set_charset('utf8')) {//Need to be done for some functions!
            echo 'Error during seting the charset: <br>'.$this->mysqli->error;
        }
    }

    public function doquery($query_str) {
        //method which executes the query
        $returnval = false;
        if($this->connected && $query_str != '') {
            //only when connected AND the query is not empty
            $res = $this->mysqli->query($query_str);//this is the equivalent of mysql_query
            if($this->error_get() == '') {//Check for an error
                $this->querysuccess = true;
            } else {
                $this->querysuccess = false;
            }
            $returnval = $res;
        } else {
            echo 'No database connection, this needs some!';
        }
        return $returnval;
    }
    public function query_success() {
        return $this->querysuccess;
    }
    public function affected_rows_get() {
        return $this->mysqli->affected_rows;
    }
    public function error_get() {
        return $this->mysqli->error;
    }
    public function insert_id_get() {
        return $this->mysqli->insert_id;
    }
    public function escape_str($str) {
        return $this->mysqli->real_escape_string($str);
    }
    public function is_connected() {
        return $this->connected;
    }
    public function fetch_assoc(&$res){
        return $res->fetch_assoc();
    }
    public function fetch_assoc_array(&$res){
        return $res->fetch_array(MYSQLI_ASSOC);
    }
}

不要急于编写完整的面向对象程序。从OOB开始——基于面向对象的。使用对象,只是不要开始定义你自己的。试着想想你的代码执行什么操作…在这种情况下,它是1。访问数据库2。格式化DB和3中的数据。输出HTML。@STLMikey谢谢你这是一个很好的提示,但是从那里我现在需要为3个不同的动作创建3个不同的函数…这就是我的stuckthank。谢谢你,我可以从你的示例中清楚地看到OOP的好处,它太难掌握了…就像你从一开始就在一起学习一门新的语言,尽管这样做很好。许多语言都受益于这种编程风格。代码重用是主要的好处。你只要叫它一次,你就可以在任何地方使用它。将它与Composer之类的工具结合起来,它可以帮助您自动加载类,您就拥有了一个强大的动态代码库,而无需担心如何记住将代码放在何处。