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

时间:2010-04-30 09:05:51

标签: 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()? 我该如何解决这个问题?

3 个答案:

答案 0 :(得分:11)

我无法真正看到原始问题与接受的答案有何关联。如果我想确保某些代码不会被包含它的第三方脚本多次执行,我只需创建一个标志:

<?php

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

    define('FOO_EXECUTED', TRUE);
}

?>

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

答案 1 :(得分:3)

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

  

在软件工程中,单身人士   模式是一种用于的设计模式   实现数学概念   单身,通过限制   将类实例化为一个   宾语。这完全有用   需要一个对象来协调   整个系统的行动。这个概念   有时会推广到系统   那时运作效率更高   只存在一个对象,或者那个   将实例化限制为a   一定数量的物体(比如说五个)。   有人认为它是一种反模式,   判断它被过度使用,   引入了不必要的限制   唯一的一个实例的情况   实际上并不需要课程,而且   将全球国家引入   应用

根据OP评论进行更新:

请看这个:

<强> The Singleton Design Pattern for PHP

答案 2 :(得分:1)

刚刚为此写了一个课程。

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

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

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