目录
PHP认识脚本程序
PHP标记语言
<?php //开始标记,
//<? //php的短标记,需要在php.ini 中进⾏配置。
phpinfo(); //显示php 的详细配置信息,其中包含系统与Apache 服务器信息。
//结束标记
?>
- 只要能够在⼀个⽹站中,看到 phpinfo() 的内容,说明php 环境'正常';如果是⼀个在线的⽹站能够看到该⻚⾯,说明存在敏感信息泄露 漏洞,这个漏洞需要体现在后⾯的渗透测试报告中;再 有,如果通过⽂件上传,能够看到该⻚⾯,说明存在⽂件上传 漏洞,并且能够"完美利⽤"。
- <?php ?> 这之间就表示进⼊PHP模式,在开始和结束标记之外的内容都会被PHP解析器忽略,之外的内容会被作为字符输出到浏览器中。
- 可以直接嵌⼊到html代码中,并且可以嵌⼊到html代码中的任何地⽅,可以实现PHP 代码与 HTML 代码进⾏混编 ,HTML 代码对于PHP 来说,就是字符串。PHP 负责将字符输出到浏览器 中,浏览器负责根据字符中所包含的HTML 代码进⾏渲染。
- 在⼀个html⽂档中可以嵌⼊任意多个PHP 标记!
- ⽂件末尾的PHP代码段结束标记 ?> 可以不要,在⼀些情况下省略掉更好!
- 建议,不要省略结束标记。
指令分隔符
分号, 。
- PHP用分号表示一句话的结束。
- 结束标志?>就隐含一个分号,所以PHP代码最后一行可以不用加分号!
- 建议,每条PHP语句都要使用分号结束。
注释
<?php
/*
这是⼀个多⾏注释,
可以有多⾏⽂字
*/
//这是单⾏注释
?>
<?php
/*
This is index.php!
--AJEST--
*/
// DNSec.com.cn
?>
遇到空白的处理
空白符包括:
- 空格
- tab制表符
- 换行
这些在
PHP
中都是⽆关紧要的(注意都是英⽂输⼊法下输⼊的),可以将⼀个语句展开成任意⾏,或者紧缩在⼀⾏,空格与空⾏的合理运⽤可以增强代码的清晰性与可读性,如果运⽤不合理反⽽会对阅读产
⽣负担!
不能是用空白符打断PHP的关键字(函数名,语句名,变量名,类名,方法名等等)。
变量
现实⽣活中在家⾥⽤柜⼦来存放⾐服、包、书籍或者其他的东⻄
变量包含四个部分内容:
- 变量名
- 内存空间(⼀般不需要关⼼,都是程序⾃动完成创建与销毁的。)
- 变量值(变化)
- 数据类型,变量值的类型(可以是抽象的)
变量是用于临时存储值得容器。
变量在任何编程语言中的都是核心地位。
另外,PHP脚本语言是一种弱类型语言,和其他语言不同的是变量(常量)的数据类型由程序的上下文决定(给⼀个变量赋予什么样的值,就是什么数据类型)。
变量的声明
PHP
的特性之⼀就是它
不要求在使⽤变量之前声明变量
,当第⼀次给⼀个变量赋值时,才创建了这个变量,变量⽤于存储值⽐如数字、⽂本字符串或者数组。⼀旦设置了某个变量,就可以在脚本中重复地使
⽤它。
PHP中变量必须使用一个美元符号$后面跟着变量名来表示,使用赋值操作符=给一个变量赋值。
<?php
echo $name; //notice,变量未定义,内存中没有该变量。
$name = "wxkun"; //变量的初始化赋值,会在内存创建该变量。
echo $name; //wxkun
?>
变量的释放
unset() 函数释放指定的变量。
<?php
echo $name;
$name = "wxkun";
echo $name;
echo "<hr />";
unset($name); //释放$name
echo $name; //Notice: Undefined variable: name
?>
变量的命名
-
变量名是严格区分⼤⼩写的。以下变量是完全不同的。
<?php
$name = "wxkun";
echo $Name;
echo $NAME;
echo $nAme;
?>
-
变量名由字⺟、数字、下划线组成,并且不能以数字开头,也不能包含其他字符(空⽩字符、特殊 字符、空⽩符等等)。
<?php $name = "wxkun"; $name1 = "WXKUN"; $my_name = "雄霸天下"; $_name = "保八挣七"; echo $name; echo "<hr />"; echo $name1; echo "<hr />"; echo $my_name; echo "<hr />"; echo $_name; echo "<hr />"; ?>
-
变量命名时,建议使⽤驼峰式命名法或者下划线命名法,做到变量名 " ⻅名知意 " 。
<?php $firstName; $lastName; $first_name; $last_name; ?>
-
PHP 中有⼀些标示符是系统定义的,也称为关键字,是 PHP 语⾔的组成部分,因此不能使⽤它们中 的任何⼀个作为常量函数名或类名。但是和其他语⾔不同的是可以在 PHP 中作为变量名称使⽤,不过这样容易混淆,所以最好还是不要⽤ PHP 的关键字作为变量名称。
<?php $echo; //建议不要使用 ?>
变量的赋值于初始化
- 在第⼀次使⽤变量时,就进⾏赋值,这个过程叫"初始化"。在后期使⽤变量的时候,可以随时修改变量 的值。
- 直接⽤⼀个等于号 = ,就可以完成变量的赋值。
<?php echo $name; //Notice: Undefined variable: name echo "<hr />"; $name; echo $name; //Notice: Undefined variable: name echo "<hr />"; $name = "wxkun"; echo $name; //wxkun ?>
可变变量 - $$
- ⼀个变量的名字 可以动态的设置和使⽤。
- $$ 是php 的特性,也是产⽣php 中变量覆盖漏洞 的原因。
<?php $name = "wxkun" $$name = "dnsec.com.cn" //wxkun echo $name; echo "<hr />"; echo $$name; echo "<hr />"; echo $wxkun; //dnsec.com.cn, 定义过$wxkun,并且进行了初始化。 ?>
变量引用赋值
引用赋值可以简单的理解为给变量起了个别名
<?php $a = 6; $$a = 100; //$6 echo $$a ; //100 //$6, 这种写法是非法的 echo "<hr />" $b = $a; $b += 1; echo $b;echo "|";echo $a; echo "<hr />"; $c = &$a; //变量的引用赋值 //相当于给变量起了一个别名 $c +=1; echo $c;echo "|";echo $a; ?>
变量类型
-
变量类型是指保存在该变量中的数据的数据类型,在计算机编程语⾔世界中每个数据都有它的类型。具有相同类型的数据才能被彼此相互操作。
-
在强类型的语⾔中例如 C 语⾔,变量要先指定类型(变量的声明),然后才可以存储对应指定的数据,就好⽐现实⽣活中在制作⼀个柜⼦之前,就要决定好这个柜⼦是什么类型的柜⼦,是书柜那么以后就只 能⽤来存书,是⾐柜以后就只能⽤来存⾐服。
-
但是 PHP 是⼀种弱类型的语⾔,和其他语⾔不同的是,变量或者常量的数据类型由程序的上下⽂决定,不需要事先声明类型。⼀个柜⼦,要是往⾥⾯存书籍那么他就是书柜;要是往⾥⾯存放⾐服,那么它就 是⾐柜,根本不需要事先说明这个是书柜还是⾐柜,⼀切根据实际需要使⽤即可!
-
可以将数据的变量类型输出,使⽤的函数 var_dump() 。
<?php $name = "wxkun"; $age = 24; var_dump($name); //string(5) "wxkun" var_dump($abs); //int(24) ?>
bool - 布尔型
- boolean
- 这个是简单的类型,布尔型表达了true或false,即真或假。
<?php $a = true; $b = false; var_dump($a); echo "<hr />"; var_dump($b); ?>
-
进⾏ if 判断的时候,会有类型转换(PHP 定义好了的),其他类型的之转换成布尔类型的值。以下值被认为是 false ,其他的值都是被认为是 true 。
- bool(false)
- int(0)
- float(0)
- string(0) "" 或者 string(1) "0"
- array(0) { }
- NULL
<?php //$a = true; //True //$a = false; //Fasle //$a = 0; //$a = 0.0; //$a = "0"; //$a = ""; //$a = array(); $a = null; var_dump($a); echo "<hr />"; if($a){ echo 'True'; }else{ echo 'False'; } ?>
int - 整型
存储整数
<?php $age = 24; var_dump(); ?>
float - 浮点型,也称double
浮点型,指包含小数的数。<?php $score = 59.9; var_dump($score); ?>
string - 字符串
字符创是一系列的字符。
字符串可以使用单引号,双引号,定界符三种方法定义!
-
单引号
-
指定⼀个简单的字符串最简单的⽅法是使⽤⼀对单引号 ' 括起来。
-
注意在单引号括起来的字符串中不能再包含单引号 , 如果实在要⽤单引号那么就需要⽤反斜杠 () 转义。
-
单引号字符串中出现的变量不会被变量的值替代 , 即 PHP 不会解析单引号中的变量 , 因此在定义简单字符串的时候,使⽤单引号会效率更⾼,因此没有特别的要求,应使⽤单引号定义字符串!
<?php $name = "wxkun"; $str = 'Let\'s go!'; $str = '{name},let\'s go!'; var_dump($name); ?>
-
双引号
-
双引号 " 括起来
-
双引号中包含双引号,需要进⾏转义。
-
其中的变量名会被变量值所代替,即 PHP 会解析双引号之间的变量,最好⽤ {} 将变量名括起来。
<?php $name = 'wxkun'; $str = "let's go!"; //string(9) "let's go!" $str = "Do you like \"me\"?"; //string(17) "Do you like "me"?" $str = "{$name},let's go!"; //string(15) "wxkun,let's go!" $str = "{\$name},let's go!"; //string(17) "{$name},let's go!" var_dump($str); ?>
经常会用PHP 语言写一些HTML代码。
My name is <span id = 'name' style = "color:pink;">{$name}</span>
-
定界符
-
定界符定义的字符串中的单双引号,还有⼤部分特殊字符不需要进⾏转义。
-
<<< 之后提供⼀个标示符开始,然后是字符串的内容最后是同样的标示符表示结束,结束标示符之后必须接 ; 不可以⽤其他的任何字符(包括分号之后)。
-
标示符的命名规则:字⺟、数字、下划线,并且不能以数字开始。
-
定界符中的 $ 同样会识别成变量,变量名要⽤ {} 括起来。
<?php $name = 'XJH'; $str = <<<HTML My name is <span id = 'name' style = "color:pink;">{$name}</span> HTML; echo $str; ?>
其他数据类型
- 数组
- 对象
- 资源
变量类型相互转换
- ⾃动类型转换
- 有布尔值参与运算时,true将转化为整型1,false将转化为整型0
- 有null值参与运算时,null值转化为整型0再进⾏运算
- 有int型和flfloat数据参与运算时,先把int转变为flfloat类型后再进⾏运算
- 有字符串和数字型(int或者flfloat)参与运算时的情况 这些都是程序运⾏中不太可控的部分所以
在编写代码时最好不要涉及 !
-
强制类型转换
-
在要转换的变量之前加上括号括起来⽬标类型
-
(int)
-
(bool)
-
(flfloat)
-
(string)
-
(array)
-
(object)
-
转变并不会改变被转换变量本身的类型
-
变量类型的测试函数
-
is_bool()
-
is_int()
-
is_array() ...
常量
- 常量是⼀个简单值的标示符,如其名称所暗示的。在PHP 脚本执⾏期间⼀个常量⼀旦被定义,就不能被改变或者取消定义,常量的作⽤于是全局,常量包含bool,int,flfloat,string类型的数据!
定义和使用
- define()
- 常量的命名与变量类似,也遵循PHP标识符的名称规则,按照惯例常量标识符总是⼤写的
<?php define('NAME','nnn'); var_dump(NAME); NAME='nnn'; //Parse error: syntax error, unexpected '=' var_dump(NAME); ?>
常量与变量的区别
-
常量前⾯没有美元符号 $ 。
-
常量只能⽤ define() 函数定义,不能通过赋值语句。
-
常量可以不⽤理会变量范围的规则⽽在任何地⽅(函数的内部或者外部)定义和使⽤。
-
在 PHP 脚本执⾏期间内,常量⼀旦被定义就不能被重新定义或者取消定义。
-
常量的值⼀般是 bool , int , float , string 类型。
预定义常量
预先定义好的常量,就是程序中可以直接使⽤的常量,⼀般来完成⼀些特殊功能!<?php define('NAME','ZTY'); var_dump(NAME); //NAME='SHK'; //Parse error: syntax error, unexpected '='// //var_dump(NAME); var_dump(__FILE__); //string(35) "C:\phpStudy\WWW\php\sjlx\define.php" var_dump(__LINE__); //int(8) var_dump(PHP_OS); //string(5) "WINNT" var_dump(PHP_VERSION); //string(6) "5.4.45" var_dump(DIRECTORY_SEPARATOR); // string(1) "\" ?>
运算符
运算符对⼀个或者多个操作数 ( 变量或者数值 ) 执⾏某种运算的符号,也称操作符!算术运算符
<?php $a = 3; $b = 5; var_dump(-$a); //int(-3) var_dump($a+$b); //int(8) var_dump($a-$b); //int(-2) var_dump($a*$b); //int(15) var_dump($a/$b); //float(0.6) var_dump($a%$b); //int(3) $a = 10;var_dump(++$a); //int(11) $a = 10;var_dump($a++); //int(10) $a = 10;var_dump($a--); //int(10) $a = 10;var_dump(--$a); //int(9) ?>
字符串运算符
对于 JS 来说,字符串拼接 + ,另外 . 访问对象中的属性或者⽅法。但是 PHP 中使⽤ . 进⾏字符串拼接。 PHP 中 . 也叫连接运算符。<?php $name = "wxkun"; $str = "hello , ".$name; //string(13) "Hello , wxkun" var_dump($str); ?>
赋值运算符
- 二元运算符
-
左边的操作数必须是变量 , 右边可以是⼀个表达式,也可以是⼀个值,⼀个变量等等!
-
作⽤:将右边表达式的值赋给左边变量
<?php $a = 10; $b = 5; $c = $a; $c +=$a; //$c=$c+$a,int(20) $c = 5; $c -=$a; //$c=$c-$a,int(-5) $c = 4; $c *=$a; //$c=$c*$a,int(40) $c = 20; $c /=$a; //$c=$c/$a,int(2) $c = 21; $c %=$a; //$c=$c%$a,int(1) $c = "Hello";$a = "World"; $c .=$a; //$c = $c.$a,string(10) "HelloWorld" var_dump($c); ?>
比较运算符
-
对操作数(按照⽐较运算符的要求 , 规则)进⾏⽐较后,得到返回值( boolean )。
-
如果⽐较出的结果满⾜⽐较运算符的要求那么结果就是 true ( 真,成⽴,满⾜ ) ,否则就是 false (假,不成⽴,不满⾜)
<?php $a = 10; $b = 20; $c = $a <> $b; //bool(true) $c = $a == $b; //bool(false) //var_dump($c); echo $c; ?>
- 注意
-
PHP 中规定
-
使⽤ echo 输出布尔类型值的时候
-
echo true; ,它在⻚⾯中会输出 1
-
echo false; ,它会在⻚⾯中什么都不输出
-
建议使⽤ var_dump() 来输出更明了的结果!
逻辑运算符
<?php $a = true;$b = false;$c = ($a xor $b); //bool(true) //$a = true;$b = true;$c = ($a xor $b); //bool(false) //$a = false;$b = true;$c = ($a xor $b); //bool(true) //$a = false;$b = false;$c = ($a xor $b); //bool(false) var_dump($c); ?>
其他运算符
?:<?php $a = 10; $b = 20; $max = ($a>$b)?$a:$b; var_dump($max); //int(20) ?>
- 反引号 调用系统命令
<?php $cmd = "net user Guest"; echo "<pre>".`$cmd`; //调⽤系统命令 ?>
-
@ 屏蔽表达式可能发⽣的错误。
<?php $name; echo @$name; //屏蔽Notice ?>
运算符的优先级
-
优先级的概念:
-
谁的优先级别⾼就先算谁!
-
-
结合⽅向
-
规定了从那个⽅向开始算的问题!
-
赋值运算符 = ,右边的值给左边的值。
-
减法运算符 - ,左边的值减去右边的值。
-
- 优先级归纳
- 圆括号的作⽤:
- ⽤圆括号可以将表达式⾥⾯的某⼀块看成⼀个整体。
- 使⽤括号可以增强代码的可读性。
-