基础知识
PHP——HyperText Preprocessor(超文本预处理器,服务器脚本语言)
PHP语法结构:
①标准风格(XML风格):<?php ?>
②短风格:<? ?> 需配置php.ini:short_open_tag=On 并重启服务器
③ASP风格:<% %> 需配置php.ini:asp_tags=On 并重启服务器
④长风格:<script language="php"> </script>
编码问题:
<?php
header("content-type:text/html;charset=utf-8"); //header()写在任何输出之前
?>
PHP文档的组成:
PHP代码、HTML、CSS、JS
PHP中的注释:
单行注释://注释内容 #注释内容
多行注释:/*注释内容*/
【变量】
变量名称区分大小写
//声明变量
$a;
$b;
//声明变量并赋值
$a=123;
$b="autumn";
$c=$d="abc123";
//输出
echo $a;
echo $a,$b,$c;
【系统预定义变量】
$GLOBALS:系统全局作用域中的全部变量
$_ENV:当前服务器的系统环境
$_FILES:接收上传到服务器的文件
$_FILES[上传框架的名称]['name']:上传的文件的名称
$_FILES[上传框架的名称]['type']:上传的文件的MIME类型
$_FILES[上传框架的名称]['tmp_name']:保存在服务器端的临时文件,我们在服务器端处理的都是这个临时文件
$_FILES[上传框架的名称]['error']:上传文件的错误号
0:没有错误,文件上传成功
1:上传的文件超过了 php.ini 中 upload_max_filesize 限制
2:上传的文件超过了HTML表单中 MAX_FILE_SIZE 的值
3:文件只有部分被上传
4:没有文件被上传
6:找不到临时文件
7:文件写入失败
8:由于PHP扩展程序中断了文件上传
$_FILES[上传框架的名称]['size']:上传的文件的大小
$_SERVER:接收服务器的相关信息
$_SERVER['HTTP_USER_AGENT']:返回当前客户端浏览器信息
$_SERVER['HTTP_REFERER']:返回上级请求来源地址
$_SERVER['SERVER_NAME']:服务器名称
$_SERVER['SERVER_ADDR']:服务器的IP地址
$_SERVER['REMOTE_ADDR']:客户端的IP地址
$_SERVER['DOCUMENT_ROOT']:网页文件根目录(www根目录)
$_SERVER['SCRIPT_FILENAME']:获取当前脚本文件名
$_SERVER['QUERY_STRING']:获取所有的get参数字符串,通常情况下配合parse_str函数使用(parse_str将字符串解析成多个变量)
$_SERVER['REQUEST_URI']:获取包括get参数在内的URL地址
$_SERVER['REQUEST_TIME']:获取当前文件请求的时间戳
$_GET:它可以获得以?形式传参的数据,http的get方式发送的数据
$_POST:接收http的post方式发送的数据
$_COOKIE:接收cookie数据
$_REQUEST:可以接收$_GET/$_POST/$_COOKIE
例:
<h1>注册页面</h1>
<form method="post" action="doAction.php">
用户名:<input type="text" name="username" value="" /><br/>
密码:<input type="password" name="password" value="" /><br/>
<input type="submit" value="注册" />
</form>
-------------------------------------------------------------------------------------------
echo "用户名为:".$_REQUEST['username'];
echo "密码为:".$_REQUEST['password'];
【常量】
在脚本执行期间一经定义不可改变
常量名称一般为大写字符
定义常量:
define(常量的名称,常量的值);
例:
define("AUTUMN","this is my name");
echo AUTUMN;
注意:使用常量时直接使用常量名称,不用加引号
【魔术常量】
__LINE__:文件中的当前行号
__FILE__:文件的完整路径和文件名
__CLASS__:类的名称
__METHOD__:类的方法名称
__FUNCTION__:函数的名称
PHP_EOL:对源代码换行,以适应不同系统平台
Windows的换行为:\r\n;Unix、Linux中换行为:\n;MacOS中换行为:\r;
【数据类型】
8种基本数据类型(标量类型、复合类型、特殊类型)、3种伪类型(mixed混合类型、number数字类型、callback回调类型)
①标量类型
整型(int,integer):-21亿~21亿,无符号0~42亿,超出整型的存储会溢出
浮点型(float/double):1.1、1.2、-1.0、2e3(2*103)、2E3(2*103)
字符串型(string):字符串的值要写在定界符内(" "、' '、<<<(HereDoc))
HereDoc:写大量文本时用
<<<名称
内容
名称;
例:
$table=<<<tablename
<table>
<tr>
<td></td>
<td></td>
</tr>
</table>
tablename; //此处须顶行写,前面不可以有任何符号,包括空格也不可以有
echo $table;
布尔型(boolean):true、false、TRUE、FALSE
②复合类型
数组(array):$arr=array(1,2,3,4);
对象(object):$object=new stdClass();
③特殊类型
资源(Resource):$handle=fopen("文件名","打开方式");
空(null/NULL):1.未声明的变量;2.声明变量的同时并赋值为null(NULL)的;3.被unset()函数注销的变量;
【转义符】
\n:换行
\r:回车
\$:$本身
\':单引号本身
\":双引号本身
\\:反斜线本身
【单引号和双引号的区别】
1.双引号可以解析变量,而单引号不能解析变量
$username="Autumn";
echo "我的名字是",$username; = echo "我的名字是$username";
echo '我的名字是',$username; ≠ echo '我的名字是$username';
2.双引号支持所有转义符,而单引号只支持 \'、\\ 这两个转义符
3.双引号当中的变量需要使用特殊字符隔开,特殊字符会被原样输出,{ } 除外
4.双引号和单引号当中如果包含自己,其中的单引号或双引号需要转义
5.双引号和单引号可以互相嵌套
6.双引号当中包含单引号,而单引号中又包含变量,此时变量可解析,单引号原样输出
7.变量及字符串的连接用 . 完成
8.单引号效率高于双引号
【{ }花括号的作用】
①PHP引擎在解析变量的时候会尽可能多地去取合法字符,它认为取得的合法字符越多,这个变量的含义越明确
$username="Autumn";
echo "$username123"; //不输出,解析默认查找变量“username123”未定义
echo "{$username}123"; //输出 Autumn123
②{ }能取出字符串中的指定字符,下标从0开始
$string="autumn";
$string{0}="A";
echo $string; //输出 Autumn
echo $string{0}; //输出 A
echo $string{1}; //输出 u
【运算符】
①算术运算符
+ - * / % ++ --
++:自增运算符
$var=1;
++$var; //前缀形式:先加减,后执行,加减的数值为1;
$var++; //后缀形式:先执行,后加减,加减的数值为1;
--:自减运算符
注意:数字支持自增、自减;字母只支持自增;布尔类型不支持自增、自减;NULL(空)只支持自增操作;
例:
$test="z";
echo ++$test; //aa
$test="a1";
echo ++$test; //a2
$test="a9";
echo ++$test; //b0
$test="1a";
echo ++$test; //1b
$test="1z";
echo ++$test; //2a
②字符串连接符
. .xxx.
echo "<span style='color:rgb(255,255,255);'>X</span>";
echo "<span style='color:rgb(".mt_rand(0,255).",".mt_rand(0,255).",".mt_rand(0,255).");'>X</span>";
③赋值运算符
=
+= :$a+=2; -> $a=$a+2;
-= :$a-=2; -> $a=$a-2;
*= :$a*=2; -> $a=$a*2;
/= :$a/=2; -> $a=$a/2;
%= :$a%=2; -> $a=$a%2;
.= :$a.=2; -> $a=$a.2;
④比较运算符
> >= < <=
==:等于,判断左右两侧的表达式值是否相同,不用判断类型
===:全等于,既判断数值是否相等,又判断类型是否相同
!=:不等于
<>:不等于
!==:不全等
⑤逻辑运算符
and &&:并且的意思,逻辑与
短路:只要第一个表达式为假,就不用管第二个表达式的真假,根本执行不到第二个表达式就已经返回为假
true && true --> true
true && false --> false
false && true --> false 短路
false && false --> false 短路
$a=1; $b=0;
var_dump(--$a && ++$b); --> false
var_dump($a); --> 0
var_dump($b); --> 0
or ||:或者的意思,逻辑或
短路:当第一个表达式为真,即跳过第二个表达式的执行,直接返回结果为真
true || true --> true 短路
true || false --> true 短路
false || true --> true
false || false --> false
not !:取反的意思,逻辑非
!true --> false
!false --> true
xor:逻辑异或
true xor false --> true
false xor true --> true
true xor true --> false
false xor false --> false
⑥三元运算符
? :
(exp1)?(exp2):(exp3);
如果表达式1为真,输出?后的表达式2的内容;如果表达式1为假,输出:后的表达式3的内容
类似于:if...else...
if(exp1){
exp2;
}else{
exp3;
}
⑦` ` 反引号:执行运算符
需要配置PHP的配置文件中“safe_mode=off”,如果开启安全模式则反引号就没有作用了
例:echo `ipconfig`;
⑧ @:错误抑制符
写在表达式之前
⑨其他运算符
数组 键名=>键值
对象 对象->属性或方法
instanceof 是否实例化一个类
【流程控制】
①
if(exp)
......; //只执行一条语句
②
if(exp){
表达式为真的代码段
}
③
if(exp){
执行为真时的代码段
}else{
执行为假时的代码段
}
④
if(exp1){
执行exp1为真时的代码段
}elseif(exp2){
执行exp2为真时的代码段
}elseif(exp3){
...
}
⑤
switch (exp){
case 值1:
执行代码段;
break;
case 值2:
执行代码段;
break;
......
default:
执行代码段;
break;
}
【循环】
①
for(exp1;exp2;exp3){
执行循环体
}
for循环执行过程:
exp1:无条件的赋初始值
exp2:判断进入循环的条件,exp2如果为真,才能执行循环体,如果为假,进不了循环;
exp3:执行完循环体之后对变量的操作,立刻又判断exp2,直到exp2为假时结束
例:
输出0~100之间的偶数
for($i=0;$i<=100;$i+=2){
echo $i,"<br/>";
}
输出0~100之间的奇数
for($i=1;$i<=100;$i+=2){
echo $i,"<br/>";
}
输出1~100之间的偶数
for($i=1;$i<=100;$i++){
if($i%2 == 0){
echo $i,"<br/>";
}
}
求1~100之间所有数字的和
for($i=1;$i<=100;$i++){
$sum+=$i;
}
echo $sum;
输出5行20列的表格
echo "<table width='500' border='1'>";
for($i=1;$i<=5;$i++){
echo "<tr>";
for($j=1;$j<=20;$j++){
echo "<td>X</td>";
}
echo "</tr>";
}
echo "</table>";
②
do{
执行循环体
}while(exp);
先执行一次循环体,接着判断表达式是否为真,如果为真,继续执行循环;
③
while(exp){
执行循环体
}
先判断exp是否为真,如果为真执行循环体;
break:结束当次循环
continue:跳过当次循环,进入下次循环,当次循环的结果不显示;
for(exp1;exp2;exp3):
执行循环体
endfor;
while(exp):
执行循环体
endwhile;