2017-07-21 7 views
2

最近、私はPHPの方向付けをオブジェクト化しようとしています。OOP PHPのデータ格納方法の混乱

私はOOPを理解していますが、何らかの理由で、PHPで実装する際に問題が発生しています。

感覚がないように感じます。たとえば、Friendクラスがあるとします。それは、次のような多くの方法があります。

1)のgetName

2)getAge

3)のsendMessageをなど

..

ユーザーがWebページをロードする

、私は移入うデータベースからの友人オブジェクトの配列。これはすべてのユーザーの友人になります。

これまでのところ、意味があります。しかし、友人の情報を入手するためのアヤックスのリクエストをしてみましょう。データはもはや利用できません、正しいですか?

これは私が混乱しているところです。これらのオブジェクトにいつでもアクセスできると思ってアプリケーションを作成することはできません。だから、これはどういうふうに機能するのでしょうか?

友人をオブジェクトとして保存するのではなく、friendIDを受け取り、データベースからデータを取得するgetFriend()やgetFriendAge()などの関数を持つだけでいいですか?

私はオブジェクトに常に慣れていますが、PHPではWebページの初期読み込み時にしか存在しません。私のサイトはたくさんのajaxを使います。

私はこれを言葉にするのが難しいです。うまくいけば、私の混乱は解消されます。ありがとう!

+3

オブジェクトが常に存在するJavaScriptの世界から来ていると仮定します。 HTTPに基づいたWebアプリケーションでは、これらのオブジェクトは永続化されません。セッションを介して行われるか、何らかの並べ替えの識別子を渡してからデータを取り出すかどうかにかかわらず、必要なオブジェクトを再作成する必要があります。ほとんどのことを行うフレームワークとコーディング方法がありますので、常に存在するかのように見えます。あなたがしていることをセッションといいます。 – Mjh

+1

@Mjhあなたのコメントは回答として書かれなければなりません – Neodan

+0

私はあなたの混乱がPHPにあるとは思っていませんが、むしろより高いレベルの分散コンピューティングとクライアント/サーバーモデルの考え方です。 –

答えて

1

あなたは2つのオプションがあります:

  1. は、すべてあなたの "友人" のモデルはJsonSerializableを実装し、JS変数内のすべてのデータをプリロードしてもらいます。これには、すべてが一度プリロードされ、それが必要なときはいつでもクライアント側に置かれるという利点があります。しかし、これはメモリを占有して大量のデータになります

    <?php 
    $friends = $db->query("SELECT * FROM people JOIN friends WHERE friends.source_id='some user whos logged in'"); 
    ?> 
    <script> 
        window.friends = <?= json_encode($friends); ?>; 
        //friends can be used in your scripts within this page 
    
  2. APIを作成します。ユーザーは、彼らは、動的に必要しかし、いつもよりも、この少し遅くなって各要求の戻りトリップ遅延が何を取得、プリロードデータ:

    <script> 
        window.currentUserId= <?= some user whos logged in ?>; 
        $.ajax({ 
         url: "/friends.php", 
         data: { 
          source: currentUserId, 
          target: friendId 
         } 
        }); 
    </script> 
    

    どこかのファイルfriends.php内を

    <?php 
    $sourceId = filter_input(INPUT_GET,"source"); 
    $target = filter_input(INPUT_GET,"target"); //Variable names are hard 
    
    //Verify that current user can see the friends of $sourceId here 
    
    $friendQ = $db->prepare("SELECT * FROM people JOIN friends WHERE friends.source_id=?" and friends.target_id=?); 
    $friendQ->bindParam(1, $sourceId); //Assume this is PDO, it really doesn't matter 
    $friendQ->bindParam(2, $target); 
    if ($friendQ->execute()) { 
        //Get results and build your model object 
        echo json_encode($friend); 
        die(); 
    } else { 
        http_status_code(500); 
        die(); 
    } 
    

これは、各シナリオで必要な最小限のデータ量をロードする必要があることを指摘しています。ユーザーにページとデータをどのように提供するかは、ユーザーが誰で、どのようなユーザーにとって重要なのかによって異なります。最終的には、ユーザーとアプリケーションの要件に左右されます。

+0

だから、私は混乱が人々がPHPでOOPを使用する理由だと思います。 – Wyatt

+0

データベースアクセスAPIが必要な場合は、少なくともPHPの終わりではなく、OOPが必要ないかもしれません。人々はPHPでOOPを使用するのが普通です。なぜなら、PHPはデータでもっと多くのことをやりたいから、OOPでは、より簡単なコードを書くことができます。 – apokryfos