控制 PHP 类的实例化次数!

控制 php 类的实例化次数!为了保证服务器资源的有效利用,而且一个类比方说模板啊,数据库什么的,在一个页面内只需要实例化一次!也就是在内存中只运行一个实例!那么为了避免重复实例化,那么控制 php 类的实例化次数,是很有必要的!方法其实很简单:就是给类一个外部接口,私有化(private)构造函数,抛弃可以在类外部使用new实例化该类的方法!以下,就是我给出的一个例子,相信大家一看就明白了!( PHP5 以上版本! )

<?php
class test{
   const name = ''test'';
   public static $havenew = false;
   public $name = ''我被限制为只能实例化一次了!'';
   private function __construct(){
  
   }
   function __destruct(){
    self::$havenew = false;
   }
   public function inter(){
    if(self::$havenew){
     echo ''类 ''.self::name.'' 已被实例化!'';
     return NULL;
    }else{
     self::$havenew = true;
     return new self;
    }
   }
}
$class1 = test::inter();
var_dump($class1);
echo ''<br />'';
$class2 = test::inter();
var_dump($class2);
?>

这里都是实例通过test里inter()这个方法实例化对象的!因为构造本身不可以直接访问,所以也不存在可以使用new 来实例化!

时间: 2024-11-05 17:23:43

控制 PHP 类的实例化次数!的相关文章

java类的问题-Java类的实例化,对象的声明,使用

问题描述 Java类的实例化,对象的声明,使用 有没有哪位大神帮忙解释一下图中的代码,本人是新手,希望各位前辈指教 解决方案 创建一个person类 类里面两个变量一个方法 方法体的内容是打印这个类里面变量的值 然后书上写错了 应该是person 不是person2 解决方案二: 书上说的很清楚了. 比如 int i = 1; 这个你懂么? i是一个int型的变量,初始化值指向一个整数1. 那么 helloworld c = new helloworld(); c是一个helloworld型的变

ava 实例化-两个类,实例化问题,实例化报错

问题描述 两个类,实例化问题,实例化报错 public class Paixu { public static void main(String[] args) { // Paixu px=new Paixu(); MaoPaoSort mp=new MaoPaoSort();//上面这里就开始报错了:No enclosing instance of type Paixu is accessible. Must qualify the allocation with an enclosing i

类对象实例化问题

问题描述 publicclassA{Stringnum,name;publicA(){}setNum(StringtmpNum){this.num=tmpNum;}setName(Stringname){this.name=name;}}publicstaticvoidmain(Stringargs[]){Aa;for(inti=0;i<10;i++){a=newA();a.setNum(""+i);}publicstaticvoidmain(Stringargs[]){for(

c++-C++类模板实例化的问题

问题描述 C++类模板实例化的问题 如何限制用户隐式实例化类模板类型,我知道函数的怎么限制,但是不会类的,求大神!! 解决方案 C++ 模板实例化C++模板实例化模板实例化(c++) 解决方案二: C++类模板实例化的问题 解决方案三: 如何限制用户隐式实例化类模板类型,我知道函数的怎么限制,但是不会类的,求大神!! 解决方案四: 解决方案五: qquityerws

静态成员变量,是不是在①该变量在被引用时 ②所在类被实例化时 这两种情况下会被实例化?

问题描述 静态成员变量,是不是在:①该静态成员变量在被引用时②所在类被实例化时这两种情况下会被初始化? 解决方案 解决方案二:静态成员变量一加载就存在,无需实例化解决方案三:引用1楼xuzuning的回复: 静态成员变量一加载就存在,无需实例化 你好,我说的是被赋初值(初始化)的问题,一被加载就有初始值了,还是该静态成员变量在被引用时或所在类被实例化时才被赋初始值??

class-模板类的实例化问题,,,

问题描述 模板类的实例化问题,,, 看代码: a.h: template class A { public: virtual void Print() = 0; }; b.h: #include "a.h" #include template class B:public A { public: B(); B(T t) :data(t){} void Print(){ std::cout << "Class B print the value of data:&q

c#中定义三个类,在第二个类中实例化第一个类,怎样在第三个类中存数据到第二个类实例的第一个类。

问题描述 c#中定义一个点的数组类,然后在另一个类中实例化点并赋值点的x,y,然后再另外建一个类读取点的近似坐标,怎样把近似坐标存入之前的那个已经有了x,y的点数组?求大神!!! 解决方案 解决方案二:第二个类中将第一个类的实例属性public出来,或者暴露相关设置方法解决方案三:list<T>解决方案四:如果把你提到的类,依次标记为clsA,clsB,clsC,那么clsB至少含有字段privateclsAxxx,privateList<clsA>xxx,分别是:存储点,存储近似

c++类的实例化,有没有new的区别

A a; A * a = new a(); 以上两种方式皆可实现类的实例化,有new的区别在于: 1.前者在堆栈中分配内存,后者为动态内存分配,在一般应用中是没有什么区别的,但动态内存分配会使对象的可控性增强. 2.不加new在栈中分配内存 3.大程序用new,小程序直接申请 4.只是把对象分配在堆栈内存中 5.new必须delete删除,不用new系统会自动回收内存 起初刚学C++时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有

_awr_sql_child_limit是否能控制awr记录sql执行次数的问题

在ACOUG中国行长沙站的活动上分亨了一个关于high version count的主题,在活动中老盖提到在AWR报告的SQL ordered by Version Count部分,当SQL的version count大于等于200时就不会记录SQL的Executions,但是今天在优化SQL时仔细观察了一下情况并不是这样.以下是10.2.0.4的一个AWR报告的SQL ordered by Version Count 下面是11.2.0.1.0的一个AWR报告的SQL ordered by V