繁体   English   中英

如何在PHP中执行一次代码块?

[英]How can I execute a block of code exactly once in PHP?

我有一个带有类定义的main.php文件。 其他php文件使用此main.php文件

//main.php

<?php

class A{


}

//I want to execute the following statements exactly once    

$a = new A();
/*
Some code 
*/


?>

我在其他php文件中使用main.php

//php1.php
<?php
require_once("main.php");

$b = new A();

/* 
Some code
*/

?>

//php2.php
<?php
require_once("main.php");

$b = new A();

/* 
Some code
*/

?>

在PHP中是否有任何语句如execute_once()? 我该如何解决这个问题?

我真的不明白原始问题与接受的答案有什么关系。 如果我想确保某些代码不被包含它的第三方脚本多次执行,我只需创建一个标志:

<?php

if( !defined('FOO_EXECUTED') ){
    foo();

    define('FOO_EXECUTED', TRUE);
}

?>

Singleton模式只强制实例化一个类的所有变量实际指向同一个实例。

我认为你需要Singleton模式 它只创建一次类的实例,并在每次请求时返回相同的实例。

在软件工程中,单例模式是一种设计模式,用于通过将类的实例化限制为一个对象来实现单例的数学概念。 当需要一个对象来协调整个系统的操作时,这非常有用。 该概念有时被推广到当仅存在一个对象时更有效地操作的系统,或者将实例化限制为特定数量的对象(例如,五个)的概念。 有些人认为它是一种反模式,判断它被过度使用,在实际上不需要类的唯一实例的情况下引入了不必要的限制,并将全局状态引入应用程序。

基于OP评论更新:

请看这个:

PHP的Singleton设计模式

刚为此写了一堂课。

由于它被静态调用,如果包含在应用程序的引导级别中,变量应该贯穿整个应用程序。

您还可以选择执行特定次数的代码。

class exec{    
  public static $ids = array();
  public static function once($id){
    if(isset(static::$ids[$id])){
      return false;
    } else {
      if(isset(static::$ids[$id])){
        static::$ids[$id]++;
      } else {
        static::$ids[$id] = 1;
      }
      return true;
    }
  }
  public static function times($id, $count=1){
    if(isset(static::$ids[$id])){
      if($count == static::$ids[$id]){
        return false;
      } else {
        static::$ids[$id]++;
        return true;
      }
    } else {
      static::$ids[$id] = 1;
      return true;
    }
  }
}

//usage

foreach(array('x', 'y', 'z') as $value){
  if(exec::once('tag')){
    echo $value;
  }
}

//outputs x

foreach(array('x', 'y', 'z') as $value){
  if(exec::times('tag2', 2)){
    echo $value;
  }
}

//outputs xy

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM