mysql在php中的面向对象编程还不清楚

yhuiod9q  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(288)

我在理解面向对象编程方面遇到了一个问题 PHP . 我相信如果我能通过这个,很多门都会为我打开。我已经知道怎么排队写字了 php . 我已经上了一门课,但我似乎还不能完全理解这一点。但我不明白的是。
假设我创建一个 php classfunction 它在下面。
数据库.php

<?php

/*Contains DB Connect function and other query functions that has to do with database*/

class Database 
{
    //Database conn properties

    private $host   = 'localhost';
    private $user   = 'root';
    private $pass   = 'password';
    private $dbname = 'rtmdb';

    private $dbh;
    private $error;
    private $stmt;

    public function __construct() 
    {
        //Function for database connection
        //Set DSN

        $dsn = 'mysql:host='. $this->host . ';dbname'. $this->dbname;

        //Set Options include persistent connection

        $options = array(
            PDO::ATTR_PERSISTENT    => true,
            PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
        );

        //Create new PDO Instance

        try
        { 
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
        }
        catch(PDOException $e) 
        {
            $this->error = $e->getMessage();
        }
    }

    public function query($query)
    {
        //@param function for executing insert, select, update

        $this->stmt = $this->dbh->prepare($query);

        if(!$this->stmt)
        {
            echo $this->dbh->lastErrorMsg();
        }
        else
        {
            return $this->stmt = $this->dbh->prepare($query);
        }
    }

    public function bind($param, $value, $type = null) 
    {
        if(is_null($type))
        {
            switch(true)
            {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                    default;
                    $type = PDO::PARAM_STR;
            }
        }
        $this->stmt->bindValue($param, $value, $type);
    }

    public function execute()
    {
        return $this->stmt->execute();
    }

    public function lastInsertId() 
    {
        $this->dbh->lastInsertId();
    }

    public function resultset()
    {
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_ASSCO);
    }

}

从我对课程的理解来看,我知道我可以利用这些 function 如下所示

<?php
/*Working With Database*/
/*PHP Data Objects (PDO)*/

require 'classes/Database.php';

$database = new Database;

$post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

if($_POST['submit']) {
    $title = $post['title'];
    $body = $post['body'];

    $database->query('INSERT INTO post (title, body) VALUES(:title, :body)');
    $database->bind(':title', $title);
    $database->bind(':body', $body);
    $database->execute();

    if($database->lastInsertId()) {
        echo '<p>Post Added</p>';
    }
}

$database->query('SELECT * FROM post');
// $database->bind(':id', 1);
$rows = $database->resultset();

?>

<h1>Add Post</h1>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
    <lable>Post Totle</label>
    <input type="text" name="title" placeholder="Add a Title"><br><br>
    <label>Post Body</label>
   <textarea name="body"></textarea><br><br>
    <input type="submit" name="submit" value="submit">
</form>

<h1>Posts</h1>
<div>
<?php foreach($rows as $row) : ?>
<div>
    <h3><?php echo $row['title']; ?></h3>
    <p><?php echo $row['body'];?></p>
</div>
<?php endforeach;?>

所以我的问题是,有没有可能把 phphtml 归档到另一个 class 以及 methods 或者 function 什么?如果是,怎么办?理解这一点对我理解面向对象编程有很大帮助 PHP .
谢谢

wrrgggsh

wrrgggsh1#

你想的是一个“视图”层。
这个层通常不是一个类本身,它通常只是一个php文件,可以访问一些函数来帮助查看相关的内容,比如舍入数字或大写单词等。
您可以尝试编写自己的模板库,或者使用现有的引擎(如twig)。

相关问题