我刚刚从我的“函数中的所有东西”编码风格转移到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以及魔术方法。这里最佳做法是什么?
好的,但另一个问题。如何编写创建/删除帖子功能,新类或新方法?在现实世界的概念中,我无法想象这一点。
这一切对我来说并不是那么清楚,因为它在任何教程中都没有解释。
帮助会很棒。
问候
答案 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设计的书籍,其概念和目标是教您如何以最佳方式设计课程。 我希望我有所帮助