php 中init方法,php init()和__construct() 区别

区别

__construct()

__construct(): 是PHP内置的构造函数,实例化之前 PHP 解析引擎自动调用,做一些初始化的工作或者外部服务器检测的工作。在实例化对象之前需要做的工作都写在这里

init() :

init()方法一般都是自己定义的,可以随便写名字,一般会在__construct() 中写 调用。功能和__construct()差不多但是需要自己写调用, 其实就是普通方法,只是这个方法大家一般默认都是用来初始化东西的。

protected function __construct

如果将 __construct 定义为 protected 那么就不能直接实例化了,需要添加一个额外的入口,这个入口一般是静态方法public static function instance

class Test {

public function init(array $config) {

echo "3: init..... \n";

var_dump($config,);

}

protected function __construct(array $config = array()) {

echo "2: __construct ..... \n";

phpversion() > "5.3" || exit("版本过低,请升级版本");

$this->init($config);

}

public function instance($config = array()) {

echo "1: instance ..... \n";

return new self($config);

}

}

$config = array("test"=>1);

$test = Test::instance($config);

var_dump($test);

如果不需要参数只需要将所有的参数$config去掉都好了

结果

1: instance .....

2: __construct .....

3: init.....

array(1) {

'test' =>

int(1)

}

class Test#1 (0) {

}

单例模式

class Singleton

{

/**

* Description:(1)静态变量,保存全局实例,跟类绑定,跟对象无关

* (2)私有属性,为了避免类外直接调用 类名::$instance,防止为空

*/

private static $instance;

/**

* Description:数据库连接句柄

*/

private $db;

/**

* Description:私有化构造函数,防止外界实例化对象

*/

private static function __construct()

{

}

/**

* Description:私有化克隆函数,防止外界克隆对象

*/

private function __clone()

{

}

/**

* Description:静态方法,单例访问统一入口

* @return Singleton:返回应用中的唯一对象实例

*/

public static function GetInstance()

{

if (!(self::$instance instanceof self))

{

self::$instance = new self();

}

return self::$instance;

}

/**

* Description:获取数据库的私有方法的连接句柄

*/

public function GetDbConnect()

{

return $this->db;

}

}

需要一个保存类的唯一实例的静态成员变量(通常$instance为私有变量)

构造函数和克隆函数必须声明为私有的,为了防止外部程序new类从而失去单例模式意义

必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值