我有一个带有类定义的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模式只强制实例化一个类的所有变量实际指向同一个实例。
我想你需要的 单身人士模式。它只创建一次类的实例,并在每次请求时返回相同的实例。
在软件工程中,单身人士
模式是一种用于的设计模式
实现数学概念
单身,通过限制
将类实例化为一个
目的。这完全是有用的
需要一个对象来协调
整个系统的行动。这个概念
有时候会推广到系统
在什么时候运作更有效率
只存在一个对象,或者那个
将实例化限制为a
一定数量的物体(比如五个)。
有人认为它是一种反模式,
判断它被过度使用,
引入了不必要的限制
唯一的一个实例的情况
实际上并不需要课程,而且
将全球国家引入
应用。
基于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