《PHP和MySQL Web开发》笔记之使用PHP(一)

来源:互联网 发布:双层玻璃杯 知乎 编辑:程序博客网 时间:2024/04/25 20:18

 

第一章 PHP快速入门

php的变量有三种风格

短风格:php变量与html表单中的表单域名相同。$tireqty

中等风格:$_POST["tireqty"] $_GET $_REQUEST

长风格:$HTTP_POST_VARS['tireqty'] $HTTP_GET_VARS (可能会消失)

 

点号(.)是字符串连接符 echo $tireqty.'tires<br />';

如果$tireqty不是数组变量,则也可以写成:echo "$tireqty tires<br />';

 

PHP中有一种特殊的类型,resource变量,一般它代表外部资源(如数据库连接),不能直接操作一个resource变量。

 

PHP是弱类型的,可以在任何时间根据保存在变量中的值来确定变量的类型。

如:$total = 0.00 (此时为Float类型)

  $total = 'hello' (此时为String类型)

也可以进行类型转换:

$a1 = 0

$a2 = (float)$a1

一个变量的值可以作为另一个变量的名称:

$varname = 'a1';

$$varname = 5; <==>(这两句等价于) $1 = 5;

 

声明常量: define ('PRICE', 100);

使用常量: echo PRICE; (注意,在前面没有$)

常量只能保存布尔值,整数,浮点数或字符串数据。

 

PHP中也有“引用”的概念。

$a = 5;

$b = &$a;

$a = 7;

此时b的值也会变成7

unset($a) 会重置$a所指向的地址会破坏$a和7保存在内存中的连接,但不会改变$b(7)

 

0 == '0' 会返回true

0 === '0' 返回false (三个等号表示恒等操作,不仅值相等,而且类型也要相同)

还有不恒等 !==

 

错误抑制操作符@

$a = @(57/0);

可以防止产生警告,否则会产生一个除0警告。

 

执行操作符(反向单引号``)

$out = `ls -la`;

echo '<pre>'.$out.'</pre>'

可以在浏览器中显示一个目录列表

 

数组操作符:

$a + $b

$a == $b; $a === $b; $a != $b; $a <> $b($a和$b不等价则为true); $a !== $b;

 

gettype($a); 可以得到$a类型的描述字符串。

settype($a, 'double'); 将$a设为双精度类型。

is_array(); is_double();…… 等等,可以查看变量是否属于某种类型,返回true或false。

 

控制结构基本上与c完全一样。

if/switch/while/for/foreach

if($var == 0){somecode;}可以替换为如下的结构:

if($var == ):

  somecode;

endif;

 

可以使用declare,设置代码块的执行指令。

 

第二章 数据的存储与检索

fopen("$DOCUMENT_ROOT/../order.txt", 'w');  //可以用反斜线表示目录,但只能在Windows上使用。 (fclose($fp))

fopen("order.txt", 'w', true); //在php的include_path中搜索order.txt文件

如果文件名是以http://开始,fopen将建立一个到指定服务器的http连接,并返回一个指向http响应的指针。

 

@$fp = fopen("/sss/test.txt", 'w');

if (!$fp)

{

  //处理打开文件出错,如果在$fp前不加@,则php会出现出现错误提示信息。

}

 

fwrite($fp, $outputstring[, int length]); (fwrite等同于fputs)

php5新增了:

int file_put_contents(string filename, string data[, int flags[, resource context]]) 可以不用fopen直接操作文件(与之对应的是file_get_contents())

 

fgetss函数类似于fgets,但可以过滤某些特殊标志。

fgetcvs可以以某个定界符作为文件的分行处。

fread()可以读取任意长度的字节。

file() readfile()等,都可以读取整个文件

 

file_exists()检查文件是否存在。

filesize()确定文件大小。

unlink()删除文件

rewind()、fseek()、ftell()在文件中定位。

flock在使用文件前加锁

 

第三章 使用数组

数字索引数组的初始化:$products = array('tires', 'oil', 'spark'); 

$numbers = range(10, 15); 创建10-15的数组 $odds = range(1, 10, 2); 2代表步幅。

foreach($arr, as $elem)

  echo $elem;

$arr是数组,elem是单个元素

 

相关数组的初始化:$prices = array('tires'=>100, 'oil'=>10, 'spark'=>4);

$prices = array('tires'=>100); $prices['oil'] = 10;

遍历相关数组:

foreach ($prices as $key => $value)

  echo $key.'=>'.$value.'<br />';

也可以使用list()和each()也可以遍历数组的内容。each()会返回数组的当前元素,并将下一个元素作为当前元素。(如果想再次使用对$price使用each()函数,则必须用reset($price)将数组重新设到开始处。)

while ($elem = each($price)){code;}

list($product, $price) = each($price); //这句代码可将$price数组分解为两个数组,$product中仅存储$price中的第一个元素,然后$price就存储剩下的。

 

数组操作:$a+$b,数组b将会被附加到a中,但是任何关键字冲突的元素将不会被添加。

$a==$b,数组a和b包含相同元素(顺序不一定相同)

$a===$b,数组a和b包含相同元素,且顺序相同。

 

数组的元素可以是另一个数组,即可以是多维数组。

$products = array( array('TIR', "Tires', 100),

                   array('OIL', 'oil', 10),

                   array('SPK', 'spark', 4) );

echo $products[1][0];

 

sort($products);可以对数组进行排序。

sort($products, SORT_NUMRIC); 排序类型为数字排序。

asort()和ksort()可以对“相关数组“排序。(asort按元素值来排序,ksort按关键字排序。)

rsort()、arsort()、krsort()分别为反向排序,即按“降序”排列。

要对二维数组进行排序,则要自定义排序方法:

function compare($x, $y){

  if (...) return 0;

  else if (...) return -1;

  else return 1;

}

usort($products, 'compare');

usort中的u代表user,表示要用户自定义的比较函数。还有uasort()和uksort()。

shuffle()可以对数组各元素进行随机排序。array_reverse()可以将数组反向排序。

 

从文件中载入数组:

$orders = file("$DOCUMENT_ROOT/../orders.txt");

$number = count($orders); //取得数组的个数,orders中的每个元素,是原文件中的每一行。

for ($i = 0; $i < $number; $i++)

{echo $orders[$i];}

可以用$line = explode("/t", $orders[$i]);再将每一行再分割成n个元素,分隔符就是"/t".这些元素再存储到$line中。

 

intval()可以从字符串中提取数字。

 

每个数组中都有一个内部指针指向数组中的当前元素。当使用函数each()时,就间接地使用了这个指针,但是也可以直接使用和操作这个指针。

current($array_name);可以返回当前指针所指元素。

next()返回下一个,end()返回最后一个,prev()返回前一个,reset()返回第一个元素,并将指针设到相应的位置.

 

对数组的每一个元素应用任何函数:array_walk()

function my_print($value) { echo "$value<br />"; } //这个自定义函数最多可以有3个参数,分别为:value、key、userdata,userdata通过array_walk()的第3个参数来传递。

array_walk($array, 'my_print');

这个类似于c++标准库中的for_each()。

 

统计数组元素的个数:count()、sizeof()、array_count_values()。

count()与sizeof()相同,都返回数组元素个数。

array_count_values()可以统计每个特定的值在数组中出现过的次数(数组的基数集)。这个函数返回一个包含频率表的相关数组。

 

extract()可以通过一个相关数组创建一系列的标量变量,标题变量的名字就是数组中关键字的名字。

如:$array = array( 'key1' => 'value1', 'key2' => 'value2');

extract($array);    //自动创建两个变量,$key1和$key2

echo "$key1 $key2"; //就可以显示:value1 value2

extract有3个参数,第二个参数extract_type指定如何处理冲突,比如已经有同名的变量(默认的操作是覆盖)。

 

 

第四章 字符串操作与正则表达式

mail函数可以直接发送邮件,它的原型为:

bool mail(string to, string subject, string message, 

    string [additional_headers [, string additional_parameters]]);

 

trim()函数可以除去字符串开始位置和结束位置的空格,并将结果字符串返回。(这儿是广义上的空格,包括回车换行、制表符、字符串结束符、空格等)。它的第二个参数也可以指定要过滤的特殊字符。(还有ltrim和rtrim分别去除左边或右边的空格)。

 

nl2br()可以将字符串中的换行符用<br />来代替。

 

使用printf()或sprintf()可以格式化一些显示的字符串。

如果想用printf打印出"%"符号,必须使用"%%"。

printf("total amount is %2/$d and %1/$d, $total, $total_ship); 

"2/$"表示用参数列表中的第二个参数替换(只要直接在"%"后添加参数的位置,并以$符号为结束就可以)。

也存在vprintf()和vsprintf()。

 

Strtoupper()字符串转为大写, Strtolower()转为小写, Ucfirst()如果字符串的第一个字符是字母,就将其转为大写,Ucwords()将每个单词的第一个字母转为大写。

 

addslashes()和stripslashes()可以格式化字符串以便存储。如引号、反斜杠、NULL等往数据库中存储的时候会出问题。所以在存储前要将这些可能被解释为特殊字符的转义为普通字符。

 

explode可以根据一个指定的分割符将字符串本身分割为小块,并将分割后的小块返回到一个数组中。

$email_array = explode('@', $email);

implode()等同于join(),起到与explode()相反的效果。

strtok()也可以将字符串分割为小块。

 

substr()可以返回一个子串。

 

strcmp()、strcasecmp()、strnatcmp()用来对字符串进行排序。strnatcmp()是按人们习惯进行的“自然排序”(2会小于12,如果按字典序,2会大小12)。

strstr()、strchr()、strrchr()、stristr()都可以在字符串中查找字符串。

strstr完全等同于strchr。

strpos()、strrpos()查找子串的位置,并且运行速度要比strstr快。

 

str_replace()通过在字符串中查找子串,而将查找到的子串进行替换。

substr_replace()则通过指定替换字符串中指定位置的子串。

 

PHP支持POSIX和Perl风格的正则式语法。默认是POSIX,但可通过编译PCRE来使用Perl风格的。

查找字串符串:ereg()和eregi()。

int ereg(string pattern, string search, array [matches]); //eregi()不区分大小写。

替换子字符串:ereg_replace()。(也有eregi_replace())。

分割字符串:split()。

 

一般来说,对于同样的功能,正则表达式函数运行效率要低于字符串上函数。如果应用程序足够简单,最好使用字符串表达式。

 

原创粉丝点击