Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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
如何在PHP应用程序中处理应用程序内部的数据传递?_Php_Oop_Data Structures_Architecture_System - Fatal编程技术网

如何在PHP应用程序中处理应用程序内部的数据传递?

如何在PHP应用程序中处理应用程序内部的数据传递?,php,oop,data-structures,architecture,system,Php,Oop,Data Structures,Architecture,System,因此,如果我需要在应用程序内部传递数据,有没有一种很好的可预测的方法来传递数据 我希望能够看到一个函数,并知道集合中传递给函数的是什么 数组是一种不可预测的数据结构,因此您永远不知道将得到什么 我觉得最好用命名属性定义一个对象,并将其传递给应用程序,而不是数组,因为这样就有了某种定义 问题是,在某个文件夹的某个地方,只会有一堆对象累积在一起 想知道有人对这件事的看法,还有其他的选择吗?你可能有一个更大的问题(尽管是隐藏的)。代码中的结构不应跨越多个层边界 如果某个结构(不管它是数组还是对象)跨越

因此,如果我需要在应用程序内部传递数据,有没有一种很好的可预测的方法来传递数据

我希望能够看到一个函数,并知道集合中传递给函数的是什么

数组是一种不可预测的数据结构,因此您永远不知道将得到什么

我觉得最好用命名属性定义一个对象,并将其传递给应用程序,而不是数组,因为这样就有了某种定义

问题是,在某个文件夹的某个地方,只会有一堆对象累积在一起


想知道有人对这件事的看法,还有其他的选择吗?

你可能有一个更大的问题(尽管是隐藏的)。代码中的结构不应跨越多个层边界

如果某个结构(不管它是数组还是对象)跨越两层,那么,除非是有意的妥协,否则这是一个迹象,表明可能存在“架构缺陷”,表明代码库的脆弱性。这样的横切数据结构会成为代码库中的错误

如果你有跨越3层或更多层边界的结构,你的代码库就完蛋了。它变成了一个“在它产卵之前用火杀死它”的项目

我使用的解决方案是:

不要让专门的“数据结构”被传递,而是关注您的业务逻辑。您可以在层中的某个点创建它,在该点上您将实际使用它的逻辑相关行为,并将其注入或返回到另一个层,以仅影响它

有点像这样:

public function loginWithPassword(Entity\EmailIdentity $identity, string $password): Entity\CookieIdentity
{
    if ($identity->matchPassword($password) === false) {
        throw new PasswordMismatch;
    }
    $identity->setPassword($password);
    $this->updateEmailIdentityOnUse($identity);
    $cookie = $this->createCookieIdentity($identity);

    return $cookie;
}

这种方法中传递的不是某种“数据结构”,而是一个完整的逻辑实体,它包含特定的、与业务相关的行为。

“在某个文件夹中某个地方积累的一堆对象”-您是否将它们存储为文件?您应该如何传递它们取决于您的应用程序,我们对此一无所知。一般来说,我更喜欢传递对象(称为值对象)而不是数组,因为这样你就可以定义哪些属性应该可用。这是我读过的最模糊的问题。请提供一些实际情况。谢谢马格纳斯。这正是我想要的。值对象。你把这些放在哪里?任何关于如何使用它们的最佳实践的建议?“将它们保存在哪里”-这完全取决于您的应用程序结构。你可以把它们放在任何你想要的地方。关于“如何使用它们”,它们是对象,所以使用它们…@jornsharpe你是对的,这是模糊的。一个例子是,如果我有一个带有单个参数的函数,它是一个数组,那么函数看起来是这样的:public function($some_array){}没有可预测的方法知道数组中有什么。但是如果do:public function(CustomObject$some_object){}我可以查看那个对象文件,知道传递给我的函数的是什么。然而,我觉得在一个文件夹中可能会积累一堆值对象,因为每个不同的功能都可能需要一个新的值对象。太棒了。我很喜欢这个。代替一些“抽象”的数据结构,传递更专注于特定领域的对象。问题在于,最初几次为您的域(以及创建伴随的类)找到一个好的结构是相当困难的。