Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.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_Function - Fatal编程技术网

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
  • 当然,这个函数将所有内容打包在一起,完成后返回报告

命名函数很难实现。所以,每当你看到一个代码块有一个明显的名字,你就应该给它起这个名字。分离关注点很难。因此,每当你看到两个明显不同的关注点时,你应该将它们明确分开。重新排序操作很困难。因此,当您看到两个明显可以重新排序的操作时,您应该使它们易于重新排序。当然,编写只能使用一次的函数是有意义的。

主要是基于观点的:只有在有助于提供更多概览的情况下才能这样做。如果你可以将函数划分为逻辑部分,并且这样做对你来说更容易,那么你应该让缺乏大师话语的情况阻止你,那为什么不呢?大函数是分解成小函数的好选择。理想情况下,函数体中的代码不会超过几行。我认为这不是一个坏问题。即使只使用一次,也可以使用函数。理想情况下,代码块应该只做一件事,执行一次计算,一次计算。这使得处理逻辑流变得很容易,而不是陷入巨大的代码块中。看看坚实的原则:投票重新开放。我同意MrCode,函数不应该做一件事,也应该像这样命名一件事!因此,如果你有一个巨大的功能,它可能会做不止一件事;)把它分成小块……;)我认为这个问题几乎每天都是这样,应该有不同的观点来回答,这不也是关于学习的吗;听其他人讲述他们的观点和经验?也可以创建静态类(即仅包含静态辅助函数的类)。静态函数不好,请尝试使用静态负载测试适当的OOP代码。
$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};