在长脚本(PHP)中死亡或退出是一种好的做法吗

在长脚本(PHP)中死亡或退出是一种好的做法吗,php,exit,die,Php,Exit,Die,我看了不同的答案,除了这一个,我想知道当继续执行无用时,die()是否会对我的代码产生负面影响 例如,如果我有一个包含许多条件的长脚本,在给定的点上,一旦我所寻找的条件成功,我就不需要我的脚本继续测试其他条件 $a = 'a'; if($a == 'a'){ //long script die(); } if($b == 'a'){ //long script die(); } if($c == 'a'){ //long script die(); } 这是一个简单且可能愚蠢

我看了不同的答案,除了这一个,我想知道当继续执行无用时,die()是否会对我的代码产生负面影响

例如,如果我有一个包含许多条件的长脚本,在给定的点上,一旦我所寻找的条件成功,我就不需要我的脚本继续测试其他条件

$a = 'a';

if($a == 'a'){
 //long script
 die();
}

if($b == 'a'){
 //long script
 die();
}

if($c == 'a'){
 //long script
 die();
}
这是一个简单且可能愚蠢的例子,还有其他更优雅的解决方案,但它有助于解释我的问题;如果在第一个条件下I
die()
,它将停止执行其余的代码,理论上,这将优化性能,或者可能不会

最好让脚本结束,还是
die()
实际上会加快进程?如果
die()
有负面影响,当然还有其他方法,比如创建标志让脚本跳过某些代码块,我只想知道
die()
的负面影响(如果有)

例如: -就内存而言,
die()
是否会继续使用内存,或者可能会释放更多内存。 -就时间而言,执行将
die()。想象一下,在代码中可能有一个可以避免的繁重过程

我想明确这一点,我知道必须有许多其他方法来提高效率,缩短脚本、开关、标志等。我只想了解使用
die()
是否有任何负面影响


多亏了

使用die/exit是代码设计糟糕的标志,它最终会导致代码错误。从这个意义上讲,这将产生负面影响。当exit运行时,它在调用shutdown函数(如果是shutdown)后终止脚本执行 回调函数已注册)。如果与成功终止脚本执行的0(零)一起使用,则唯一一次die/exit生成正输出。所有其他事件都指向错误。因此,不需要使用exit

坦白地说,我应该补充一点,如果答案是使用exit/die,那么要么问题是错误的,要么脚本编写得很糟糕。在您的示例中,如果脚本需要根据某个值运行,那么代码应该如下所示:

abstract class AbstractProcess {
  abstract public function run();
}

class A extends AbstractProcess {
  public function run() { echo 'A'; }
}

class B extends AbstractProcess {
  public function run() { echo 'B'; }
}

class C extends AbstractProcess {
  public function run() { echo 'C'; }
}

class ProcessException extends \Exception { }

class Processor
{
  private $handlers = [];

  public function addProcess($key, AbstractProcess $process) 
  {
    $this->handlers[$key] = $process;
  }

  public function run($val)
  {
    if ( !isset($this->handlers[$val]) )
    {
      throw new ProcessException('Cannot process value: ' .  $val);
    }
    return $this->handlers[$val]->run();
  }
}
这可能更复杂。这不是重点。它归结为拥有一个好的异常处理策略。您可以在线找到数百种关于异常以及如何实现异常处理的资源。大多数现代框架都内置了这一功能——您只需引入异常处理逻辑。我们在try/catch块中运行上述代码并处理异常:

try {

  $processor = new Processor();

  $processor->addProcess('a', new A());

  $processor->addProcess('b', new B());

  $processor->addProcess('c', new C());

  $processor->run('5');

} catch ( \Exception $e) {

  if ( $e instanceof ErrorException ) {
    // handle error exception
  }
  if ( $e instanceof ProcessException ) {
    echo $e->getMessage();
  }
  // ..
}

现在,如果我们退出而不是处理异常,那么我们将引入一个很难找到的bug。如果脚本在后台运行,我们甚至可能不知道这样的“退出”。

我不喜欢这两种情况<代码>退出
更受欢迎,但通常在基于控制器的环境(MVC、MVVM)中,我想您会
返回
口味问题。我通常抛出异常,捕获更高的异常,并记录异常。剧本到此结束。但这只有在你们以后想检查它们的时候才有用,若你们不在乎,你们也可以退出(或者去死)?我从手册页上看到的是
die-相当于退出
看看你用die保存的所有字节!这个问题不是基于意见的,不应该搁置。“我只是想了解使用die()是否有任何负面影响。”-不。。。好吧,除非你有恐死症。我只会在测试环境中使用这两种方法进行调试。