有时我有非常大的函数,我觉得很难"压缩"或分成更小的函数,因为函数不会在脚本的任何其他部分使用.
所以,我想对它提出一些建议:我应该创建不会在脚本的其他部分使用的函数,还是应该只在多次使用它们时才创建它们?
谢谢!
摘要:
目前我的职责是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
Yot*_*mer 14
这完全取决于你.
但是,
将代码块分隔成不同的函数可以使代码更具可读性(当它没有做得太过分时).函数不仅用于重复使用代码,它们还旨在使代码更易于理解和更易于理解.如果你试图阅读一个并行执行大量任务的长函数,你可能会迷失方向,但是如果你使用这个函数并将它的某些部分分解成具有适当命名的较小函数,那么函数将会更短,更清晰.保持未来或为您的项目工作的下一个程序员了解您已完成的工作.
此外,一个好的做法是创建对象,将处理一些更具体的任务.这将允许(在许多其他好处中)通过扩展类来更新代码,而不必损害原始功能.
根据您的编辑,确定是否应该将功能拆分为碎片的好方法可以在您编写的"功能摘要"中找到.当你有超过1-2个任务时,最好分成不同的功能.我建议为以下各项编写一个函数:
归档时间: |
|
查看次数: |
1296 次 |
最近记录: |