2016-07-14 17 views
0

最近、手続き型プログラミングよりも優れていることを知っているので、より多くのOOPベースのプログラミングを始めようとしていますが、おそらく簡単な質問があります。それぞれのタスクにタイトル、説明、完了までの距離、誰がそれを提出したかという「タスク」クラスを実装したい場合。インスタンス間のPHPクラス変数

class Tasks 
{ 
    public $title; 
    public $description; 
    public $completionPercent; 
    public $contact; 

    public function __construct($title, $description, $completionPercent, $contact) 
    { 
     $this->title = $title; 
     $this->description = $description; 
     $this->completionPercent = $completionPercent; 
     $this->contact = $contact; 
    } 

    public function getTitle() 
    { 
     return $this->title; 
    } 

    public function getDescription() 
    { 
     return $this->description; 
    } 

    public function getCompletionPercent() 
    { 
     return $this->completionPercent; 
    } 

    public function getContact() 
    { 
     return $this->contact; 
    } 

    public function setTitle($title) 
    { 
     $this->title = $title; 
    } 

    public function setDescription($description) 
    { 
     $this->description = $description; 
    } 

    public function setCompletionPercent($completionPercent) 
    { 
     $this->completionPercent = $completionPercent; 
    } 

    public function setContact($contact) 
    { 
     $this->contact =$contact; 
    } 

} 

私はタスクを作成し、近くブラウザのように、後でそれにアクセスして、私が更新を持っている場合、数日後にそれに戻って来れば私の質問です:私はクラスを作成するために、次のコードを持っていますそれをどのように保存して再アクセスするのですか?私はデータベースを理解し、私が学ぶために使用している私の現在のサイトでそれらを頻繁に使用しますが、クラスをスキップしてデータベースを利用できると仮定すると、データベースのクラスからの情報の格納方法は論理的ではありません。私は、XML/jsonをファイルにシリアライズしたり保存したりしてクラスにアクセスすることができると読んでいますが、ファイルを配列に読み込んでその方法で使用できるのであれば、なぜクラスが必要なのかわかりません。私はOOPが重要だと知っていますが、私はまだクラスを定期的に使用し始めることができるので、プログラマーとして慣れ親しんで進歩させることができます。私は彼のことについてネット上でたくさん読んでいると確信していますが、私はちょうど私が欲しいものではないセッション変数にクラス変数を格納することを見つけ続けています。私が明確にすることができるものがあれば教えてください。私が最初にクラスを作ったら、私は$task1 = new Task(...);のようなことをやっていますが、ブラウザを閉じてログインし直しても、まだ$task1にアクセスできません。私はちょうど$task1->getTitle();を行うことができないので、どのように私はクラスを再初期化するのですか?

+1

あなたの質問は全く具体的ではありませんが、私はあなたが必要としていることをよく理解していません。とにかく私はORMを見てみるべきでしょう。http://stackoverflow.com/questions/1279613/what-is-私が学ぶことができる、そしてhttp://www.doctrine-project.org/またはあなた自身がグーグルで行うことができる他の実装 – scx

+1

ところで、あなたのゲッターとセッターは役に立たない。 1)あなたのプロパティは 'public'なので、setterは回避できます。 2)あなたのセッターは何もしていないので、直接財産へのアクセスを何も追加しません。 - プロパティを 'public'にしてgetters/setterを取り除くだけです。 – deceze

答えて

1

あなたは正しいです、あなたはどこかにそのような情報を格納する必要があり、そのための正しい場所はdbです。だから、問題は:あなたがdbに直接保存することができるのであれば、なぜあなたはクラス "タスク"を使用して作成する必要があるのですか?あなたは "クラスとオブジェクト"に基づいてアプリケーションを構築したいので、手続き型プログラミングを使わないようにします。したがって、完全にオブジェクト指向のアプリケーションを使用するためには、オブジェクトを使用してすべてのクラスを作成する必要があります。

したがって、アプリケーションはクラス/オブジェクトに基づいている必要があります。これは、あなたと他のいくつかの開発者が協力するものです。これで、そのオブジェクトからこのデータをデータベースに保存するだけです。つまり、このために追加のレイヤーを導入する必要があります。 Doctrine ORMがとてもうれしいです。オブジェクトをマッピングしてdbに変換します。通常、各クラスには独自のテーブルがあり、クラス内の各フィールドにはdbという独自の列があります(dbに保存する必要のあるクラスのみ)

ポイントは、他のオブジェクトのように、db(または他の場所)に保存する方法を知らなくてもアプリケーションを実行できます。あなたがする必要があるものは、

$task->save(); 

です。それだけです。そのタスクはdbに保存されます。

+0

私はクラスをデータベースに保存して10のタスクがあると言うと、数日後にこのページに戻ると、データベースからのデータを使ってオブジェクトとしてすべてのタスクを再作成する方法を教えてください。タスク1のようなタスクを作成するときは、$ tasks1 = new Tasks(...);を実行しますが、これらのオブジェクトに再びアクセスするにはどうすればよいでしょうか?私がこれをしなければならなかったときに私が取ったクラスでは、.get(index)(これはjavaにありました)、特定のアイテムが必要だった場合は、検索されたクラスを見つけるために何らかの検索を使用しなければなりませんでした。これはPHPでも同様に動作しますか? – AndyPet74

+0

これは使用するORMに依存しますが、タスクを取得するのはかなり簡単で簡単です。次のようになります:$ task = new Task(); $ allTask​​s = $ task-> fetchAll();この場合、$ allTask​​sは実際にはオブジェクトであるすべてのタスクの配列です。しかし、構文はORMに依存します。 Doctrineは非常に人気のあるORMです。symfony(フレームワーク)で動作する方法は、http://symfony.com/doc/current/book/doctrine.htmlをご覧ください。 –

2

クラスとオブジェクトは、コードとロジックを自己完結型ユニットに編成するのに役立ちます。それだけです。それは非常に重要です。ストレージの問題やその他の問題は扱いません。

はい、データベースにオブジェクトのデータを格納した後、データベースから再度読み取り、オブジェクトインスタンスを再度作成します。

input → new Task(..) → store object data in database 
read data from database → new Task(..) → display on website 

これは、データベースの配列を直接操作するよりも優れています。なぜなら、コードを整理することができるからです。たとえオブジェクトの寿命がほんの数分の1秒であっても、そのオブジェクトを使用するすべてのコードは、そのオブジェクトがどのように見えるか明確に定義されているので、より優雅に書けるようになります。配列はタイプなしです。あなたのアプリケーションがより複雑になるのは難しいものです。特に配列のみを使用するリファクタリングコードは非常に難しいです。

関連する問題