有关类的初始化函数与构造函数

walden 发布于 2012/03/16 16:42
阅读 298
收藏 0
PHP
我见过很多类都有初始化函数 既然有构造函数了 为啥还要有初始化函数呢 ?
加载中
0
小Leo
小Leo
贴代码~
0
Yisen
Yisen
能说明下啥是初始化函数不?
walden
walden
我也说不大明白 关注高手解答
0
小Leo
小Leo
http://php.net/manual/zh/language.oop5.decon.php
0
walden
walden

引用来自“都给”的答案

贴代码~

代码太长了 是关于PHP缓存类的 

我帖一部分出来吧

<?php 

class PHPCache 

private static $_instance = NULL; 

 

protected $_options =array(); 

 

/** 

* 初始化构造函数 

* $cacheDir : 缓存文件目录 

* $expire : 缓存文件有效期,单位为秒 

* $file_ext : 缓存文件后缀 

*/ 

public static function init($cacheDir='./cache',$expire=1800,$file_ext='.htm') 

$instance = self::getInstance(); 

//判断缓存目录是否有效 

if($instance->isValidCacheDir($cacheDir)) 

$instance->_options['cache_dir']=rtrim($cacheDir,'/') . '/'; 

$instance->_options['expire']=$expire; 

$instance->_options['file_ext']=$file_ext; 

$instance->_options['cache_file_url']=$instance->getCacheFileUrl(); 

if($_SERVER['REQUEST_METHOD']=='GET') 

//缓存未过期则读取缓存文件 

if($instance->isExpired()) 

$instance->readCache(); 

exit; 

else 

//自动缓存 

ob_start(array($instance,"autoCache")); 

else 

//不是GET请求则删除缓存 

if(file_exists($instance->_options['cache_file_url']))

unlink($instance->_options['cache_file_url']); 

/** 

* 获取当前对象 

*/ 

public static function getInstance() 

if(self::$_instance==NULL) 

self::$_instance=new self(); 

return self::$_instance; 

}

?>

我好像有一点点明白了

0
deleted
deleted
单例模式
walden
walden
不懂 跟PHP设计模式有关吗 能推荐点资料吗 谢谢@yisen :
Yisen
Yisen
@华定平 : 只能创建一个实例的设计模式
walden
walden
啥叫单例模式 愿闻其详
0
中山野鬼
中山野鬼
我独立写个帖子回你问题了。
walden
walden
非常感谢 我记得上次你也很热情地帮了我
0
中山野鬼
中山野鬼
只是我懒,其实一直想把一些程序编写的心得拿出来交流。也希望通过大家的指正让自己修正理解上的错误。只不过一直没有目标去系统的处理。只能见问题给出自己个人的想法了。
walden
walden
嗯 我就是从开源软件入门的 如果世上没有开源 估计我就也就进不了大门了
0
ValueError
ValueError

有时候会希望实例化了类,但并不立即初始化,比如 lazy load 模式。这才出现这种分离。这种做法在 Python Web 框架 Flask 的插件中很常见:

class MyExtension(object):
    def __init__(self, app=None):
        if app:
            self.init_app(app)

    def init_app(self, app):
        self.app = app
        self.blablabla()

于是你可以这么做:

app = Flask()
ext = MyExtension(app)

也可以这么做

ext = MyExtension()

def create_app():
    app = Flask()
    ext.init_app(app)
    return app
ValueError
ValueError
@华定平 : 当成伪代码就好 : )
walden
walden
虽然不懂Python 但还是感谢
0
小Leo
小Leo

构造方法  当类实例化 立刻调用 构造方法。

这时有几个问题

1.N个类中 其中有几个类 是不想直接使用“构造方法” 进行初始化

2.在统一框架中 控制 框架规定的初始化函数 比 “构造方法”相对 灵活

个人观点 如有错误 感谢指正

返回顶部
顶部