Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP PHP与数据存储方式的混淆_Php_Object Lifetime - Fatal编程技术网

OOP PHP与数据存储方式的混淆

OOP PHP与数据存储方式的混淆,php,object-lifetime,Php,Object Lifetime,最近,我一直在尝试面向对象我的PHP 我理解OOP,但由于某种原因,我在用Php实现OOP时遇到了麻烦 我觉得这似乎毫无意义。例如,假设我有一个朋友班。它有许多方法,例如: 1) getName 2) 获取 3) 发送消息 等等 当用户加载网页时,我会从数据库中填充一个朋友对象数组。这将是所有用户的朋友 到目前为止,这是有道理的。但是,假设我发出一个ajax请求来获取一个朋友的信息。数据不再可用,对吗 这就是我困惑的地方。我无法创建应用程序,因为我总是可以访问这些对象。那么,这通常是如何工作的呢

最近,我一直在尝试面向对象我的PHP

我理解OOP,但由于某种原因,我在用Php实现OOP时遇到了麻烦

我觉得这似乎毫无意义。例如,假设我有一个朋友班。它有许多方法,例如:

1) getName

2) 获取

3) 发送消息

等等

当用户加载网页时,我会从数据库中填充一个朋友对象数组。这将是所有用户的朋友

到目前为止,这是有道理的。但是,假设我发出一个ajax请求来获取一个朋友的信息。数据不再可用,对吗

这就是我困惑的地方。我无法创建应用程序,因为我总是可以访问这些对象。那么,这通常是如何工作的呢

不将好友存储为对象,而只使用诸如getFriend()或getFriendAge()之类的函数来接收friendID并从数据库中提取数据,这有意义吗

我习惯于对象总是存在的,而在Php中,它们只存在于网页的初始加载上。我的网站使用了很多ajax

我很难用语言表达出来,希望我的困惑会得到澄清。谢谢

您有两种选择:

  • 让您所有的“朋友”模型实现
    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
    

    我假设您来自对象始终存在的JavaScript世界。对于任何基于HTTP的web应用程序,这些对象都不会持久化。它们是根据每个请求创建的(各种语言和堆栈优化了这一步)-无论是通过会话还是通过传递某种标识符然后拉出数据-都需要重新创建所需的对象。有一些框架和编码实践为您完成了大部分工作,因此在您看来,它似乎总是存在的。您所追求的东西称为会话。@Mjh您的评论必须以回答的形式撰写。我认为您的困惑不在于PHP,而在于更高层次的分布式计算概念和客户机-服务器模型。当您的Web服务器打印是PHP的输出时,它会破坏运行时。你所有的对象都消失了。所以,我想我的困惑是为什么人们在Php中使用OOP。如果你只需要一个数据库访问API,那么OOP可能没有必要,至少在Php端没有必要。人们在PHP中使用OOP是因为他们通常希望PHP对数据做更多的事情,OOP允许他们编写更干净、更易于维护的代码。
    
    <script>
         window.currentUserId= <?= some user whos logged in ?>;
         $.ajax({
             url: "/friends.php",
             data: {
                 source: currentUserId,
                 target: friendId
             }
         }); 
    </script>
    
     <?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();
     }