看 UCH 学 PHP
分类:PHP|评论:0 条|阅读:2927 次|posted @ 2008年10月23日 15:16:05近来搞了个 SNS 在玩,本着学习 PHP 和准备二次开发 UCH 目的,决定认真学习 UCH 代码,原则是:不放过每个疑点,边测试边记,废话少说了开始吧(发现自己越来越不会说话了)!
从 index.php 开始吧,
include_once('./common.php');
包含当前目录的 common.php 文件,“./”表示当前目录,转到 common.php 吧……
include() 和 require():语句包括并运行指定文件。
include() 产生一个警告而 require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用 require()。include() 就不是这样,脚本会继续运行。
在使用上,require() 通常放在 PHP 程序的最前面,PHP程式在执行前,就会先读入 require 所指定引入的代码文档,使它变成 PHP 程序的一部份,一般使用这种方法将常用的函数引入网页中。
include()一般是放在流程控制的处理区段中,解析器只有在遇到执行 include 的代码文档时,才将它读进来,这种方式,可以把程式执行时的流程简单化。
不论 include() 和 require() 两者有个区别,它们都是变量函数,是特殊的语言结构,在条件语句中使用必须将其放在语句组中(花括号中)。
include_once() 和 require_once() 对应 include() 和 require(),与之对应的功能相同,不同的是只包含一次。
php 语句结束用分号“;”隔开(C程序员在暗喜),在文件的最后一条分号可以省略,不过建议还是加上好,养成良好习惯。
字符串常量可以用单引号和双引号来定义,单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下:
$first = 'Hello';
$second = "World";
$full1 = "$first $second"; # 产生 Hello World
$full2 = '$first $second';# 产生 $first $second
@define('IN_UCHOME', TRUE);
define 关键是定义常量,在前面加@是忽略错误提示(其它关键字亦然)。
if(!defined('IN_UCHOME')) exit('Access Denied');
defined() 返回指定常量是否被定义过,是返回 true,否返回 false
D_BUG?error_reporting(7):error_reporting(0);
配置程序在出错的时候怎么显示,有好几个选项,常用的有:
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
各代表:
E_NOTICE 表示一般情形不记录,只有程序有错误情形时才用到,例如企图存取一个不存在的变量,或是呼叫 stat() 函数检视不存在的文件。
E_WARNING 通常都会显示出来,但不会中断程序的执行。这对除错很有效。例如:用有问题的正则表达式呼叫 ereg()。
E_ERROR 通常会显示出来,亦会中断程序执行。意即用这个遮罩无法追查到内存配置或其它的错误。
E_PARSE 从语法中解析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。
7为1 2 4之和。(还有这种写种,呵呵)
$_SGLOBAL = $_SCONFIG = $_SBLOCK = $_TPL = $_SCOOKIE = $space = array(); // 从字面看应该是:全局变量,配置变量,块变量(暂不知做什么用),模板变量,COOKIE 变量,space 变量(不要骂我)
一下子定义这么多个数组,都是空数组,以后要用到什么随便加就行了,如:
$_SC['dbhost'] = 'localhost'; //服务器地址
程序目录
define('S_ROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
__FILE__ 是一个系统变量,返回所在文件的物理路径;如:D:\website\php\start.php
dirname 返回 path 的目录路径,如:D:\website\php
DIRECTORY_SEPARATOR 系统常量,路径的分隔符,在 win 里为“\”,在 linux 里为“/”
//基本文件 => 也就是说 config.php 是必需的,没安装之前没 config.php,安装后就有了,没 config.php 整个网站肯定没法运行的!好罗嗦!
if(!@include_once(S_ROOT.'./config.php')) {
header("Location: install/index.php");//安装
exit();
}
@include_once(S_ROOT.'./data/data_ad.php');//广告 => 读出你网站所设置的广告,存放在 $_SGLOBAL['ad'] 二唯数组里。
@include_once(S_ROOT.'./data/data_app.php');//系统应用 => 读出你网站一共装了多少应用,注意是官方的哦,如:个人家里,论坛,这些也许是为了各自这间相互通信用的吧。存放在:$_SGLOBAL['app'] 二维数组里。
include_once(S_ROOT.'./source/function_common.php'); // => 通用函数,不用一个个去研究,在下来的代码中调用哪个再去看就好了,不过整体先过一次也是好滴!
//获取时间
$mtime = explode(' ', microtime());
$_SGLOBAL['timestamp'] = $mtime[1]; => 时间戳(time-stamp),秒,如:1224838282,就是从 1970 年到你刷新页面时的秒数,暂时不知怎么用。
$_SGLOBAL['supe_starttime'] = $_SGLOBAL['timestamp'] + $mtime[0]; => 以浮点数的形式表示时间戳(秒),如:1224838282.0902,在 PHP 5 时可以用 microtime(true) 代替。
首先是microtime()函数,语法是:microtime(get_as_float),功能返回当前 Unix 时间戳和微秒数。如果给出了 get_as_float 参数并且其值等价于 TRUE,该函数将返回一个浮点数。
如果调用时不带可选参数,本函数以 "msec sec" 的格式返回一个字符串,其中 sec 是自 Unix 纪元(0:00:00 January 1, 1970 GMT)起到现在的秒数,msec 是微秒部分。字符串的两部分都是以秒为单位返回的。
explode() 使用一个字符串分割另一个字符串,返回由字符串组成的数组。详细介绍参见:
http://www.phpchina.com/html/12/14112-29000.html
//链接数据库
dbconnect();
呵,可以来看 /source/function_common.php 里的函数了。
global $_SGLOBAL, $_SC;
global 关键字定义了之前定义过的 $_SGLOBAL, $_SC 这两个变量为全局变量,关于变量的作用域和全局变量的说明,请参见:
http://php.freehostingguru.com/3.2.3.php.php
接着:include_once(S_ROOT.'./source/class_mysql.php');
包含 class_mysql.php 文件,从名称就可以看出是 mysql 操作类(看到 class 倍加亲切!)。两个任务:熟悉一下 PHP 类的写法和操作数据库。
未完待续……