作者adxis (acer)
看板PHP
标题Re: [请益] 想研究class
时间Tue Jan 15 15:36:18 2008
: 翻了一下前面的文章和连结里的的
: 现在还是有个地方有点想不出来
: class DB
: {
: function connect($server)
: {
: mysql_connect(......);
: }
: function querty($sql)
: {
: return mysql_query($sql);
: }
: function fetch()
: {
: return mysql_fetch_array($this);
: }
: }
: $databse = DB::connect($server);
: $result = $databse->query($sql);
: $row = $result->fetch(); <--问题出在这里
: 我的理解是
: $result 已经不是跟$databse是同一个DB建构出来的实体了
: 所以$result不能用DB的子建构…
: 是这样吗?那又要如何去.."继承(要这样讲吗?)"呢?
$this 指的是 DB 这一个class的 instance
你想要的大概架构可能是
class DB
{
protected $config = null;
function __construct($config){
//process config if need
$this->config = $processedCfg;
}
public function connect($config = null){
if( isset($config) ){
//...
}
}
public function query($sql){
//return query result
}
//...
}
虽然这样写没有甚麽意义
只是把php提供的函式包装起来 增加的overhead跟提供的便利性不成正比
目前的framework或是lib里面 像是ado, zend(with pdo)
都是利用物件的 "abstration抽象化" 来将介面从实作抽离
意思是说 假设今天我要从mysql换成postgresql或者是ODBC
理想的状况(当然不可能这麽完美)是我只要在初始化的地方下不同的参数
eg. $db = abstractDB::factory('mysql',$config);
换成 $db = abstractDB::factory('pgsql', $config);
而不是把所有写好的程式翻出来把function name改掉
如果有c的基础,建议可以从c++先学一些物件导向观念,并不是php不能作物件导向
而是因为c++已经被讨论了很久,相关的资料会很好找,中文的也很多了
要直接从php开始也是可以的 但是要确实的把php.net里面的东西看懂看熟
多多少少也要知道一些design pattern
这样看framework的时候就会比较有感觉了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.43.155