作者marinne (乳玛琳)
看板PHP
标题Re: [请益] 有办法把联结资料库的动作写成函数吗??
时间Sat Jan 14 03:18:32 2006
※ 引述《libraghost (看好戏)》之铭言:
: 请教global应该怎麽写
: 概念小弟大概知道(应该啦),但是写的时候就是出错
: 我是这样写的
: function main()
: {
: GLOBAL $link;
: $link=mysql_connect("$sever","$id","$pw");
: mysql_select_db("$db_name",$link); //这里不知道要不要GLOBAL
: tmp();
: mysql_close($link);
: }
: function tmp()
: {
: $sql="SELECT `A` , `B` FROM `$table` ORDER BY `A` ASC";
: $list =mysql_query($sql,$link);
: list($A,$B) = mysql_fetch_row($list);
: }
: 结果就是错!
先仅就以上的部分来看。如果一定要写成这样(但是个人并不赞同这个写法),
你应该在tmp()里面也加上global $link:
<?php
function main() {
// 照原本
}
function tmp() {
global $link;
// 以下照原本
}
main();
?>
main()里面的global $link;会把下面那行建立的$link变数放到全域变数
的范围里面去,但是在tmp()里面也要加上global $link;告诉後面的程式码
$link这个变数是在全域变数里面而不是本地端变数,这样才拿得到main()
所建立的连线。
不过你的写法很有重新检视的空间。连接资料库这部分程式码是在整个系统里面
会重复使用的,因此有必要独立写成函数,这没错。但是你不应该在里面还加上
个tmp()的呼叫,除非你确定tmp()所做的事情也是属於连接资料库这个动作所
必须执行的一部分,而不是某个无关的东西。我会建议写成这样:
<?php
function get_mysql($param_1,... $param_N) {
global $link;
$link = mysql_connect(....);
...
}
function get_xxx_data() {
global $link;
$sql = "select * from table....";
$result = mysql_query($sql, $link);
while(list($a, $b) = mysql_fetch_row($result)) {
...
}
return $data_array;
}
get_mysql();
$xxx_data = fetch_xxx_data();
...
// main()就不需要了。PHP不是C,不需要这样给个进入点。
?>
通常会把这两个函数放到某个档案里面以便多个程式共用。另外,虽然global可以
在这里解决你的问题,还是要提醒不要滥用global。特别是对於要被放在独立档案
里面,重复被多个程式引入共用的函数而言,太多global $xxx;会让函数的独立性
变得很低,而且会很容易遇到变数名称冲突的问题(要是在某个程式的某个地方
宣告了某个叫做$link的变数,後面的程式可就头大了)。
: : 其实不用自己写啦!当然要练练功力或顺便学习无所谓,可是若有开发专案的时间压力
: : 或考虑功能及安全性,有很多热心的PHP专业高手们已经替我们写了不少有关於操控
: : Database的物件,首推 PEAR::DB ! 它独立的抽象操作层介面让使用者不必担心日後
: : 若要将开发的PHP程式移植到不同的资料库系统时程式码大量修改的问题。此外PHP 5.0
: : 开始加入的PECL扩充模组,里面的PDO(PHP Data Objects Interface)更落实了资料
: : 存取统一介面的功能,而且因为是扩充模组,所以日後昇级更独立且方便,不须要
: : 随着每次PHP版本更新而昇级。
: : 刚好最近在研究PEAR及PECL的各种物件功能(老外说这两个是sisters,姐妹花...),
: : 拿来现宝一下,有错请指教!
PEAR确实是个宝库。还没进去挖过宝的,现在去看看永不嫌迟。
: 其实我现在是帮家里的店作网页,没有时间压力
: 程式方面自己写居多
: 一来是不会你说的Database物件
: 二来的确有练功的成分...
: 而且现在也做的差不多了
: 只是我比较龟毛,希望程式的可重复利用性多一点
: 未来如果谁接手的话,我希望能在即使看不懂程式的情况下进行修改
: 再说把什麽显示留言版,购物车,更新商品资料的动作都写成函式
: 未来如果不幸被逐出家门,拿这些函式去外面骗吃骗喝也方便 ( ̄▽ ̄#)
继续加油 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.153.37
1F:推 ast9869:好文~~^^ 01/14 10:35
2F:推 kuoyu:global太多..可以配合建立naming rule来改善.. 01/15 21:58
3F:推 libraghost:我的问题解决了,真的很感谢大家,php精华工具集这本最 01/18 21:20
4F:→ libraghost:近终於弄到了...真是本相见恨晚的好书 01/18 21:24