PHP学习笔记

PHP学习笔记

(一) 基本概念

1. 基本语法

每一句后面要有分号”;”

变量名前必须有$符号,不需要提前声明。数组会自动扩展,不需要提前定义,下标支持字符串,使用的是哈希表索引。特殊的一个用法是$a=”b”  $$a=”c”  等价于$b=”c”

字符串相加运算符 “.”

强制类型转换有三种 Integer Double String

结构控制同C相同

2. 数组的哈希表遍历

$i[“a”]  =  0;

$i[“c”]  =  1;

Reset($i);

$k = key($i);      ß 和next一起用

Echo “$k, $i[$k]”;

Next($i);            ß

3. 开发环境

PHP和mysql服务器暂时选择APM Express

IDE用Zend Studio,挺好用的,有个小问题,如果破解了xp的uxtheme.dll那么Zend反应会非常慢,网上似乎很少有人遇到这个问题,在配置里面把“使用os界面方案” 点掉就行啦。

使用/**/或//或#注释程序

4. 语法

对变量大小写敏感,但是对函数大小写不敏感

字符常量用单引号,字符串用双引号,字符串中出现双引号时需要用转义字符\”

PHP内部常量:__FILE__, __LINE__, PHP_VERSION, PHP_OS….

&:   指针,只能用于函数中参量的引用传值

->:  对象的方法或属性

=>: 数组的元素值

$a = array( “apple”=>“red”, “orange”=>”yellow”)

5. 数组

数组不需要声明,数组没有类型;元素和下标都可以是任何类型,同一数组各元素的类型也可以不同;数组允许嵌套,数组的元素可以是数组。

数组的遍历:

1.       While(list($key, $value) = each($arr)){

           // $key à 下标

           // $value à 值

}

2.       foreach($arr  as  $value){

// $value à 值

}

3.       foreach($arr as $key=>$value){

// $key => $value

}

         数组排序:

         sort arsort assort rsort ksort usort

6. 数组操作相关函数

count(mixed var)                计算数组内元素/变量个数

sizeof(array)                        计算数组内元素个数

reset(array)                         设置内部指针指向第一个元素

end(array)                            设置内部指针指向最后一个元素

next(array)                           返回下一个元素

prev(array)                           得到前一个元素

each(array)                          返回下一个key/value对

$test = array(‘x’=>’x1’, ‘y’=>’y1’);  $bar = each($test);

$bar内有四个值 0=>x 1=>x1 key=>x value=>x1

通常和结构体(非函数)list()共同使用

While( list($key, $value) = each($arr)) {…}

7. 函数

Function func($arg1, $arg2, …..)      // 参数可以使用数组,可以使用引用&  à  &$arr

可变长度的参数,PHP支持多个参数同时传递,而不用预先定义它们的个数。使用func_num_args()、func_get_arg()、func_get_args()获得函数的参数的个数、某个参数的值和全部参数的值。

函数的返回值:无需预先定义,直接return $a; 就行了,返回值同样可以是任何类型

8.

定义:

<?php

// 程序名 bike.inc  ß

var $var1;

function bike(){           // 构造函数

           $this->var1 = “bike”;        // 对本身的变量调用要使用this

           // 注意,$this->var1而不是$this->$var1

}

Function Set($varname, $value)

{

           $this->$varname = $value;      // 注意和$this->varname = $value;的区别

}

?>

使用:

require(“bike.inc”);   // 包含头文件

继承:

class elecBike extends bike{…}

与C++类的比较:

àPHP似乎没有析构函数à所有函数和变量都只能是publicà不支持虚拟和多态

9. 变量作用域(与C++不同)

$a = 1;

Function test(){

           return $a;         // 无返回值

}

要想在函数里面引用全局变量必须使用global关键字

Function test(){

           global $a;

           return $a;         // 返回值1

}

第二种使用全局变量的方法是使用特殊数组$GLOBALS:

Function test(){

                   return $GLOBALS[“a”];    // 返回值1

}

Php也有静态变量:static $a = 0;…

 (二) 常用函数

1.       输出函数

echo

print(string)                返回值boolean,如果显示一半浏览器挂了则会出现失败情况

printf(string format, mixed args…)            指定数据格式化后显示

sprint(同上)                同上,输出到string   %b 二进制 %C ASCII字符

                                       %d 10进制 %f 浮点 %o 八进制 %s字符串 %x 16进制

2.       字符串操作函数

strchr strstr strops            字符串查找函数

strcmp                                   字符串对比函数

strlen/strtolower/strtoupper/ucfirst        长度/小写/大写/首字母大写

substr                                    子字串,负号表示从后往前数

Chr/ord                                 返回ASCII字符/返回字符对应的ASCII码

AddSlashes/StripSlashes  字符串加/除斜线,用于数据库操作

à strtok 分割字符串的函数

首次使用$tok = strtok($string, “ ”);

While($tok){

            Echo “word is $tok<br>”;

            $tok = strtok(“ ”);    ß 再次使用无需指定源自串

}

         à implode/explode 将数组的内容组合成一个字符串/将字符串打开返回数组

         à join implode的别名

3.       HTML处理函数

htmlspecialchars       把特殊字符转化为html格式,比如& -> &amp

nl2br                             换行字符转化为<br>

rawurldecode             URL专用字串转化为普通字串

rawurlencode             普通转URL

md5(string)                 MD5

urlencoder/urldecoder

parse_url                     解析形如ftp://user:pwd@host.com:port返回值为数组

包括scheme、host、prot、pass、path等等

base64_encode/base64_decode

4.       字符串的正则表达式处理

ereg/eregi                                                        字符串比对解析/不考虑大小写,返回值int

à  ereg(string patten, string string [, array regs]);    根据patten对比string,找到的字串放到数组regs中。

ereg_replace/eregi_replace              字符串比对解析并替换/不考虑大小写

split(string pattern, string string)    将字符串按指定的规则分割

5.       正则表达式

^                  ^an            匹配所有an开头的字符串

$                  tion$         匹配所有tion结尾的字符串

                    abc            匹配所有包含abc的字符串

*                  ab*            匹配a开头0个或多个b的字符串

+                  ab+            匹配a开头至少有一个b的字符串

?                  ab?            匹配a开头至多有一个b的字符串

{n}               ab{2}         匹配a开头两个b的abb

{n,}              ab{2,}        匹配a开头至少有2个b的abb/abbb/abbbb

{n,m}          ab{3,5}     匹配a开头3~5个b的abbb/abbbb/abbbbb

()                 a(bc)*       同上,符号针对对象为bc

|                  (a|b)*c     连续a或b并以c结尾

[]                 ^[a-zA-Z]  指定字符串中一个字符的可选范围

[^]               [^a-zA-Z]  指定字符串中一个字符的不可选范围

6.       文件操作函数

int fopen(string filename, string mode)                      打开

int fclose(int fp)                                                                 关闭

int feof(int fp)                                                                     测试文件是否指向文件尾部

string fgets(int fp, int length)                                        读取文件中的一行,length可选

int fputs(int fp, string str, [int length])                        写到文件指针 = fwrite

int fseek(int fp, int offset)                                               移动文件指针

int ftell(int fp)                                                                     获取文件指针

int rewind(int fp)                                                               重置文件指针到开头处

mkdir/rmdir                                                                        创建/删除文件夹

7.       时间函数

getdate()                                                                             返回数组,包括年月日等

gmdate()                                                                             同上,但转化为格林威治标准时间

time()                                                                                   返回1970.1.1以来的秒数

microtime()                                                                         返回微秒+秒

checkdate(年,月,日)                                                                 判断日期是否符合规范

 (三) 图像编程

1. 图像功能需要安装GD library

早期版本支持gif,现在由于版权问题改为支持png

png是一种无损颜色索引位图(256色)

2. 图像操作函数

int ImageSX(int im)                     获取图像宽度

int ImageSY(int im)                     获取图像高度

int ImageCreateFromPNG(string filename)      读取一张PNG图像用作处理

int ImagePNG(int im, string [filename])            建立一张PNG图像

int ImageColorAt(int im, int x, int y)          获取指定点的颜色索引值

int ImageDestroy(int im)                                       结束图像

ImageColorTransparent                                        指定透明背景色

ImageColorAllocate(int im, r, g, b)                      为图像分配颜色

Array GetImageSize(string filename)                获取图像的长宽

int ImageColorClosest(int im, r, g, b)                  找出图像中最接近的颜色索引

int ImageColorResolve (int im, r, g, b)               找出对应rgb的颜色索引,如没有则找最近的

ImageColorSet(int im, int index, r, g, b)             设定颜色表上指定索引的颜色

ImageColorsForIndex(int im, int index)              获取制定索引的颜色

int ImageColorsTotal(int im)                                 计算图片的调色板有几种不同的颜色

3. 绘图函数

ImageArc ImageChar ImageCharUp ImageDashedLine ImageFilledPolygon

ImageFilledRectangle ImageFillToBorder ImageLine ImagePolygon ImageRectangle

ImageSetPixel ImageString ImageStringUp ImageTTFText’

4. 图像操作步骤

à 创建图像

           $im = ImageCreate(90, 20);

à 创建颜色索引

           $black = ImageColorAllocate($im, 0, 0, 0);

à 绘图

           ImageFill($im, 0, 0, $black);

à 将图像输出为PNG

           ImagePNG($im);

à 删除图像

           ImageDestroy($im);

动态图像:

ð  将上面的脚本保存为文件image.php,使用<IMG SRC=”image.php”>即显示该图片

(四) HTTP交互

1.         Cookies

Netscape(ms已经倒闭?)发明的。为了和UNIX兼容,cookies的路径是区分大小写的。

à设置单值Cookies

setcookie("CookieName", value, expire_time, path, site, bool_secure);

setcookie("user name", "fangxia", time()+3600);           // 1小时后过期

à读取单值Cookies:

echo $_COOKIE["user name"];                 // 或者

echo $HTTP_COOKIE_VARS["user name"];

à多值Cookies:

setcookie("cookie[three]", "Three");

setcookie("cookie[two]", "Two");

setcookie("cookie[one]", "One");

if (isset($_COOKIE["cookie"])){                  ß important!

         while(list($key, $value) = each($_COOKIE["cookie"])){

                   echo "$key ==> $value";

         }

}

2.         GET(显式地出现如?var=value)

QueryString用于页面之间传递变量。通常用法是nextpage.php?<?$value?>

// in send.php

<?

         $SendValue = urlencode("Information");

echo "<a href = \"receive.php?send=$SendValue\">Press Here</a>"

         ?>

// in receive.php

<?

         if(isset($_GET[send])){              // important

                  echot $_GET[send];

}

?>

ps: 不知道为什么HTML嵌入php不行

<a href = "receive.php?send=<?php $SendValue?>">Press Here</a>   // $SendValue读不出

知道了,应该<?echo $SendValue;?>

3.         POST(隐式地传递)

// in send.php

<?php

         $UserName = "TheLostWorld";

?>

<FORM METHOD = "POST" ACTION = "receive.php">

<INPUT Name="UserName" TYPE="HIDDEN" VALUE="<?echo $UserName;?>">

<INPUT TYPE="Submit" name="下一页">

</FORM>

// in receive.php

<?

         echo $_POST[UserName];

?>

4.         Session

会话提供了所有网页共用的公共变量的存储机制。会话提供了可以跟踪每个访问者从到达到离开的全部活动的一种机制。

àsession函数列表ß

boolean session_start(void)

初始化一个新的session,若已存在,则与原session连接。无参数,返回恒为true

boolean session_destroy(void)

boolean session_register(string name)

         登记一个变量为会话变量

boolean session_is_registered(string name)

         判断变量是否已经被登记

boolean session_unregister(string name)

         取消登记一个会话变量

string session_name([string name]) ?

         获取/设置当前session的名称,无参数表示获取,有参数表示设置

string session_id([string id])

         获取/设置当前session的id,同上,用于标识当前session

string session_module_name([string module]) ???

         获取/设置当前会话模块

         àsession的使用ß

// in page 1

<?

         session_start();

         $info = "Thanks for your coming";

         session_register("info");          // 不知为何这种方法不行

         $_SESSION[info] = "This is a session test";

?>

// in other pages

<?

         session_start();                          // 必须加入,否则无法读取session

         echo $info;                                    // 直接读取其他页面设置的session变量

         echo $_SESSION[info];             // OK

?>

5.         表单交互

// in send.php

<FORM METHOD = "POST" ACTION = "receive.php">

Name:<INPUT TYPE="text" Name="Name"><br>

Email:<INPUT TYPE="text" Name="Text"><br>

<INPUT TYPE="Submit" value="下一页">

</FORM>

// in receive.php

<?

         $name = $_POST[Name];  // …….

?>

(五) PHP操作MySQL数据库

int mysql_connect([string hostname], [string username], [string password]);

连接成功返回一个正整数的连接标示符,出错时返回false。所有的参数都是可选的,如果没有指定参数,缺省的是本地主机、本地主机拥有该进程的用户的用户名以及空口令。主机名也可以包含端口号,形如”host:port”。

第二次对该函数使用相同参数调用时,这个函数并不重新建立连接,而是返回当前连接的标识符。

该连接会再脚本执行完的同时被服务器自动关闭,除非之前被显式地调用mysql_close()。

Int mysal_create_db(string database_name, [int link_identifier]);

         建立一个MySQL数据库,操作成功返回一个连接号为正的连接标识符。出错返回false。

int mysql_select_db(string database_name, [int link_identifier]);

         连接一个MySQL数据库,成功返回true,失败false。如果不指定link_identifier,默认连接最后一个“活动的数据库”。活动数据库是指:任何一个当前调用的mysql_query()所执行的查询都是针对这个数据库的。

int mysql_query(string query, [int link_identifier]);

发送一个MySQL查询。当连接成功时返回正的MySQL查询结果标志符号,出错返回false。如果没有指定连接标识符,默认使用最后一个打开的连接。如果SQL语句是select,则处理返回一个结果号,否则返回的值可以不理会。

int mysql_affected_rows ( [int link_identifier]);

         获取指定/上次连接操作(INSERT, UPDATE, or DELETE)影响的数据项个数。

int mysql_num_rows ( [int link_identifier]);

         获取指定/上次连接操作(仅SELECT)影响的数据项个数。

boolean mysql_data_seek( int result, int row_number);

         移动内部查询结果指针,同mysql_fetch_row()一起使用。注意row_number是否越界。

array mysql_fetch_row(int result);

         返回查询结果,并且移动内部查询结果指针到下一条记录。返回的数组只能用数字下标访问。

array mysql_fetch_assoc(int result);

返回查询结果,并且移动内部查询结果指针到下一条记录。返回的数组只能用字段名下标访问。

array mysql_fetch_array(int result);

         返回查询结果,并且移动内部查询结果指针到下一条记录。返回的数组可以用数字下标或字段名作为下标访问。如果已经取到了最后一行,则返回false。

boolean mysql_free_result(int result);

         释放查询结果资源。

object mysql_fetch_field(int result, [int field_offset]);

         返回包含该字段信息的对象。对象包括如下的属性:name, table, max_length … 访问方法为object->name等。

相关推荐