OOP PHP与数据存储方式的混淆
最近,我一直在尝试面向对象我的PHP 我理解OOP,但由于某种原因,我在用Php实现OOP时遇到了麻烦 我觉得这似乎毫无意义。例如,假设我有一个朋友班。它有许多方法,例如: 1) getName 2) 获取 3) 发送消息 等等 当用户加载网页时,我会从数据库中填充一个朋友对象数组。这将是所有用户的朋友 到目前为止,这是有道理的。但是,假设我发出一个ajax请求来获取一个朋友的信息。数据不再可用,对吗 这就是我困惑的地方。我无法创建应用程序,因为我总是可以访问这些对象。那么,这通常是如何工作的呢 不将好友存储为对象,而只使用诸如getFriend()或getFriendAge()之类的函数来接收friendID并从数据库中提取数据,这有意义吗 我习惯于对象总是存在的,而在Php中,它们只存在于网页的初始加载上。我的网站使用了很多ajax 我很难用语言表达出来,希望我的困惑会得到澄清。谢谢 您有两种选择:OOP PHP与数据存储方式的混淆,php,object-lifetime,Php,Object Lifetime,最近,我一直在尝试面向对象我的PHP 我理解OOP,但由于某种原因,我在用Php实现OOP时遇到了麻烦 我觉得这似乎毫无意义。例如,假设我有一个朋友班。它有许多方法,例如: 1) getName 2) 获取 3) 发送消息 等等 当用户加载网页时,我会从数据库中填充一个朋友对象数组。这将是所有用户的朋友 到目前为止,这是有道理的。但是,假设我发出一个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();
}