Php 是否应该仅在我多次使用函数时创建该函数?
有时我有非常大的函数,我觉得很难将它们“压缩”或分离成更小的函数,因为这些函数不会用于脚本的任何其他部分 因此,我想得到一些建议:我应该创建在脚本的其他部分中不会使用的函数,还是只在它们会被多次使用时才创建它们 谢谢 总结:Php 是否应该仅在我多次使用函数时创建该函数?,php,function,Php,Function,有时我有非常大的函数,我觉得很难将它们“压缩”或分离成更小的函数,因为这些函数不会用于脚本的任何其他部分 因此,我想得到一些建议:我应该创建在脚本的其他部分中不会使用的函数,还是只在它们会被多次使用时才创建它们 谢谢 总结: 用目录中的文件信息填充数组 逐行处理TXT,查看TXT中的ID是否与“已完成”文件数组匹配,并将其发布到外部产品中。如果没有,则检查其他数组以报告缺少的内容 拯救 在数组中找到的错误,然后将数组保存到errors.txt 文件。最后,返回报告 目前我的职能是: prot
- 用目录中的文件信息填充数组
- 逐行处理TXT,查看TXT中的ID是否与“已完成”文件数组匹配,并将其发布到外部产品中。如果没有,则检查其他数组以报告缺少的内容
- 拯救 在数组中找到的错误,然后将数组保存到errors.txt
- 文件。最后,返回报告
protected function processScanned()
{
try
{
// EJECUTAR BASH DE NAHUEL
//
//
$PdfCPList = $this->model->getDirFilenames( $this->model->dirCartasPorte, 'pdf' );
$PdfTBList = $this->model->getDirFilenames( $this->model->dirTicketsBalanza, 'pdf' );
$PdfCompList = $this->model->getDirFilenames( $this->model->dirCompletos, 'pdf' );
$PdfUnreconList = $this->model->getDirFilenames( $this->model->dirSinReconocer,'pdf' );
// Adjuntar Novedades
$newsToProcess = $this->model->getDirFilenames( $this->model->dirNovedades, 'txt', true);
$this->appendNewsFiles($newsToProcess);
$report = array();
$report['info'] = array(
'Documentos procesados correctamente'=>0,
'Fecha de última actualización de datos'=>date('d/m/Y H:i:s',(int)file_get_contents($this->model->uriTxtInfo)),
);
if($file = fopen( $this->model->uriTxtProcesar, 'r' ) )
{
$i = 0;
$errors_file = fopen($this->model->uriTxtErrores,'w');
while( $line = fgets( $file ) )
{
if( ! preg_match( '/^\s/', $line ) )
continue;
$lineData = array(
'id'=> substr($line,3,9),
'prefix'=>'1234-' . $i,
'suffix'=>'1234-' . $i,
'partner'=>'FAZON TIMBUES OMHSA',
'date'=>time() - 222,
);
$i++;
$keywordsToPublish = array(
'Nº de Operacion'=>$lineData['id'],
'Prefijo'=>$lineData['prefix'],
'Sufijo'=>$lineData['suffix'],
'Socio'=>$lineData['partner'],
'Fecha'=>date('Y/d/m',$lineData['date']),
);
if( $this->model->findInDocusearch( $lineData['id'] ) )
{
continue;
}
if( array_key_exists( $lineData['id'], $PdfCompList ) )
{
$lineData['docName'] = 'Carta de Porte - Ticket de Balanza';
$lineData['docId'] = 'CP-TB';
$lineData['path'] = $this->model->dirCompletos . '/' . $lineData['id'] . '.pdf';
if( $id = $this->model->publishInDocusearch( $lineData, $keywordsToPublish ) ) {
$report['info']['Documentos procesados correctamente']++;
link( $this->model->dirDocusearchRepo . '/' . $id . '.pdf',
$this->model->dirBackupCliente . '/' . $lineData['partner'] . '_' . date('Ymd',$lineData['date']) . '_' . $lineData['id'] . '.pdf'
);
}
unset( $PdfCompList[ $lineData['id'] ] );
}
else
{
fwrite($errors_file, $line); // Guarda la fila leida en el archivo de errores.
// Valores por defecto
$report[ 'errors' ][ $lineData['id'] ]['date'] = $lineData['date'];
$report[ 'errors' ][ $lineData['id'] ]['id'] = $lineData['id'];
$report[ 'errors' ][ $lineData['id'] ]['type'] = 'nn';
$report[ 'errors' ][ $lineData['id'] ]['actions'] = array();
// Valores por defecto
if( array_key_exists( $lineData['id'], $PdfCPList ) )
{
$report[ 'errors' ][ $lineData['id'] ]['reportMsg'] = 'Falta Ticket de Balanza.';
$report[ 'errors' ][ $lineData['id'] ]['type'] = 'cp';
unset( $PdfCPList[ $lineData['id'] ] );
}
elseif( array_key_exists( $lineData['id'], $PdfTBList ) )
{
$report[ 'errors' ][ $lineData['id'] ]['reportMsg'] = 'Falta Carta de Porte.';
$report[ 'errors' ][ $lineData['id'] ]['type'] = 'tb';
unset( $PdfTBList[ $lineData['id'] ] );
}
else
{
$report[ 'errors' ][ $lineData['id'] ]['reportMsg'] = 'Ningún archivo digitalizado.';
}
}
}
fclose( $file );
fclose( $errors_file );
$this->fileRename( $this->model->uriTxtErrores, $this->model->uriTxtProcesar);
foreach( $PdfCompList as $key=>$value )
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Falta en archivo de datos del sistema externo.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'co',
'actions'=>array('get','rename','delete'),
);
}
foreach( $PdfCPList as $key=>$value )
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Carta de Porte no utilizada.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'cp',
'actions'=>array('get','rename','delete'),
);
}
foreach( $PdfTBList as $key=>$value )
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Ticket de Balanza no utilizado.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'tb',
'actions'=>array('get','rename','delete'),
);
}
foreach( $PdfUnreconList as $key=>$value )
{
$report[ 'errors' ][ $key ] = array(
'reportMsg'=>'Documento no reconocido.',
'date'=>$value['date'],
'id'=>$key,
'type'=>'un',
'actions'=>array('get','rename','delete'),
);
}
return $report;
}
else
{
throw new Exception('No se pudo abrir el archivo TXT');
}
}
catch( Exception $e )
{
$this->mensaje = $e->getMessage();
header('HTTP/1.1 500 ' . $this->mensaje);
}
}
在SOLID中,您应该查看 在面向对象编程中,单一责任原则规定每个类都应该有单一的责任,并且责任应该完全由类封装。它的所有服务都应该与这一责任紧密结合 您还可以将其应用于单个函数-每个函数都应该是可读的,并执行为其创建的主任务 你似乎也在谈论匿名函数——一次性的 从: 您可以看到
$greet
函数如何返回其值
但是,如果您在代码中多次使用此函数,请使其成为一个真正的函数,您可以根据需要多次调用。这完全取决于您。 然而,
将代码块分成不同的函数可以使代码更具可读性(如果没有做得太多)。函数不仅用于代码的重复使用,还用于使代码更加组织化和易于理解。如果您试图阅读一个并行执行大量任务的长函数,您可能会迷失方向。但是,如果您使用此函数并将其某些部分拆分为较小的函数,并对其进行适当的命名,则该函数将变得更短、更清晰,以便您在将来维护,或者让下一个在您的项目中工作的程序员能够理解你所做的一切 此外,一个好的做法是创建处理某些更具体任务的对象。这将允许(在许多其他好处中)通过扩展类来更新代码,而不必损害原始功能 根据您的编辑,在您编写的“函数摘要”中可以找到一种确定是否应该将函数拆分为多个部分的好方法。当您有超过1-2个任务时,最好将其分解为单独的功能。我建议为以下各项编写一个函数:
- 用目录中的文件信息填充数组
- 逐行处理TXT,查看TXT中的ID是否匹配 “已完成”文件数组
- 在外部产品中发布阵列
- 签入其他数组以报告缺少的内容
- 保存在数组中找到的错误,然后将数组保存到 errors.txt
- 当然,这个函数将所有内容打包在一起,完成后返回报告
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};