基础
1. 字符串用.连接
2. 标识符(变量名,类名,函数名等)区分大小写。PHP内建的函数不区分(用户定义函数是否区分?)
3. 变量不用声明,第一次赋值自动生成
4. 自动根据环境情况改变变量类型
5. 不定变量:$$varname
6. 常量: 1) define('Const_Var', 100); 2) 常量不用$ 3) 注意定义时使用字符串 4) 函数内使用不用global 声明
7. @: 用在表达式前,禁止错误输出
8. ``: 执行shell命令,例: $result = `ls -l`;
9. true/false: 不区分大小写,等同: TRUE/FALSE
10. switch: 其允许的条件为:整数,字符串和双精度。
11. exit(): 终止脚本运行,所有后面的内容(包括静态部分)不会输出。die()是exit()的alias,作用相同。
与变量相关的函数测试和设置
1. settype/gettype
2. is_array
3. is_double/is_float/is_real (都是相同函数,alias)
4. is_long/is_int/is_integer (都是相同函数,alias)
5. is_string
6. is_object
状态
1. isset(): 变量是否定义
2. unset(): 取消变量
3. empty(): 1)检查变量是否存在 2)值是否非空非零
转换
1. intval(), strval(), floatval()等
数组数字索引数组(array)定义
1. 常规:$var = array('apple', 'orange', 'pear');
2. 直接:$var[0] = 'apple'; 当$var不存在时,自动创建array
个数
1. 用count($array)和sizeof($array)。结果相同。
2. array_count_values(): 特定值在数组中出现的次数
添加
1. 当数组有3个元素,可用$var[3] = 'xxx';
2. $var[] = 'xxx';
3. array_push函数
相关数组(dictionary)定义和数字索引数组类似
1. $var = array('apple' => 100, 'orange' => 200, 'pear' => 10);
2. $var['apple'] = 100;
枚举使用foreach:
foreach($anArray as $key => $value) { // $key, $value}如果数组不是dictionary,或只关心“值”:
foreach($anArray as $value) { // $value}使用each:
while($element = each($anArray)) { // $element['key'], $element['value'] // or // $element[0], $element[1] }注意:用each后需要reset复位
关于reset和其他同系列函数:
• reset(): 数组指针位置复位
• current(): 返回当前指针位置的
• next() / previous(): 指针位置前移/后移,然后返回当前指针位置的
• end(): 指针位置移到末尾,返回当前指针位置的
关于list:
list将数组分解为对应的一组变量,以上each的while循环可写成
while(list($key, $value) = each($anArray)) { // $key, $value }while(list(, $value) = each($anArray)) { // $value }字符串常用一般函数
• trim(), ltrim(), chop(): 左右,左,右
• nl2br():
替换换行符
• strtolower()/strtoupper()
• addslashes()/stripslashes()
连接和分割
• $anArray = explode($separator, $input);
• $new_string = join($separator, $string_array);
join函数是implode的alias
子串$substring = substring($input, $start, $length);
1. 只用一个正数为start,得到start开始的整句
2. 只用一个负数为start,得到串尾的字串。个数是start的绝对值
3. length参数意义: 正)返回字符的个数 负)倒数第x个字符为结束
比较和查找
• strcmp()/strcasecmp(): strcasecmp是不区分大小写的比较
• strchr()/strstr(): 1)strstr($haystack, $needle) 2) 没有找到返回false 3) strchr是strstr的alias
• stristr()作用与strstr()相同,但不区分大小写。
• strrchr()作用与strstr()相同,但从后面开始匹配。
• strpos()和strrpos()作用与strstr相同,但不返回子串,而是索引位置。
关于strrpos和strpos
1. strrpos和strpos不同,只能接受用一个字符作为查找串。如果传入串,只用其第一个字符。
2. 函数返回true/false可能和返回索引值0混淆,故必须用===测试结果。
替换(不包括regex部分)
• $new_string = str_replace($search, $replace, $input_source);
• $new_string = substr_replace($input_source, $replace, $start, $length);
关于substr_replace:
1. start是替换开始位置。a)0或正数,从串头开始 b)负数,从串尾开始
2. length。 a)不给,从start替换到最后 b)0,插入,不覆盖 c)正数,表示用新串覆盖的个数 d)负数,表示从尾计数的位置为终点
函数和类类定义和使用class classname extends baseclass { var _$attribute; // initialize function function classname($param) { } function myfun() { }}使用(类没有私有概念)
$anObject = new classname($param);$anObject->myfun();$anObject->_attribute;
谈PHP语法【一】
2007年09月05日 星期三 18:37
《谈谈HTML语法》一文,我已经介绍了基本的HTML语法。可以编出一个静态的Web页,可动态交互信息是很重要的。如一些网站的会员制的会员注册、登录都需后端程序的运行。很多网站所用的CGI程序主要用Perl、ASP、Java、PHP编写,而我们所要用的就是PHP。它是完全免费的,这就要感谢那些默默无闻的编程人员了。
PHP的结构类似于C语言,这可是应证了C语言里提的“一处学习,到处编程”。相信学过C语言的人可很容易上手PHP的。还是先介绍一些PHP语法吧。本文适合初学者学习。
PHP与C语言也有一些差别,或者说在某种程度上可能比C语言更为灵活。在C语言中,变量要先定义,才能使用。而PHP中变量则不需事先定义,直接使用即可。对于变量的类型,在赋值时自动生成。PHP变量的类型分为:整数(int)、双精度型(double)、字符串(string)、数组(array)、对象(object)。
整数大小超出其范围后,自动转化为双精度型,其值范围如下表:
┌─────┬─────┬──────┬────────────┐
│ 声明类型 │长度(位)│长度(字节)│ 值的范围 │
├─────┼─────┼──────┼────────────┤
│ int │ 32 │ 4 │-2147483647~2147483647 │
├─────┼─────┼──────┼────────────┤
│ double │ 32 │ 4 │ 1.7E-308~1.7E+308 │
└─────┴─────┴──────┴────────────┘
字符串,通常用""(双引号)表示。也可用''(单引号)表示,如下:
$a="abc";
$b="abc$a";
$c='abc$a';
$d="\"cde\"";
$e='"cde"';
PHP中的各种变量均在变量名前加上“$”以示区别。
注意,$b的内容为abcabc,$c的内容为abc$a,$d的内容为"cde",$e的内容也为"cde"。可以看出,双引号中的内容中的变量名会被替代崐,而单引号中的则不会。双引号中的内容需转义,如$应用$表示,而单引号中的则不用。
PHP中的数组语法为:
数组名[索引]
索引可为数字,也可为文字。但不建议使用文字,因为意义不大。对于数组也比其它语言灵活如下例:
$names[]=100;
$names[]=200;
$names[]="hi,how are you";
$names[]=98.5;
$names[]=1.7E+23;
$num=count($names);
for ($i=0;$i<=$num;$i++){
echo "$names[$i]
";
}
?>
可看出,一个数组中的元素不一定为同一类型,这就是PHP数组的“活”处。
使用对象,可使编程者更易于维护,也使程序更为易读。较其它语言,PHP可简单多了,它只有类别(class)、方法(method)、属性(attrib)及扩展(extendsions)等。
前文谈的只是PHP的数据类型,所谓“磨刀不误砍柴功”,打好PHP基础才能更好地学好PHP编程。
PHP中的表达式与运算符与C语言的差别不大,现将其列表于下:
┌─────┬─────────┬──────────┐
│ 符 号 │ 运算符 │ 范 例 │
├─────┼─────────┼──────────┤
│ + │ 加法 │ $a+$b │
├─────┼─────────┼──────────┤
│ - │ 减法 │ $a-$b │
├─────┼─────────┼──────────┤
│ * │ 乘法 │ $a*$b │
├─────┼─────────┼──────────┤
│ / │ 除法 │ $a/$b │
├─────┼─────────┼──────────┤
│ % │ 取余数 │ $a%$b │
├─────┼─────────┼──────────┤
│ ++ │ 递增 │ $a++或++$a │
├─────┼─────────┼──────────┤
│ -- │ 递减 │ $a--或--$a │
├─────┼─────────┼──────────┤
│ == │ 等于 │ $a==10 │
├─────┼─────────┼──────────┤
│ === │ 绝等于 │ $a===10 │
├─────┼─────────┼──────────┤
│ != │ 不等于 │ $a!=10 │
├─────┼─────────┼──────────┤
│ < │ 小于 │ $a<9 │
├─────┼─────────┼──────────┤
│ > │ 大于 │ $a>8 │
├─────┼─────────┼──────────┤
│ <= │ 小于等于 │ $a<=10 │
├─────┼─────────┼──────────┤
│ >= │ 大于等于 │ $a>=1 │
├─────┼─────────┼──────────┤
│ = │ 相等赋值运算符 │ $a=0 │
├─────┼─────────┼──────────┤
│ += │ 加法指定运算符 │ $a+=5 │
├─────┼─────────┼──────────┤
│ -= │ 减法指定运算符 │ $a-=1 │
├─────┼─────────┼──────────┤
│ *= │ 乘法指定运算符 │ $a*=2 │
├─────┼─────────┼──────────┤
│ /= │ 除法指定运算符 │ $a/=5 │
├─────┼─────────┼──────────┤
│ %= │ 余数指定运算符 │ $a%=7 │
├─────┼─────────┼──────────┤
│ .= │ 字符串指定运算符│ $a.="hello" │
├─────┼─────────┼──────────┤
│ & │ 与 │ $a&$b │
├─────┼─────────┼──────────┤
│ | │ 或 │ $a|$b │
├─────┼─────────┼──────────┤
│ ^ │ Xor │ $a^$b │
├─────┼─────────┼──────────┤
│ ~ │ 非 │~$a(取1的补码 )│
├─────┼─────────┼──────────┤
│ << │ 向左移位 │ $a<<$b │
├─────┼─────────┼──────────┤
│ >> │ 向右移位 │ $a>>$b │
├─────┼─────────┼──────────┤
│and或&& │ 与 │$a and $b或$a&&$b │
├─────┼─────────┼──────────┤
│or或|| │ 或 │$a or $b或$a||$b │
├─────┼─────────┼──────────┤
│xor │ Xor │ $a xor $b │
├─────┼─────────┼──────────┤
│ ! │ 非 │ !$a │
└─────┴─────────┴──────────┘
┌───┬────────────┐
│符号 │ 意义说明 │
├───┼────────────┤
│ $ │变量 │
├───┼────────────┤
│ & │变量的指针(加在变量前)│
├───┼────────────┤
│-> │对象的方法或属性 │
├───┼────────────┤
│=> │数组的元素值 │
├───┼────────────┤
│? : │三元运算符 │
└───┴────────────┘
同C语言的比较一下吧。其中只是多了个“.”这一个运算符。它的作用是使两个字符串相连,如下例,显示结果为hello,my baby.
$a="hello,";
$b="my baby.";
echo $a.$b;
?>
还有一个符号也使PHP的功能强大了。这就是“$”。它是用于变量之前的,表示这是个变量,如$A,$b等。那它的作用又强在哪呢?这就是变量的变量。
如下例:
$a="go";
$$a="here";
echo $a;
echo $$a;
echo $go;
?>
显示结果为:
go
here
here
其实,在一个变量前加一个“$”,就是把这个变量的内容作为了一个新的变量名。这是PHP所特有的,有时可使程序简单化。
PHP基本语法
(1)常量类型
系统常量: True 真
False 假
PHP_OS 操作系统类型 等。
举例:
echo PHP_OS; ?>
自定义函数define():定义常量
举例1-2.php:
define(PI , “3.14”);
echo PI;
?>
说明:常量一旦定义,程序中就不允许再更改它的值。
(2)变量类型
PHP支持如下几种变量类型:
Integer 整型
Floating point number(double) 浮点型(双精度型)
Boolean 布尔型
String 字符串型
Array 数组
Object 对象
◇ PHP中变量属于松散数据类型,不必由编程者自己定义,而是在使用时由PHP编译器动态进行类型指定或转换。
◇ 变量名要以“$”符号开关,且区分大小写。
◇ 字符串可以用单引号和双引号作为分界符,但两者是有区别的。
◇ PHP支持以数字为下标的数组(索引数组)和以字符串为下标的数组(关联数组)。在PHP中可以使用array()函数来创建数组,也可以直接进行赋值。
1
8
php
mysql
1
php
8
没有显示
等价于:
$arr[0]=1;
$arr[2]=8;
$arr[1]=”php”;
$arr[“str”]=”mysql”;
如果默认数组下标从0开始:
$arr=array(1,”php”,8,”mysql”);
举例:1-3.php
$arr=array(0=>1,2=>8,1=>"php","str"=>"mysql");
for ($i=0;$i
{$str=each($arr);
echo "$str[value]
";
}
?>
$arr=array(0=>1,2=>8,1=>"php","str"=>"mysql");
for ($i=0;$i
{ echo $arr[$i]."
";
}
?>
程序中:
=>符号是向数组元素赋值,for循环用来输出整个数组。
.是两个字符串的连接符。若其中是一个数值型,自动转换成字符串型。
函数count():统计变量或数组中元素的个数。
函数each():返回数值元素的索引/值,共有四个参数:0,1,索引和值。
当$i=0时,arr[0]=0,arr[1]=1,arr[key]=0,arr[value]=1
当$i=1时,arr[0]=”str”,arr[1]=”php”,arr[key]=”str”,arr[value]=”php”
1、 PHP的流程控制
PHP中提供4条流程控制语句来实现分支结构和循环结构:
If … else … 条件语句
Switch 分支选择语句
Do … while … 循环语句
For … 循环语句
其中:在循环体中经常用到break和continue语句。Break语句用于无条件终止循环,continue语句用于提前结束此次循环,进入下一次循环。
1、函数定义:
function 函数名(形式参数列表)
{
函数体
}
◇ 形式参数列表是使用逗号分隔的一个变量序列,在函数体中可以把形式参数作为已经定义过的变量来使用。
◇ 一般函数体中通过return语句来实现返回值,返回值可以是任何数据类型。
2、 函数调用:
函数名(实际参数列表);
◇ 实际参数列表要与形式参数列表相对应。若实际参数个数多于形式参数,多余部分舍去;若实际参数个数少于形式参数,缺少部分用空参数代替。
若函数有返回值,可以利用函数调用为变量赋值:变量名=函数名(实际参数列表);
3、PHP常用函数
(1)变量类型函数:
如: Int empty(mixed var) 若var非零,则函数返回False
int isset(mixed var) 若var已初始化,则函数返回True
int unset(mixed var) 取消变量初始化,以后用到var将是一个没有初始化变量
其中mixed var 表示不包括数组、对象等简单变量
(2)字符串操作函数
如: int strlen(string str) 返回字符串长度
int chop(string str) 除去字符串的尾部空格
int ltrim(string str) 除去字符串的头部空格
int trim(string str) 除去字符串的两头空格
echo “string str1,string str2,…” 字符串输出,只有一个参数才加括号。实际是语句。
String substr(string str,int start,int [length]) 子串截取
(3)数组操作函数
如:array array(……) 最常用数组创建函数,参数可是关键字,也可数字下标
array list(……) 给一组变量一次性赋值,只能用于赋值左边,下标要连续
举例: list($a,$b,$c)=array(“a”,”b”,”c”);
echo “$a,$b,$c”; 输出:a,b,c
int count( var ) 计算变量var元素个数,若是空返回0,若是普通返回1
int sizeof(array var) 只能用于数组,返回数组元素个数
其它还有:数学运算函数、日期函数、文件函数、目录函数、图像函数、辅助函数等
四、PHP网络函数与MYSQL数据库
1、用PHP的连接或关闭函数实现数据库访问
格式:int mysql_connect(string [hostname][:port], string [username], string [password])
其中:hostname为主机名,默认为localhost,port为端口号,默认为80
username为用户名,默认为root, password为密码,默认为空
◇ 利用该函数进行数据库连接时,操作数据库结束之后会自动关闭此连接。
◇ 如果函数与数据库连接成功,将返回一个连接号,否则返回Flase。
◇ 当然,在执行该代码前,先要启动MYSQL服务器。
举例:2-1.php
$connect=mysql_connect("localhost");
echo $connect; 输出:Resource id #1
?>
2、用PHP的选择数据库
格式:int mysql_select_db(string databasename,int [linked])
功能:相当于FOXPRO中的USE命令
其中:databasename为要选择的数据库名称,linkid默认为最近一次的连接号,可省略。
如果数据库选择成功,返回True,否则返回False。
举例:2-1.php
$connect=mysql_connect("localhost");
echo mysql_select_db("example",$connect);
mysql_close();
?>
3、用PHP的实现记录的SQL操作
格式:int mysql_query(string sql, int [linked])
◇ 需要先由mysql_select_db()函数选择数据库。
◇ sql是一条SQL语句,linked为数据库连接号,可以省略。
举例:2-2.php
$connect=mysql_connect("localhost");
mysql_select_db("example");
$result=mysql_query("select * from txb");
echo $result;
mysql_close();
?>
◇ 如果sql中的语句为select,则函数返回一个结果号,该结果号通常没有什么实际意义,一般用作另的函数的参数,与其他函数配合使用。否则返回值没有任何意义。
4、用PHP的实现数据库记录的操作
格式:array mysql_fetch_array(int result, int [result_type])
◇ 获得数据表当前行的记录,其返回结果为一个数组,数组以字段名及数值索引为下标,以字段内容为值,同时记录指针会自动下移一行。
◇ 如果记录到了最后一行,函数返回一个空数组。
◇ result_type 为一可选常量,可为MYSQL_NUM、MYSQL_ASSOC、MYSQL_BOTH
格式:array mysql_fetch_row(int result)
◇ 作用与前面函数相同,只是它返回的数组只能以数值索引为下标。
举例:2-3.php
$connect=mysql_connect("localhost");
mysql_select_db("example");
$result=mysql_query("select * from txb");
while ($arr=mysql_fetch_array($result))
{
echo $arr["xm"],$arr["xb"],$arr["dw"],$arr["tel"],"
";
}
mysql_close();
?>
从 HTML 中分离
PHP 的脚本由文件中一对特殊的标记所引起的内容,当解释器分析一个文件时,所有特殊标记外的普通文件,解释器不对其做任何处理,而特殊标记内文件将作为 PHP 代码被解释器分析执行。该运行机制将允许您在 HTML 中嵌入 PHP 代码:PHP 标记外的内容将被完全独立开,不做任何处理,而内部的将作为 PHP 代码解析。
用来标记 PHP 代码块的标记共有四套,其中只有两套总是有效( 和 );另外两套可以在 php.ini 配置文件中开启或者关闭。虽然短格式的标记和 ASP 风格的标记可能比较省力,但是某些情况下您可能必须要使用长格式的标记。比如,您打算在 XML 或者 XHTML 中嵌入 PHP 代码,您将需要使用 形式的标记以适应 XML 的标准。
PHP 支持的标记为:
例子 5-1. 从 HTML 中分离的方式
1.
2. echo ("this is the simplest, an SGML processing instruction\n"); ?>
= expression ?> This is a shortcut for " echo expression ?>"
3.
4. <% echo ("You may optionally use ASP-style tags"); %>
<%= $variable; # This is a shortcut for "<% echo . . ." %>
优先选用的方式为第一种方式 ,因为它允许您在 XML 结构,如 XHTML 的代码中使用 PHP。
第二种方式并非总是可用的。只有当您在 php.ini 配置文件中激活 short_open_tag 选项,才是可用的。您也可以通过使用 short_tags() 函数(仅用于 PHP 3),或者使用 --enable-short-tags 选项 configure PHP 来激活短格式标记。在 php.ini-dist 配置文件中,默认是开启短格式标记的,但是建议您不要使用该标记。
在 PHP 配置文件中开启选项 asp_tags 将激活第四种方式。
注: ASP 风格的标记添加于 PHP 3.0.4
注: 当开发大型应用程序或者用于分发的函数库,或者在不受您控制的 PHP 服务器上面开发程序时,请不要使用短格式的标记,因为目标服务器可能并不支持短格式的标记。为了便于移植,请保证用于再分发的代码中不使用短格式的标记。
PHP 代码块结束标记奖自动包含最近的一个结尾的新行(如果存在的话)。而且,结束标记自动隐含一个分号; 您不需要为 PHP 代码块的最后行追加一个分号。
PHP 允许您使用如下的结构: 例子 5-2. 更高级的脱离
if ($expression) {
?>
This is true.
} else {
?>
This is false.
}
?>
PHP 将直接输出结束标记和下一个开始标记中的任何非 PHP 代码。当需要输出大量的文本时,退出 PHP 解析模式将比使用 echo() 或者 print() 或者此类的函数打印所有文本要更加的有效。