初学php 遇到问题。先感谢大家不厌其烦给予指点。谢谢拷贝的一段代码
//定义:
$server      =  "localhost";              // 数据库服务器,一般为“localhost”
$db_username =  "root";                  // MySQL 用户名
$db_password =  "123456";                  // MySQL 用户密码
$db_name     =  "test";                      // 数据库名称
$pconnect    =  0;             // 数据库持久连接 0=关闭, 1=打开class dbstuff {
function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = TRUE) {
if($pconnect) {
if(!$this->link = @mysql_pconnect($dbhost, $dbuser, $dbpw)) {
$halt && $this->halt('Can not connect to MySQL server');
}
} else { //当$pconnect=0 会执行到 这里、
// 问1: $this 是指向当前调用connect方法的对象,也就是 $db吗???
// 问2: mysql_connect($dbhost, $dbuser, $dbpw, 1) -创建了一个与数据库的链接?
// 问3: $this->link = @mysql_connect($dbhost, $dbuser, $dbpw, 1) 将与数据库的链接传递给当前对象的link?
// 问4: if(...) 行的意思是,判断 $this->link 是否获取到了与数据库的连接。
if(!$this->link = @mysql_connect($dbhost, $dbuser, $dbpw, 1)) {
//返回false 的话,继续执行
//问5:这行是赋值?并且输出字符串?
$halt && $this->halt('Can not connect to MySQL server');
}
}
//问6:判断php的版本,大于4.1则继续执行其中的代码?
if($this->version() > '4.1') {

//问7:以下各行不知道是什么意思,请大家给说明一下? 
global $charset, $dbcharset;

//问8:???
if(!$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8'))) {
$dbcharset = str_replace('-', '', $charset);
}

if($dbcharset) {
//问9:???
@mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);
}

if($this->version() > '5.0.1') {
//问10:???
@mysql_query("SET sql_mode=''", $this->link);
}
}

if($dbname) {
//问11:???
@mysql_select_db($dbname, $this->link);
}
}
}//问题 12 :实例化的时候,dbstuff后面不用加 () 么?
$db = new dbstuff;
//问题 13 :定义 connect()中的参数是6个,调用的时候多出一个,php允许这样?
$db->connect($server,$db_username,$db_password,$db_name, $pconnect,true,"GBK");

解决方案 »

  1.   

    1. 2. 3. 4. 5. 6.  是7. 把变量全局化, 通常在函数内部引用外部的变量用global来声明8. 判断array('gbk', 'big5', 'utf-8')这个数组里是否存在这个值$charset9. 10. 11. 这些都是查询数据库用的函数, mysql_query(), mysql_select_db()手册上有功能介绍12,可以没()13,php一般没函数重载,定义函数时参数可以随便设置多少个都行, 并且可以给这些参数赋值, 当调用该函数时, 可以传值(定义函数时没有赋值的参数一定要传值进来), 可以不传值(定义函数时已赋值), 
      

  2.   

    要是能正常执行就说明允许,不能则说明不允许,lz的问题直接问php编译器得到的答案比来发帖得到的解释有效得多
    当然不同版本的编译器给出的答案可能有出入
      

  3.   

    少贴一段,原来halt 是个方法。
    function halt($message = '', $sql = '') { define('CACHE_FORBIDDEN', TRUE);
    include('db_mysql_error.inc.php');
    }这行还是不能理解。
    $halt && $this->halt('Can not connect to MySQL server'); $halt 是传递进来的参数,还是 那个方法? 还是赋值行为么?
    $this->halt('Can not connect to MySQL server');  应该是调用 方法halt
    && 不是个 逻辑关系运算符么,php中这样用时什么意思??
      

  4.   


    $halt && $this->halt('Can not connect to MySQL server');这其实是个编程技巧而已
    $halt 如果为 true 则 还需要执行  && 后的 $this->halt这就有个条件判断了
    其实相当于if($halt){$this->halt.....}
      

  5.   

    function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0, $halt = TRUE) { 
    ...
    $halt && $this->halt('Can not connect to MySQL server'); 
    ...
    }
    function halt($message = '', $sql = '') { 
      define('CACHE_FORBIDDEN', TRUE); 
      include('db_mysql_error.inc.php'); 

    $this->halt('Can not connect to MySQL server'); 被执行的条件是,传入的属性 $halt 为真
    用于当发生错误时,提供相应的错误说明