面向对象使用真实网络应用中的属性/方法?

时间:2016-03-05 11:01:07

标签: php oop design-patterns

我刚刚从我的“函数中的所有东西”编码风格转移到PHP中的OOP。我知道,为了正确编码,有很多来源,但我的主要问题是,在阅读了很多关于在OOP中编写博客/ cms /任何网络应用程序的教程之后,对我来说编码它是不可理解的。方式。

我被告知OOP的概念基本上接近现实世界。 所以属性只是任何对象的属性,方法就像对象应该做的那样。但我真的不明白如何在Web应用程序中使用这些属性和方法。在现实世界中,它比我在Web应用程序中更容易,例如:

假设我们想创造一个名叫“保罗”的人,他应该开车。

class human
{

    public $gender;
    public $name;

    function __construct($inGender=null, $inName=null) {

        $this->gender = $inGender;
        $this->name = $inName;

    }

    public function driveCar() {

    //Let the car be driven.
    //...

    }

}

$paul = new human('male','Paul');
$paul->driveCar();

好吧,但是当谈到Web应用程序中的对象时,假设我想编写一个博客系统,让我们专注于帖子。属性可以是id,name,content,post的作者,但是帖子实际上做了什么?它不能真正执行一个动作,所以我会这样编码:

class post
{

    public $id;
    public $title;
    public $content;
    public $tags;

        //Overloading the Variables
        function __construct($inId=null, $inTitle=null, $inContent=null, $inTags=null) {

            if(!empty($inId) || $inId == 0) {
                $this->id = $inId;
            }
            if(!empty($inTitle)) {
                $this->title = $inTitle;
            }
            if(!empty($inContent)) {
                $this->content = $inContent;
            }
            if(!empty($inTags)) {
                $this->tags = explode(' ', $inTags);
            }           

        }

}

//In order to pass multiple posts to an constructor I would use a foreach loop

$posts[] = new post(0,'Hello World', 'This is a test content','test blog oop');
$posts[] = new post(1,'Hella World!', 'This is made my myself','test test test');

//Usage in a template

<?php foreach($posts as $post): ?>
    <h1><?= $post->title;?></h1>
    <p><?= $post->content;?></p>
<?php endforeach; ?>

这里的问题是方法没有做任何事情,我猜不应该做什么。另一个问题是,当我将数据存储到数组中时,我不能将具有posts数据的单个数组用作构造函数的几个参数。即使这是一篇文章,如何正确地将数据作为数组传递以使用数组作为参数?也许我只是编写它不是最好的方法,但更好的方法是什么?我听说过setter和getter以及魔术方法。这里最佳做法是什么?

好的,但另一个问题。如何编写创建/删除帖子功能,新类或新方法?在现实世界的概念中,我无法想象这一点。

这一切对我来说并不是那么清楚,因为它在任何教程中都没有解释。

帮助会很棒。

问候

1 个答案:

答案 0 :(得分:1)

回答你所有的问题需要一本书,因为理解oop概念完全需要阅读和练习。 但是为了回答你的课程,我给你一个简单易用的例子,你可以创建一个课程,帮助你创建,阅读,删除和更新帖子。 这个类可以在你的所有项目中使用,因为它是一个类,而类只是为了让我们的生活更轻松。

所以我们走了: 首先我们创建类:

class posts
{
    //we just need a post title and a post content for the new post.
    //So we create two properties for post_title and post_content
    private $post_title; //the variables are private so we we restrict access the them from outside the class.
    private $post_content;
    private $connection;
    //you really don't need here the _constructor function, but it's your choice.
    //For example you can do all your database connection stuff in the constructor method to make it easy for users.
    //So if someone creates a posts object it is obvious that he's going to make some interactions with the database so you open connections in your constructor.
    //next we create the methods for our posts class

    public function __constructor()
    {
        //here you created the connection to your database. You can retrieve
        //the parameters to the mysqli_connect from a eg. config.php file to make your class more dynamic.
        $this->connection = mysqli_connect('hostname', 'username', 'password', 'databasename');
    }

    public function create_post($title, $content)
    {
        $this->post_title=$title;
        $this->post_content=$content;
        $query="INSERT INTO posttable(id,title,content) VALUES('$this->post_title','$this->post_content')";
        $result=$mysqli_query($this->connection,$query);
    }

    public function update_post($post_id, $post_title, $post_content)
    {

    }

    public function delete_post($post_id)
    {

    }

    public function view_posts($query, $fields)
    {
        $result=mysqli_query($this->connection, $query);
        $finalData=array();
        while ($row=mysqli_fetch_assoc($data)) {
            foreach ($fields as $field) {
                array_push($finalData, $row[$field]);
            }
        }
        return $finalData;
    }
}

//now we're going to use the class.
$post=new posts(); //a new posts object is created and the __construct method opened connection to db.
$post->create_post('some title', 'some content');//inserted new post into database.
$post->update_post($id, $content, $title);//you've just updated a post
$post->delete_post($id);//you've just deleted a post.

//getting posts 
$query="SELECT * FROM posts";
$fields=array('id','title','content');

$all_posts=$post->view_posts($query, $fields);
//now you have $all_posts which is filled with an array of all posts from the posts table.
//now you can loop through it and show it on your page.
for ($i=0; $i<=count($all_posts); $i++) {
    echo '<h1>'.$mydata[$i].'</h1>';
    $i++;
    echo '<h2>'.$mydata[$i].'</h2>';
    $i++;
    echo '<h3>'.$mydata[$i].'</h3>';
}

我没有实现更新和删除方法代码,但我认为您自己编写它很容易。我的目标是向您展示如何在您的oop中使用oop网络应用。我亲自编写了近50个课程,并完成了几乎所有可能的Web应用程序任务的所有主要工作。由您来创建课程取决于您。只是为了您的知识,oop编程需要培训和经验。您可以使用多种形式和不同的解决方案执行任务。您可以找到数十本教您oop设计的书籍,其概念和目标是教您如何以最佳方式设计课程。 我希望我有所帮助