PHP 板


LINE

看板 PHP  RSS
※ 引述《coldollsheep (加油加油^^)》之铭言: : 各位先进好 : 我大概会被炮... : 我对function 式开发有满深的着迷 : 而且我看wordpress phpmyadmin也大量的使用这样的设计 : 但是我现在这家公司用了大量的class : 这不是对错问题~ : 但是我对程式之间继承来继承去觉得" 没那麽好 " : 大家有没有甚麽可以讨论一下呢? 把一堆 function 封装成 Class 不代表这样就是 OO 了。 OO 也不是只有继承而已。 以下就举个简单的例子,为什麽要 OO。 假设我们把资料库连线相关的东西封装起来。 <?php class Database { /** * 初始化 */ public function __construct() { } /** * 连线 */ public function connect($host, $user, $password, $database) { // ... } /** * 中断连线 */ public function disconnect() { // ... } } 所以使用时就会像这样 <?php $connection = new Database(); $connection->connect('localhost', 'dbuser', 'dbpassword', 'mydatabase'); //结束连线时 $connection->disconnect(); 问题来了,每次程式结束时都得呼叫 disconnect,这太不人性化了。 因此我们把程式再封装一次。 <?php class AutoDisconnectDatabase extends Database { function __destruct() { $this->disconnect(); } } <?php $connection = new AutoDisconnectDatabase(); $connection->connect('localhost', 'dbuser', 'dbpassword', 'mydatabase'); 好了这样一来我们就不用到处呼叫 disconnect。 只要程式一结束,就会自动呼叫 disconnect。 但是每次都得输入帐号密码,如果哪天要改帐号密码, 或是修改了参数的项目。那不就得改到死。 所以我们再封装一次 <?php class DatabaseWithSimpleFactory extends AutoDisconnectDatabase { public static function factory() { return new static('localhost', 'dbuser', 'dbpassword', 'mydatabase'); } } 使用 <?php $connection = DatabaseWithSimpleFactory::factory(); 这样一来程式就更清爽了,帐号密码以及初始化统统集中了。 可是这样还是有个问题。 如果有人手贱,到处呼叫 DatabaseWithSimpleFactory::factory() 那不就制造出一堆连线出来,虽然会自动 disconnect 但还是会浪费资源。 因此就得动用另一个方式。 <?php class DatabaseWithSingleton extends DatabaseWithSimpleFactory { protected static $connection = null; public static function getInstance() { if(self::$connection === null){ self::$connection = static::factory(); } return self::$connection; } } 使用 <?php $connection = DatabaseWithSingletone::getInstance(); 透过这个方式取得的连线只会有一个,不会有重复连线的问题。 上面的范例中其实使用了 Simple Factory 以及 Singleton 这两个常见的 pattern 。 希望能让大家对於为什麽要 OO 有不一样的想法。 --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.136.115 ※ 编辑: rickysu 来自: 220.130.136.115 (11/07 10:07)
1F:推 LaPass:大概就是这篇讲的这样~ 11/07 10:18
2F:推 gname:学东西就是要这样一步一步推上来才对,否则根本不会了解一些 11/07 12:22
3F:→ gname:本质之类的东西,然後就乱用一通...想当年我开始学着刻 11/07 12:24
4F:→ gname:framework 时也是这样一步一步走上来,但总有人会问为什麽不 11/07 12:25
5F:→ gname:用现成的? 因为我只是想杀鸡,为什麽一定得拿牛刀来用... 11/07 12:25
6F:→ chrisQQ:找错字 XD => DatabaseWithSingleton"e"::getInstance 11/07 12:36
7F:→ rickysu:疑... for($i=0;$i<10;$i++) echo "singleton"; 罚写10次 11/07 14:21
8F:→ chrisQQ:其实看过很多包成 class 都只是当 namespace 用 XD 11/07 16:54
9F:→ chrisQQ:虽然 5.3 之後提供 namespace,不过 prefix 用 \ 真是有点 11/07 16:55
10F:→ chrisQQ:不太习惯 XD 11/07 16:55
11F:→ dlikeayu:这篇用到了OO最基本精神;多用合成少用继承 11/07 17:03
12F:→ dlikeayu:再下去就是定义Model ,static method CRUD时去call连线 11/07 17:05
13F:→ dlikeayu:每次new Model或get Model完 ->save() 就做完一堆事 11/07 17:05
14F:→ gname:php 的 namespace 真的是越看越无言...= = 11/07 17:55
15F:推 Elfiend:好文推一个。请问"多用合成少用继承"这部分有更详细解说吗 11/07 17:57
16F:→ Elfiend:顺便再问,那麽不该用OO的时候呢?有哪些状况吗? 11/07 17:58
17F:→ Elfiend:就是指哪些状况算是滥用、不必要的使用OO。 11/07 17:58
18F:→ gpmm:有兴趣可以看看小弟之前写的 #1GHnIzGw#1GI7My10 11/07 22:35
19F:→ gpmm:虽然也是很粗略的提过而已,不过应该多少也可以提供一点资讯 11/07 22:35
20F:→ dlikeayu:包装可以去看工厂模式、装饰者模式、骨架模式 11/08 17:11
21F:推 j87b0003:欧莱礼的深入浅出设计模式 11/15 23:32







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP