首页 / PHP / PHP职责模式单例模式_PHP教程
PHP职责模式单例模式_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP职责模式单例模式_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2501字,纯文字阅读大概需要4分钟。
内容图文
![PHP职责模式单例模式_PHP教程](/upload/InfoBanner/zyjiaocheng/182/89cb194202384ce79c07b16edd96f962.jpg)
单例模式又称为职责模式,它用来在应用程序中创建一个单一的功能访问点。下面我们来探讨并且结结实实地掌握单例的思想还有应用。
在复杂的系统中,使用单例模式在维持应用程序状态的同步方面尤其有用。所有的单例类至少拥有以下三个元素:
- 一个标记为private的构造函数。
- 保存类的实例的静态成员变量。
- 访问这个实例的公共静态方法。
Program List:单例模式的类
'; $test->showColor(); // This will issue an E_USER_ERROR. //$test_clone = clone $test; ?>
程序运行结果:
I am constructed My color is !
从这个程序可以看出一些特别的东西。和普通的类不同,单例类是不能直接实例化的,它只能被自身实例化。要获得这种效果,__construct()方法必须被标记为private。如果试图用private构造函数构造一个对象,就会得到一个访问性级别的错误。
那么单例类如何起作用呢?单例类就是要向其它类提供一个实例,用它调用各种方法。单例类回通过内部存储的实例返回一个引用,所以单例类不会重复占用内存和系统资源,从而让应用程序的其它部分更好的使用资源。所以,你的数据库访问最好使用单例模式构建,那么就不会创建太多的数据库连接实例,从而让你的系统跑得更快。
一个空的__clone()方法很有必要,它可以防止对象被复制或者克隆。
self::$instance 可以检测到类是否已经被初始化。如果保存实例的静态成员为空或者还不是类自身的一个实例,那么这个实例将会被创建并保存到存放实例的变量中。
Program List:无private构造函数的单例
一个不严格的单例,没有private构造函数,也没有本身的引用。不知道还算不算模式了。
0 && $value < 100) self::$height = $value; } public function setWeight($value) { if($value > 0 && $value < 100) self::$weight = $value; } public function __toString() { return 'Fruit[height=' . self::$height . ', weight=' . self::$weight . ']'; } } // try to set data before any objects is created Fruit::$height = 55; $msm1 = Fruit::getInstance(); // use the getInstance() method $msm2 = new Fruit(); // use the default constructor $msm2->setWeight(78); // set data with an instantiated object echo $msm1 . '
'; echo $msm2 . '
'; echo Fruit::getInstance() . '
'; echo (new Fruit()); ?>
程序运行结果:
Fruit[height=55, weight=78] Fruit[height=55, weight=78] Fruit[height=55, weight=78] Fruit[height=55, weight=78]
Program List:数据库连接职责
_db = pg_connect('dbname=example_db'); } private __clone() {}; public static function getInstance() { if( ! (self::$_instance instanceof self) ) { self::$_instance = new self(); } return self::$_instance; } public function query($sql) { return pg_query($this->_db,$sql); } } ?>
如何使用这个单例类?
$db = Database::getInstance(); $db->query('SELECT * FROM example_table');
也就是获取对象的方法有些区别而已,使用起来与其它对象没有特别之处。
http://www.bkjia.com/PHPjc/752400.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752400.htmlTechArticle模式对于面向对象开发是相当重要的。一种模式可以帮助我们创建能够实现特定任务的对象,成为类的职责。模式还允许我们修改某个类,...
内容总结
以上是互联网集市为您收集整理的PHP职责模式单例模式_PHP教程全部内容,希望文章能够帮你解决PHP职责模式单例模式_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。