PHP PSR1回波副作用

PHP PSR1回波副作用,php,psr-1,php-psr,Php,Psr 1,Php Psr,我正在开发一个命令行应用程序,我有一个处理业务逻辑的类。这个类有一些方法,可以循环来自\Generator的所有数据,并回显一些值 我使用\Generator,因为这个命令行应用程序将循环数十万个数据。我需要它在命令行中打印/回显,并动态输出 //SomeClass.php 上课{ //…这里有一些代码 公共函数someMethod($someArgs){ foreach($this->isFromAGenerator()作为$data){ //上面的数据来自'isFromAGenerator'

我正在开发一个命令行应用程序,我有一个处理业务逻辑的类。这个类有一些方法,可以循环来自
\Generator
的所有数据,并回显一些值

我使用
\Generator
,因为这个命令行应用程序将循环数十万个数据。我需要它在命令行中打印/回显,并动态输出

//SomeClass.php
上课{
//…这里有一些代码
公共函数someMethod($someArgs){
foreach($this->isFromAGenerator()作为$data){
//上面的数据来自'isFromAGenerator'
//是一个正在生成的数据
echo$this->isAnotherMethod($data);
}
}
}
//index.php
$someClass=新的someClass();
$someClass->someMethod();
这工作正常,运行平稳,但这直接违反了PSR1 2.3的副作用


如何在不违反PSR1副作用的情况下实现此解决方案?

我在其他地方找到了答案(discord php服务器)。这就是我的方法

//SomeClass.php
上课{
//…这里有一些代码
公共函数someMethod($someArgs,callable$callback){
foreach($this->isFromAGenerator()作为$data){
//上面的数据来自'isFromAGenerator'
//是一个正在生成的数据
调用用户函数($callback,$this->isAnotherMethod($data));
}
}
}
//index.php
$someClass=新的someClass();
$someClass->someMethod($args,function($data){
回波数据;
}); 

而不是
echo
SomeClass
方法中使用它。我只是传递了一个回调函数作为第二个参数,并在index.php上回显它。我在其他地方(discord php服务器)找到了答案。这就是我的方法

//SomeClass.php
上课{
//…这里有一些代码
公共函数someMethod($someArgs,callable$callback){
foreach($this->isFromAGenerator()作为$data){
//上面的数据来自'isFromAGenerator'
//是一个正在生成的数据
调用用户函数($callback,$this->isAnotherMethod($data));
}
}
}
//index.php
$someClass=新的someClass();
$someClass->someMethod($args,function($data){
回波数据;
}); 

而不是
echo
SomeClass
方法中使用它。我只需传递一个回调函数作为第二个参数,并在index.php上回显它,而不是回显循环中的数据,您可以将它推送到一个数组中,然后您的方法返回该数组。这样,调用方就可以根据上下文输出它。如果您需要相同的数据,但以后会以不同的方式使用,也可以重用相同的代码。PSR部分的目的是将单个文件限制为类声明或过程代码(例如,实际实例化和调用类方法)。由于
SomeClass.php
index.php
是两个独立的文件,至少就我的理解而言,我敢肯定您完全符合“法律”的精神。写一个类是不可能的,否则它会产生任何回响。@MagnusEriksson啊,是的,但是循环将通过数十万个数据。这就是为什么我使用生成器,所以它在生成时会返回一些值。我将更新我的问题,因为SPSR不是法律,而是建议/建议。如果其中有什么东西让你觉得很难,那就改变它以适应你的需要。只要您在整个代码库中保持一致,并且清楚该方法的作用(比如调用它
outputFoo()
),我看不出它“按原样”有什么问题。您可以将它推送到一个数组中,而不是回显循环中的数据,然后方法返回该数组。这样,调用方就可以根据上下文输出它。如果您需要相同的数据,但以后会以不同的方式使用,也可以重用相同的代码。PSR部分的目的是将单个文件限制为类声明或过程代码(例如,实际实例化和调用类方法)。由于
SomeClass.php
index.php
是两个独立的文件,至少就我的理解而言,我敢肯定您完全符合“法律”的精神。写一个类是不可能的,否则它会产生任何回响。@MagnusEriksson啊,是的,但是循环将通过数十万个数据。这就是为什么我使用生成器,所以它在生成时会返回一些值。我将更新我的问题,因为SPSR不是法律,而是建议/建议。如果其中有什么东西让你觉得很难,那就改变它以适应你的需要。只要您在整个代码库中保持一致,并且清楚该方法的作用(比如调用它
outputFoo()
),我就不认为它“按原样”有什么问题。