大纲
一、PHP语言基础
(一)PHP的四种风格
(二)注释
(三)数据类型
1.八种数据类型
2.数据类型转换
3.检测数据类型函数
4.类型比较
(四)常量
1.PHP常量
2.设置PHP常量
3.魔术常量
(五)变量
1.变量规则
2.变量赋值
3.局部和全局变量
4.global关键字
5.static作用域
6.参数作用域
7.预定义变量
(六)操作符
1.算术操作符
2.字符串操作符
3.赋值操作符
4.递增递减操作符
5.逻辑操作符
6.比较运算符
7.条件(三元)运算符
8.操作符优先级
(七)表达式
(八)PHP函数
1.定义和调用函数
2.向函数传递参数的方法
3.函数的返回值
4.变量作用域
(九)PHP编码规范
(十)输出
1.echo
2.print
3.print_r()
4.var_dump()
5.var_export()
一、PHP语言基础
PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器。可以放在文档中的任何位置。
PHP 文件的默认文件扩展名是 “.php”。PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
(一)php的四种风格介绍1.xml风格(标准、推荐)<?php echo “这是xml风格的标记”;?>
xml风格的标记是常用的标记,也是推荐使用的标记,服务器不能禁用,该风格的标记在xml,xhtml中都可以使用。
2.脚本风格<script languange=”php”> echo ‘这是脚本风格的标记’; </script> 3.剪短风格<?echo’这是剪短风格的标记;’?>
需要在php.ini内将short_open_tag设置为On,重启Apache
4.ASP风格<% echo ‘这是ASP风格的标记’ %>
需要在php.ini内将asp_tags设置为On,重启Apache
(二)注释<?php// 这是php单行注释:源于C ,常在PHP语句的上方或后方/* 这是多行注释:源于C语言,可以分为块注释(注释代码以备用)和文档注释(文档内容的相关解释)*/# 注释:Unix风格的单行注释?>
多行注释不允许嵌套
单行注释不允许出现 ?>,会使代码执行结束
(三)数据类型
String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值),resource(资源)
1.数据类型① 字符串
一个字符串是一串字符的序列,
可以将任何文本放在单引号或双引号中,
也可以是HTML标签。
双引号内,变量才可以输出其值;单引号内变量作为字符。
② 整型
是一个没有小数的数字。
整型规则:
整数必须至少有一个数字 (0-9)
整数不能包含逗号或空格
整数是没有小数点的
整数可以是正数或负数
整型可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)。
var_dump()??函数返回变量的数据类型和值
③ 浮点数
浮点数是带小数部分的数字,或是指数形式(整数/小数 E/e 正/负整数)
④ 布尔型
可以是true或false。
当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE 本身
整型值 0(零)
浮点型值 0.0(零)
空字符串,以及字符串 “0”
不包括任何元素的数组
特殊类型 NULL(包括尚未赋值的变量)
从空标记生成的 SimpleXML 对象
所有其它值都被认为是 TRUE(包括任何资源 和 NAN)。
⑤ 数组
数组可以在一个变量中存储多个值:$cars=array(“Volvo”,”BMW”,”Toyota”);
⑥ 对象
对象数据类型也可以用于存储数据。在 PHP 中,对象必须声明。
首先,必须使用class关键字声明类对象(类是可以包含属性和方法的结构)
class Car { var $color; function __construct($color=”green”) { $this->color = $color; //关键字this就是指向当前对象实例的指针,不指向任何其他对象或类} function what_color() { return $this->color;}}⑦ null值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据:$x=null;
⑧ 资源
是一种特殊的变量类型,保存了到外部资源的一个引用,如打开文件、数据库连接、图形画布区域等
2.数据类型转换
PHP不需要声明变量,但是有时仍需要用到数据类型转换
① 变量前加括号括起来的类型名称
直接输出转换后的变量类型,原变量不改变
转换操作符转换类型举例(int),(integer)整型(int)$boo(bool),(boolean)布尔型(string)字符串型(array)数组(float),(double),(real)浮点数(object)对象(unset)null
转换为布尔型时,只有null,0,和未赋值的变量和数组会被转换为false
转换成整型时,
不要将未知的小数强制进行转换,echo (int)((0.1 0.7) * 10),会导致结果不可预测,比如输出7而不是8。
布尔型的false为0,true为1
浮点型的小数点部分被舍弃
字符串以数字开头就会截取到非数字位,否则输出为0
② settype()函数
返回布尔值,改变原变量。
bool settype (mixed $var,string $type) /* *var为指定的变量 *type为指定的类型,有七个可选择值(除了资源) *转换成功返回true,否则返回false */3.检测数据类型函数
内置检测数据类型的系列函数,判断是否属于某个类型,符合返回true,否则返回false
is_bool
is_string
is_float/is_double
is_integer/is_int
is_null
is_array
is_object
is_numeric:检测变量是否为数字或数字组成的字符串
4.类型比较① 松散比较
使用两个等号“==”比较,只比较值,不比较类型:
if(42==”42″){echo’1、值相等’;}② 严格比较
使用三个等号“===”比较,除了比较值,也比较类型:
if(42===”42″){echo’3、类型不相等’;}(四)常量
常量值被定义后,在脚本的其他任何地方都不能被改变。
1.PHP常量
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意:
常量在定义后,默认是全局变量,在整个脚本中都可以使用。
2.设置PHP常量
设置常量,使用 define() 函数:
define(“GREETING”,”欢迎访问Runoob.com”);booldefine(string$name,mixed$value[,bool$case_insensitive=false])
该函数有三个参数:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
3.魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量。
不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。这些特殊的常量不区分大小写,如下:
__LINE__
文件中的当前行号:echo ‘这是第 ” ‘ . __LINE__ . ‘ ” 行’;
__FILE__
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名:
echo ‘该文件位于 ” ‘ . __FILE__ . ‘ ” ‘;
自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
__DIR__
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
<?php echo ‘该文件位于 ” ‘ . __DIR__ . ‘ ” ‘; ?>
__FUNCTION__
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
<?php function test() { echo ‘函数名为:’ . __FUNCTION__ ; } test(); ?>
__CLASS__
类的名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。
在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。
<?phpclass test { function _print() { echo ‘类名为:’ . __CLASS__ . “<br>”; echo ‘函数名为:’ . __FUNCTION__ ; }}$t = new test();$t->_print();?>__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
<?phpclass Base { public function sayHello() { echo ‘Hello ‘; }} trait SayWorld { public function sayHello() { parent::sayHello(); echo ‘World!’; }} class MyHelloWorld extends Base { use SayWorld;} $o = new MyHelloWorld();$o->sayHello();?>__METHOD__
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
<?phpfunction test() { echo ‘函数名为:’ . __METHOD__ ;}test();?>__NAMESPACE__
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
<?phpnamespace MyProject; echo ‘命名空间为:”‘, __NAMESPACE__, ‘”‘; // 输出 “MyProject”?>其他预定义常量常量名功能PHP_VERSIONPHP版本PHP_OS执行PHP解析器的操作系统名称TRUE真值FALSE假值NULLnull值E_ERRPR指到最近的错误处E_WARNING指到最近的警告处E_PARSE指到解析语法有潜在问题处E_NOTICE为发生不寻常处的提示,但不一定是错误
以E开头的预订常量是PHP的错误调试部分,参考error_reporting
(五)变量1.变量规则
变量以 $ 符号开始,后面跟着变量的名称
变量名必须以字母或者下划线字符开始
变量名只能包含字母数字字符以及下划线(A-z、0-9 和 _ )
变量名不能包含空格
变量名是区分大小写的($y 和 $Y 是两个不同的变量)
PHP 没有声明变量的命令。php是弱类型语言,在第一次赋值时被创建,不需要先定义类型,会根据变量的值,自动进行转换。
2.变量赋值① 直接赋值$i=”mis”;② 变量间的赋值
指赋值后,两个变量使用各自的内容,互不干扰
$i = “mis”;$w = $i;③ 引用赋值
使用不同的名字访问同一个变量内容,改变其中一个,另一个也会改变。
使用“&”来表示引用。
$i = “mis”;$w = &$i;3.局部和全局变量
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。
4.global关键字
用于函数内访问全局变量。在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
<?php $x=5;$y=10; function myTest() { global $x,$y; $y=$x $y; } myTest(); echo $y; // 输出 15?>
PHP 将所有全局变量存储在一个名为$GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。
$GLOBALS[‘y’]=$GLOBALS[‘x’] $GLOBALS[‘y’];5.static作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
要做到这一点,在第一次声明变量时使用 static 关键字:
static$x=0;
然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。但是,该变量以前是局部变量仍然是函数的局部变量。
6.参数(parameter)作用域
参数是通过调用代码将值传递给函数的局部变量。参数是在参数列表中声明的,作为函数声明的一部分:
functionmyTest($x){echo$x;}7.预定义变量:超级全局变量
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。
①. $GLOBALS
$GLOBALS 是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
<?php $x = 75; $y = 25;function addition() { $GLOBALS[‘z’] = $GLOBALS[‘x’] $GLOBALS[‘y’]; }addition(); echo $z; ?>②. $_SERVER
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。
这个数组中的项目由 Web 服务器创建。
不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
所有 $_SERVER 变量中的重要元素:
PHP $_REQUEST 用于收集HTML表单提交的数据。
以下实例显示了一个输入字段(input)及提交按钮(submit)的表单(form)。
在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_REQUEST 来收集表单中的 input 字段数据:
<html><body> <form method=”post” action=”<?php echo $_SERVER[‘PHP_SELF’];?>”>Name: <input type=”text” name=”fname”><input type=”submit”></form> <?php $name = $_REQUEST[‘fname’]; echo $name; ?> </body></html>④. $_POST
PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”post”。
在这个实例中,我们指定文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指定的脚本文件名。 然后,我们可以使用超级全局变量 $_POST 来收集表单中的 input 字段数据:
<html><body> <form method=”post” action=”<?php echo $_SERVER[‘PHP_SELF’];?>”>Name: <input type=”text” name=”fname”><input type=”submit”></form> <?php $name = $_POST[‘fname’]; echo $name; ?> </body></html>⑤. $_GET
PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:”method=”get”。
$_GET 也可以收集URL中发送的数据。
假定我们有一个包含参数的超链接HTML页面:
<html><body><a href=”test_get.php?subject=PHP&web=runoob.com”>Test $GET</a></body></html>
以下实例显示了 “test_get.php” 文件的代码:
<html><body> <?php echo “Study ” . $_GET[‘subject’] . ” @ ” . $_GET[‘web’];?> </body></html>⑥. $_FILES⑦. $_ENV⑧. $_COOKIE
通过HTTPcookie传递到脚本的信息。多由setcookie()函数设置的。
⑨. $_SESSION
包含与所有会话变量有关的信息。主要应用于会话控制和页面之间值的传递
(六)操作符1.算术操作符运算符名称描述实例结果x y加x 和 y 的和2 24x – y减x 和 y 的差5 – 23x * y乘x 和 y 的积5 * 210x / y除x 和 y 的商15 / 53x % y模(除法的余数,x为负数,结果也为负)x 除以 y 的余数5 % 21- x取反x 取反<?php $x =2; echo -$x; ?>-22.字符串操作符运算符名称描述实例结果a . b并置连接两个字符串”Hi” . “Ha”HiHa3.赋值操作符运算符等同于描述x = yx = y左操作数被设置为右侧表达式的值x = yx = x y加x -= yx = x – y减x *= yx = x * y乘x /= yx = x / y除x %= yx = x % y模(除法的余数)a .= ba = a . b连接两个字符串4.递增递减操作符运算符名称描述 x预递增x 加 1,然后返回 xx 后递增返回 x,然后 x 加 1– x预递减x 减 1,然后返回 xx –后递减返回 x,然后 x 减 15.逻辑操作符运算符名称描述实例x and(或&&) y与如果 x 和 y 都为 true,则返回 truex=6 y=3 (x < 10 and y > 1) 返回 truex or(或||) y或如果 x 和 y 至少有一个为 true,则返回 truex=6 y=3 (x==6 or y==5) 返回 truex xor y异或如果 x 和 y 有且仅有一个为 true,则返回 truex=6 y=3 (x==6 xor y==3) 返回 false! x非如果 x 不为 true,则返回 truex=6 y=3 !(x==y) 返回 true6.比较运算符
结果为真返回true
运算符名称描述实例x == y等于如果 x 等于 y,则返回 true5==8 返回 falsex === y绝对等于如果 x 等于 y,且它们类型相同,则返回 true5===”5″ 返回 falsex != y不等于如果 x 不等于 y,则返回 true5!=8 返回 truex <> y不等于如果 x 不等于 y,则返回 true5<>8 返回 truex !== y绝对不等于如果 x 不等于 y,或它们类型不相同,则返回 true5!==”5” 返回 truex > y大于如果 x 大于 y,则返回 true5>8 返回 falsex < y小于如果 x 小于 y,则返回 true5<8 返回 truex >= y大于等于如果 x 大于或者等于 y,则返回 true5>=8 返回 falsex <= y小于等于如果 x 小于或者等于 y,则返回 true5<=8 返回 true
false与0,关系相等,但不恒等。
7.条件(三元)操作符
语法格式:
(expr1)?(expr2):(expr3)
对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
8.操作符的优先级
下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。
说明:左 = 从左到右,右 = 从右到左。
结合方向运算符附加信息无clone newclone 和 new左[array()右 — ~ (int) (float) (string) (array) (object) (bool) @类型和递增/递减无instanceof类型右!逻辑运算符左* / %算术运算符左 – .算术运算符和字符串运算符左<< >>位运算符无== != === !== <>比较运算符左&位运算符和引用左^位运算符左|位运算符左&&逻辑运算符左||逻辑运算符左? :三元运算符右= = -= *= /= .= %= &= |= ^= <<= >>= =>赋值运算符左and逻辑运算符左xor逻辑运算符左or逻辑运算符左,多处用到
运算符优先级中,or 和 ||,&& 和 and 都是逻辑运算符,效果一样,但是其优先级却不一样。
我们通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。
(七)表达式
用“;”来区分表达式,也可以在括号内。
一个PHP语句 = 一个表达式 “;”
(八)PHP函数
一种是内置函数,根据函数名调用即可,手册可查
二是自定义函数:
1.定义和调用函数
创建函数的基本语法:
函数的名称应该提示出它的功能
函数名称以字母或下划线开头(不能以数字开头)
<?phpfunction functionName($name1,$name2……){ /* *function:为声明自定义函数必须用到的关键字 *functionName:为自定义函数的名称 *$name1:函数的参数,类似于变量 */ functionBody:// 要执行的代码}?>
引用函数名并赋予正确的参数即可完成函数的调用
2.向调用函数传递参数的方法① 按值传递方式
将调用者括号内的值依次传递给函数括号内的值
//定义函数function test($a,$b,$c)//调用函数test(1,2,3);② 按引用传递方式
在函数内部的所有操作都会影响到调用者参数的值
传输时,只需要在原基础上加上“&”即可
//定义函数function test(&$a,$b,$c)//调用函数test($q,$e,$w);③ 默认参数(可选参数)
可以指定某个参数为可选参数,
放在参数列表末尾并指定默认值
<?php function values($sprice,$tax=0){ $sprice = $sprice ($sprice * $tax); echo “价格:$sprice</br>”; } values(100,2.5);//给$tax赋值 values(100,);//$tax保持默认值即可 ?>3.函数的返回值
使用关键字return将函数的值返回给函数的调用者:return $name;
return语句只能返回一个参数,要返回多个结果,就要定义一个数组,将返回值存储在数组中。
4.变量作用域
在函数内部定义的变量,作用域在函数内部,
如果在函数外部被赋值,被认为是完全不同的两个变量。
退出声明变量的函数时,该变量的相应值会被清除
① 局部变量
函数内部定义的变量,作用域在函数内部
② 全局变量
定义在所有函数之外,作用域是整个PHP文件。
函数内部不可用,除非是使用关键字global声明的全局变量
③ 静态变量
一般的变量在函数调用结束后,其存储的数据会被清除,所占的内存会被释放
但是静态变量能在函数调用结束后仍保留变量值,当再次回到其作用域时,又可以继续原来的值。
使用关键字static声明变量,在定义的变量之前
(九)PHP编码规范:PSR
由PHP FIG组织制定的PHP规范,是其开发的实践标准。
PSR-1 基础编码规范
必须以 <?php或<?= 标签开始
必须不带BOM的UTF-8编码
应该之定义类、函数、常量等,或其他会产生副作用的操作(生成文件输出以及修改.ini配置文件),二者只能选其一
命名空间以及类必须符合PSR的自动加载规范:PSR-4的一个。
//php 5.3之后必须使用正式的命名空间namespace Vendor\model;class Foo{}//PHP5.2及之前应使用伪命名空间的写法,约定俗成使用顶级的组织名称class Vendor_Model_Foo{}
每个类都独立为一个文件,且命名空间至少有一个层次:顶级的组织名称(vendor name)
类的命名必须遵守StudlyCaps大写开头的驼峰命名规范
类中的常量所有字母必须大写,单词间用下划线分隔
方法名称必须符合camelCase式的小写开头驼峰命名规范
PSR-2 编码风格规范
遵守PSR-1
4个空格字符缩进
每行字数小于80最好,软性要求
每个namespace命名空间声明语句和use声明语句块后面,必须插入一个空白行
方法、类和控制结构的开始大括号 { 和结束大括号 },自成一行
控制结构的开始大括号 { 和结束大括号 }前,不可有空格符
类的属性和方法必须添加访问修饰符(private、protected以及public)
abstract以及final必须在访问修饰符之前,
static声明在访问修饰符之后
控制结构的关键字后必须有空格符
调用方法和函数不一定有
(十)输出
在 PHP 中有两个基本的输出方式: echo 和 print。
1.echo与print的区别
echo – 可以输出一个或多个字符串
print – 只允许输出一个字符串,返回值总为 1
echo 输出的速度比 print 快, echo 没有返回值,print有返回值1
2.echo语句
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()
显示字符串(字符串可以包含 HTML 标签):
echo”Helloworld!<br>”;
显示变量:单引号不解析变量,双引号解析变量
<?php $txt1=”学习 PHP”; $txt2=”RUNOOB.COM”; $cars=array(“Volvo”,”BMW”,”Toyota”); echo $txt1; echo “<br>”; echo “在 $txt2 学习 PHP “; echo “<br>”;echo “我车的品牌是 {$cars[0]}”; ?>
echo(): 可以一次输出多个值,多个值之间用逗号分隔。
echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。
3.print语句(类比echo)
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()
print(): 函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false。
4.print_r()mixedprint_r(mixed$expression[,bool$return=FALSE])//以人类易读的格式显示一个变量的信息。
参数
expression
要打印的表达式。
return
想要获取 print_r() 输出的内容,使用 return 参数。 当此参数为 TRUE,print_r() 会直接返回信息,而不是输出。
返回值
如果输入的内容是 string、 integer 或 float,会直接输出值本身。 如果输入的内容是 array,展示的格式会显示数组的键和包含的元素。object 也类似。
当 return 参数设置成 TRUE,本函数会返回 string 格式。否则返回 TRUE。
5.var_dump()voidvar_dump(mixed$expression[,mixed$…])//此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。6.var_export()mixedvar_export(mixed$expression[,bool$return])//输出或返回一个变量的字符串表示
此函数返回关于传递给该函数的变量的结构信息,它和var_dump 类似,不同的是其返回的表示是合法的PHP 代码。
可以通过将函数的第二个参数设置为TRUE,从而返回变量的表示。
End