欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

下面这段另类的写法是为了啥

程序员文章站 2024-02-16 17:58:28
...
下面这段写法中,问题一:构造函数里面竞然是空的,并且更另类的是他的下面竟然是实例化,如果构造函数是空的,下面如何实例化呢
道理是啥?

';    	//请求时间        $trace[Language::get('nc_debug_request_time')] =  date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']).'
'; //系统运行时间 $query_time = number_format((microtime(true)-StartTime),3).'s'; $trace[Language::get('nc_debug_execution_time')] = $query_time.'
'; //内存 $trace[Language::get('nc_debug_memory_consumption')] = number_format(memory_get_usage()/1024/1024,2).'MB'.'
'; //请求方法 $trace[Language::get('nc_debug_request_method')] = $_SERVER['REQUEST_METHOD'].'
'; //通信协议 $trace[Language::get('nc_debug_communication_protocol')] = $_SERVER['SERVER_PROTOCOL'].'
'; //用户代理 $trace[Language::get('nc_debug_user_agent')] = $_SERVER['HTTP_USER_AGENT'].'
'; //会话ID $trace[Language::get('nc_debug_session_id')] = session_id().'
'; //执行日志 $log = Log::read(); $trace[Language::get('nc_debug_logging')] = count($log)?count($log).Language::get('nc_debug_logging_1').'
'.implode('
',$log):Language::get('nc_debug_logging_2'); $trace[Language::get('nc_debug_logging')] = $trace[Language::get('nc_debug_logging')].'
'; //文件加载 $files = get_included_files(); $trace[Language::get('nc_debug_load_files')] = count($files).str_replace("\n",'
',substr(substr(print_r($files,true),7),0,-2)).'
'; return $trace; }}


回复讨论(解决方案)

这种写法是单例模式。

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

http://baike.baidu.com/view/1859857.htm

构造函数是否为空,和实例化没有关系
构造函数为空,只不过表示实例化时没有用户自定义动作。并且也不执行父类(如果有的话)的构造函数

private function __construct(){}
表示该类不能在外部实例化,私有方法只能在定义它的类里面访问
在类外面 new Tpl
将会有一个 Call to private Tpl::__construct() from invalid context 的致命错误

这是单例模式的写法,但少了
private function __clone(){}
如果单例模式的对象能被克隆的话,就违背了单例的初衷

对于你的这个类,单不单例已经没有意义了,因为他所有的属性和方法都是静态的
因为静态的属性是在各实例间共享的