PHP程序设计读书笔记第二章

lexical structure 词法结构

//将实体 &#nnn;  转换成字符

$text = pre_replace('/&#([0-9])+;/e',"chr('\\1')",$text);
里面用到了正则表达式(regular expression)

/&#([0-9])+;/e

[0-9] 表示匹配的0-9之间的字符

([0-9]) 表示子模式

([0-9])+ 重复一次或更多

prel风格是可以使用任何相同得字符作为开始和结束符的!!好像 “/”跟 “~”作用是一样的!

&#([0-9])+;   等于  &#nnn;

/ &#([0-9])+; /定义了开始和结束。

e是后缀选项   /regexp /e 

意义:如果替换字符串是PHP代码,使用eval()执行该代码来得到实际的替换字符串

PHP eval() 函数

PHP 杂项函数
定义和用法

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
语法

eval(phpcode)

参数 	描述
phpcode 	必需。规定要计算的 PHP 代码。
提示和注释

注释:返回语句会立即终止对字符串的计算。

注释:该函数对于在数据库文本字段中供日后计算而进行的代码存储很有用。
例子

<?php
$string = "beautiful";
$time = "winter";

$str = 'This is a $string $time morning!';
echo $str. "<br />";

eval("\$str = \"$str\";");
echo $str;
?> 

输出:

This is a $string $time morning!
This is a beautiful winter morning! 

注意#  eval("  \$str = \" $str \"  ;  ");

绿色部分表示对 $str 不转换。等价于 $str = "This is a $string $time morning!';

chr('\\1')
逆向引用 Backreference

\1 引用第一个子模式的内容

\2 引用第二个子模式的内容

如果嵌套了子模式,那么第一个引用以第一个左小括号开始

第二个引用以第二个左小括号开始。

注意!#不能捕获超过99个子模式

知识点!#Perl被视为强大的正则表达式标准。PHP使用一个被称为pcre的C库几乎完全支持PERL正则表达式的特性!

定义和用法
  PHP chr() 函数从指定的 ASCII 值返回字符。
编辑本段语法
  
chr(ascii)
参数	描述
ascii	必需。ASCII 值。
编辑本段提示和注释
  注释:ascii 参数可以是十进制、八进制或十六进制。通过前置 0 来规定八进制,通过前置 0x 来规定十六进制。
编辑本段例子
  
<?php
echo chr(52);
echo chr(052);
echo chr(0x52);
?>
输出:
4 * R

发现一个好的参考帖子,转发在以下

正则表达式用于字符串处理、表单验证等场合,实用高效。现将一些常用的表达式收集于此,以备不时之需。

匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了

匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行

匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用

匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求

匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用

匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822

匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始

匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字

匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位

匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用

匹配特定数字:
^[1-9]\d*$    //匹配正整数
^-[1-9]\d*$   //匹配负整数
^-?[1-9]\d*$   //匹配整数
^[1-9]\d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$   //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$  //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$  //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$  //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^\w+$  //匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式

原载地址:http://lifesinger.3322.org/myblog/?p=185


literals 直接量 identifier [ai'dentifaiə] 标识符

变量区分大小写,函数不区分大小写

define()定义常量

define(‘CL','CONSTANT OF PHP');

echo CL;

PHP提供了8种值类型

4种是标量型 整形,浮点数,字符串,布尔型

整形的范围 -2 147 483 648 到 + 2 147 483 647 这个范围和C编译器的中的长整形范围相同。C标准没有指定长整形一定在什么范围内,所以在一些系统里会有不同的整形范围。


八进制 0755  //十进制为255  +010   //十进制为8

十六进制 0xFF 0X10 -0XDAD1

如果将一个太大的整数非整数存储为整形。会自动转换为浮点数

is_int()   测试整数

if (is_int($x)) {

echo "$x是一个整数“;

}

floating-point numbers 浮点数

PHP浮点数和C编译器中的双精度型的范围一样。通常允许数值在 1.7e-308和1.7e+308之间。

精确到15个数字。如果整数值需要更高的精度或更宽的范围,可以使用BC或GMP扩宽。


浮点数仅仅是数的近似表示。例如,在很多系统里3.5实际上被表示为3.499999999999

这意味着写代码时要避免假定浮点数是完全精确的,例如使用==直接比较两个浮点数的值

一般的做法是移动若干次小数点位置后再比较。

if(int($a × 1000) == int($b * 1000))

if_float() 函数 来测试一个值是否是浮点数


strings字符串

单引号中的变量符号不解析,但是认可用\\得到一个反斜杠的直接量,用\'得到一个单引号的直接量

双引号也支持多种字符转义。

\n 换行

\r回车

\t 制表符

\0 - \777 用八进制表示 ASCII字符

\x0 - \xFF 用十六进制表示ASCII字符

测试两个字符串是否相等,可以使用==比较操作符;

if($a == $b) { echo " a nd b are equal " }

is_string()  测试一个值是否为字符串

booleans 布尔型

在PHP中,下面的值为false

# 关键词 false

# 整数 0

# 浮点数 0.0

#空字符串(“”)和字符串“0”

#元素个数为0的数组

#没有值的函数或对象

#NULL值

<?php
$person[0] = "雷";
$person[1] = "庚";
$person[2] = "宇";
$creator['产品设计师1'] = "雷";
$creator['产品设计师2'] = "庚";
$creator['插画师'] = "宇";
$person = array('雷','庚','宇');
$creator = array('产品设计师1' => '雷','产品设计师2' => '庚','插画师' => '宇');
foreach ($person as $name) {
	echo "hello,$name\n";
}
foreach ($creator as $a=>$b) {
	echo "$b 的工作是$a\n";
}
?> 

is_arrry() 来测试一个值是否为数组。

定义和用法

sort() 函数按升序对给定数组的值排序。

注释:本函数为数组中的单元赋予新的键名。原有的键名将被删除。

如果成功则返回 TRUE,否则返回 FALSE。

定义和用法

asort() 函数对数组进行排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序。

可选的第二个参数包含了附加的排序标识。

如果成功则返回 TRUE,否则返回 FALSE。

语法

asort(array,sorttype)
参数描述
array必需。输入的数组。
sorttype

可选。规定如何排列数组的值。可能的值:

  • SORT_REGULAR - 默认。以它们原来的类型进行处理(不改变类型)。
  • SORT_NUMERIC - 把值作为数字来处理
  • SORT_STRING - 把值作为字符串来处理
  • SORT_LOCALE_STRING - 把值作为字符串来处理,基于本地设置*

*:该值是 PHP 4.4.0 和 5.0.2 新加的。在 PHP 6 之前,使用了系统的区域设置,可以用 setlocale() 来改变。自 PHP 6 起,必须用 i18n_loc_set_default() 函数。


对象Objects

<?php
class Person{
	public $name='';
	function name ($newname = NULL){
		if(!is_null($newname)){
			$this->name=$newname;
		  }
		  return $this->name;
	}
}
$ed = new Person;
$ed->name('孙悟空');
printf("hello, %s \n",$ed->name);
$tc = new Person;
$tc->name('紫霞仙子');
printf("你爱的人是%s\n",$tc->name);
?> 

if_object()函数可测试一个值是否为对象


资源 resources(或称句柄)













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值