问各位大侠,我在完成的时候,类实例化的时候,一般一个页面 new 一次,但可能会忘记自己已经实例化过了,在写构造函数的时候    function logic($uinfo)
    {
        self::$ouname;
        self::$ouwd=$uinfo;
    } 
    private function logic($uinfo)
    {
        self::$ouname;
        self::$ouwd=$uinfo;
    } 这两种构造函数,哪种可以保证类的实例化一个页面只进行一次,或者说 我的理解直接就是错的解法应该是哪种???期待,想理解的更深一点盼大侠指点

解决方案 »

  1.   

    晕,单件模式啊
    将构造函数定义成private
    再定义一个static 变量,再定义一个init 函数就OK了
      

  2.   

    只new一次的话,class存在还有意义么?
      

  3.   

    保护服务器资源,如果一个页面内同一个类的实例化次数多了,那么每次实例,都会挂到内存现在就是想确保一个页面同一个类只有一次new,只使用他的方法就可以了我表达的不知道是否正确?现在就是想了解保证 一个页面  同一个 类 实例化 只有一次定义 private 构造函数,给类外部接口如上 :
        private function logic($uinfo)
        {
            self::$ouname;
            self::$ouwd=$uinfo;
        } 
        public function add()
       {
            echo "Uname:'".self::$ouwd->传入的参数."'";
        }5楼的兄弟:init 函数的定义如何操作?
      

  4.   

    class ophp
    {
    static public $ouname;
    static public $oupwd ; function ophp()
    {
    self::$ouname = '';
    self::$oupwd='';
    }
    }
    class phptest
    {
       static private $_ophptest;
       private function phptest($ophptest='')
       {
    self::$_ophptest = $ophptest;
    //return self::$a;
       }
       public function oadd()
       {
          $Sql="数据uname='".self::$_ophptest->ouname."',密码upwd='".self::$_ophptest->oupwd."'";
    echo $Sql;
       }
    }以下是 运行结果,我理解错了,郁闷
       private function phptest($ophptest='')
       {
    self::$_ophptest = $ophptest;
    //return self::$a;
       }
    的时候,
       
       抛弃外部 new phptest();
       1:
       $oophp = new ophp();
       $oophp->ouname='shang';
       $oophp->oupwd='wai';
       $lophp=new phptest($oophp);  Fatal error: Call to private phptest::phptest() from context   2:
       echo phptest::oadd($oophp);  Notice: Trying to get property of non-object 
      

  5.   

    private私有函数,不能在类外部调用.
     
      

  6.   

    php4/5差别很大,OO在php5中速度快很多
      

  7.   

    static function init(){
            if(self::$__instance == NULL){
                self::$__instance = new class_name;
            }
            return self::$__instance;
        }