错误的学习编码语言观点:语言语法不用记,多练习就可以了。 应该是死记住,然后加强练习以免忘记。以及在练习中加强理解。试着想“为什么是这样的语法习惯”。
PHP提供了8种数据类型。4种是标量型(单值)的:整型、浮点型、字符串和布尔值;两种是复合型(集合)的:数组和对象。两种特殊类型:资源和NULL
静态变量在所有对该函数的调用中是共享的,而非静态变量会在函数结束时被销毁。
嵌套声明并没有限制内部定义函数的可见性。除非外部函数被调用,否则内部函数无法被调用。
字符串的定义:
字符串可以是任意长度的字符序列。字符串直接量用单引号或双引号分隔。
变量用双引号括起来,单引号中的变量符号不解析。
测试两个字符串是否相等,使用==比较操作符: if($a==$b) {echo "a and b are equal"}
使用is_string()函数测试一个值是否为字符串:if(is_string($x)){//}
PHP提供了操作符和函数来对字符串进行比较、拆分、合并、查找、替换和去除首尾空格,也有许多特定的字符串函数来处理HTTP、HTML和SQL编码。
变量的替换:
有两种方法把变量替换到字符串中:
1、双引号包含
$who='kilroy';
$where='here';
echo "$who was $where";
2、大括号包含。这种方法可以用于消除歧义或替换数组查找。大括号的经典作用是把变量名从周围的文本中分隔出来。
$n=12;
echo "You are the {$n}th person";
You are the 12th person
如果没有大括号的话,PHP就会尝试打印出变量$nth的值。
和一些shell环境不同,在PHP字符串中变量不会重复解析,而只处理在双引号字符串中的解析,然后把其结果作为字符串的值。
$bar='this is not printed';
$foo='$bar';//单引号
print("$foo");//双引号
$bar
用单引号括起来的字符串并不替换变量:
$name='Fred';
$str='Hello,$name';//用单引号括起来
echo $str;
Hello,$name
特殊符号转义:
在用单引号括起来的字符串中唯一可用的转义序列是\'(把单引号放在用单引号括起来的字符串中)、\\(把一个反斜杠放在用单引号括起来的字符串中)。任何其他的反斜杠只能被解释为一个反斜杠:
$name='Time O\'Reilly'; //转义的单引号
echo $name;
Time O'Reilly
$path='C:\\WINDOWS'; //转义的反斜杠
echo $path;
C:\WINDOWS
$nope='\n'; //不是转义序列
echo $nope;
\n
用双引号括起来的字符串将会进行变量解析并且允许使用许多转义序列。\"(双引号)、\n(换行符)、\r(回车)、\t(制表符)、\\(反斜杠)、\$(美元符号)、\{、\}、\[、\](左右大括号与中括号)、\0 throuth \777(用八进制表示的ASCII字符)、\x0 through \xFF(用十六进制表示的ASCII字符)
如果在用双引号括起来的字符串中发现一个未知的转义序列,就忽略这个转义序列(如果警告级设置为E_NOTICE,就会为这样的未知序列产生一个警告):
$str="What is \c this?"; //未知的转义序列
echo $str;
What is \c this?
字符串的打印:有4种方法可以向浏览器发送输出内容。echo结构让你一次输出许多值,而print()只能输出一个值。printf()函数通过把值插入到模板中来建立一个格式化的字符串。print_r()函数利于调试——它用更容易读懂的方式来打印数组、对象和其它东西的内容。 echo的大部分行为看起来像是一个函数,但其实echo是一个语言结构(language construct)。这意味着可以省略小括号,所以下面两个语句是等价的:
echo "Printy";
echo ("Printy"); //也是合法的
可以通过逗号分隔来指定打印多个项:
echo "First","second","third";
Firstsecondthird
在尝试echo多个值时,使用小括号会产生语法错误:
echo("Hello","world"); //这是一个语法错误
因为echo并不是真正的函数,所以不可以把它作为表达式的一部分使用:
if(echo("test")){echo ("it worked!");}
通过使用函数print()或printf(),很容易补救这种错误。
print():函数print()发送一个值(它的参数)给浏览器。如果字符串成功显示则返回true,否则返回false(例如,用户在页面提交之前按下Stop按钮)
if (!print("Hello,world")){
die("you're not listening to me!");
}
Hello,world
printf():函数printf()通过把值传入到模板中(即定义好的字符串格式)来输出一个字符串。它源自标准C库中的同名函数。
函数sprintf()和printf()的参数相同,但只是返回生成的字符串而不打印出来。这可以让你把字符串保存到一个变量*稍后使用:
$date=sprintf("%02d/%02d/%04d",$month,$day,$year);//现在我们可以在任何一个需要日期的地方将类型说明符%的替换成$date的值。
print_r()结构可以聪明地显示传给它的东西,而不是像echo和print()那样把所有的都转换为字符串。使用print_r(),字符串和数字都简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头。
在数组中使用print_r()可以将移动内部的迭代器指针指到数组里最后一个元素的位置。
访问单个字符:
函数strlen()返回字符串中的字符数,即字符长度:
$string='Hello,world';
$length=strlen($string); //$length为12
可以在字符串中使用字符串偏移量语法来定位单个字符:
$string='Hello';
for($i=0;$i<strlen($string);$i++){
printf("The %dth charactor is %s\n",$i,$string{$i});
}
The 0th character is H
The 1th character is e
The 2th character is l
The 3th character is l
The 4th character is o
整理字符串
通常,我们从文件或用户得到的字符串在使用前需要整理(Cleaning)。原始数据的两个普遍问题是没用的空白符号(如空格、换行)的存在和不正确的字母大小写。
删除空白符
可以使用函数trim()、ltrim()、rtrim()删除字符串开头或结尾的空白符(whitespace):
$trimmed=trim(string[,charlist]);
$trimmed=ltrim(string[,charlist]);
$trimmed=rtrim(string[,charlist]);
trim()返回删除首尾空白的字符串。ltrim()(l是指left) 只删除字符串开头的空白。rtrim()(r是指right)只删除字符串末尾的空白。可选参数charlist是一个指定所有要删除字符的字符串。默认情况下要删除的字符有:空格(" ")、制表符("\t")、换行("\n")、回车("\r")、字符("\0")、纵向列表符("\x0B")
改变大小写
PHP有一些函数用于改变字符串的大小写:strtolower()和strtoupper()操作整个字符串,ucfirst()只操作字符串的第一个字母,ucwords()则操作字符串中每个单词的第一个字母。每一个函数都把字符串作为参数来执行,并适当地改变大小写,然后返回字符串的拷贝。例如:
$string1="FRED flintston";
$string2="barney rubble";
print(strtolower($string1)); //fred flintston
print(strtoupper($string1)); //FRED FLINTSTON
print(ucfirst($string2)); //Barney rubble
print(ucwords($string2)); //Barney Rubble