目录
01基础
1.0注释
<?php // 这是 PHP 单行注释 /* 这是 PHP 多行 注释 */ ?>
1.1变量
//1.命名规则 // ·变量名以$开头,eg:$name,$NAME; // ·$后面的第一个字符不可以是数字,只能是下划线_或者字母; // ·除了下划线_外,变量不允许出现任何空格或标点符号。也就是说变量名只能包含:a-z、A-Z、0-9 以及下划线_; // ·变量名区分大小写,$name 和 $NAME 不同 //2.可变变量 // 一个变量的变量名可以动态的设置和使用,eg: <?php $a = 'hello'; $$a = 'world'; //$hello = world echo "$a ${$a}"; //输出 hello world echo "$a $hello"; //输出 hello world ?> //3.变量的引用赋值 // ·普通赋值:变量2 = 变量1; // ·引用赋值:变量2 = &变量1; PHP 变量作用域 变量的作用域是脚本中变量可被引用/使用的部分。 PHP 有四种不同的变量作用域: local global 用于函数内访问全局变量 PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以 直接用来更新全局变量。 $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y']; static 静态 parameter
1.2数据类型
//三大类八种数据类型 //1.标量(4种) ·整型 int ·浮点型 float ·字符串 string 在 PHP 中,只有一个字符串运算符。并置运算符 (.) 用于把两个字符串值连接起来。 strlen() 函数返回字符串的长度(字节数)。 strpos() 函数用于在字符串内查找一个字符或一段指定的文本。如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。 eg: <?php echo strpos("Hello world!","world"); ?> 输出:6 ·布尔值 boolean //2.复合数据类型(2种) // ·数组 array // ·对象 object //3.特殊数据类型(2种) // ·资源 resource // ·null //整型 //二进制 0b 开头 //八进制 0 开头 //十六进制 0X或0x 开头 x不区分大小写 PHP var_dump() 函数返回变量的数据类型和值 eg: <?php $x = 5985; var_dump($x); echo "<br>"; $x = -345; // 负数 var_dump($x); echo "<br>"; $x = 0x8C; // 十六进制数 var_dump($x); echo "<br>"; $x = 047; // 八进制数 var_dump($x); ?> 输出: int(5985) int(-345) int(140) int(39) 资源类型 resource 是一种特殊变量,保存了到外部资源的一个引用。 常见资源数据类型有打开文件、数据库连接、图形画布区域等。 使用 get_resource_type() 函数可以返回资源(resource)类型: <?php $c = mysql_connect(); echo get_resource_type($c)."\n"; // 打印:mysql link $fp = fopen("foo","w"); echo get_resource_type($fp)."\n"; // 打印:file $doc = new_xmldoc("1.0"); echo get_resource_type($doc->doc)."\n"; // 打印:domxml document ?>
1.3 输出echo/print
echo 和 print 区别:
-
echo - 可以输出一个或多个字符串
-
print - 只允许输出一个字符串,返回值总为 1
提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。
1.4常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
-
name:必选参数,常量名称,即标志符。
-
value:必选参数,常量的值。
-
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的。
注意:自 PHP 7.3.0 开始,定义不区分大小写的常量已被弃用。从 PHP 8.0.0 开始,只有 false 是可接受的值,传递 true 将产生一个警告。
eg:
<?php // 区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com"); echo GREETING; // 输出 "欢迎访问 Runoob.com" echo '<br>'; echo greeting; // 输出 "greeting",但是有警告信息,表示该常量未定义 ?> <?php // 不区分大小写的常量名 define("GREETING", "欢迎访问 Runoob.com", true); echo greeting; // 输出 "欢迎访问 Runoob.com" ?>
常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
1.5运算符
1.5.1算数运算符
加(x+y)、减(x-y)、乘(x*y)、除(x/y)、模 取余(x%y)、设置负数(-x)、取反(-x)、并置(a.b)
整除运算符 intdiv(),该函数返回值为第一个参数除于第二个参数的值并取整(向下取整)
<?php var_dump(intdiv(10, 3)); ?> 输出int(3)
1.5.2赋值运算符
在 PHP 中,基本的赋值运算符是 =。它意味着左操作数被设置为右侧表达式的值。也就是说,$x = 5 的值是 5
运算符 | 等同于 | 描述 |
---|---|---|
x = y | x = y | 左操作数被设置为右侧表达式的值 |
x += y | x = x + y | 加 |
x -= y | x = x - y | 减 |
x *= y | x = x * y | 乘 |
x /= y | x = x / y | 除 |
x %= y | x = x % y | 模(除法的余数) |
a .= b | a = a . b | 连接两个字符串 |
1.5.3递增/递减运算符
运算符 | 名称 | 描述 |
---|---|---|
++ x | 预递增 | x 加 1,然后返回 x |
x ++ | 后递增 | 返回 x,然后 x 加 1 |
-- x | 预递减 | x 减 1,然后返回 x |
x -- | 后递减 | 返回 x,然后 x 减 1 |
1.5.4PHP 比较运算符
比较操作符可以让您比较两个值:
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
x === y | 绝对等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5==="5" 返回 false |
x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
x !== y | 不绝对等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!=="5" 返回 true |
x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
1.5.5PHP 逻辑运算符
运算符 | 名称 | 描述 | 实例 |
---|---|---|---|
x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6y=3(x < 10 and y > 1) 返回 true |
x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6y=3(x==6 or y==5) 返回 true |
x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6y=3(x==6 xor y==3) 返回 false |
x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6y=3(x < 10 && y > 1) 返回 true |
x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6y=3(x==5 || y==5) 返回 false |
! x | 非 | 如果 x 不为 true,则返回 true | x=6y=3!(x==y) 返回 true |
1.5.6PHP 数组运算符
运算符 | 名称 | 描述 |
---|---|---|
x + y | 集合 | x 和 y 的集合 |
x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
x != y | 不相等 | 如果 x 不等于 y,则返回 true |
x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
1.5.7三元运算符(条件运算符)
?: 同C (a>b)?a:b
自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
PHP_EOL是一个换行符
1.6 if…else
同C
语法:
if (条件) { 条件成立时要执行的代码; } if (条件) { 条件成立时执行的代码; } else { 条件不成立时执行的代码; } if (条件) { if 条件成立时执行的代码; } elseif (条件) { elseif 条件成立时执行的代码; } else { 条件不成立时执行的代码; }
1.7 switch
同C
<?php switch (n) { case label1: 如果 n=label1,此处代码将执行; break; case label2: 如果 n=label2,此处代码将执行; break; default: 如果 n 既不等于 label1 也不等于 label2,此处代码将执行; } ?>
1.8数组
在 PHP 中,array() 函数用于创建数组
array();
在 PHP 中,有三种类型的数组:
-
数值数组 - 带有数字 ID 键的数组
-
关联数组 - 带有指定的键的数组,每个键关联一个值
-
多维数组 - 包含一个或多个数组的数组
1.8.1数值数组
这里有两种创建数值数组的方法: 自动分配 ID 键(ID 键总是从 0 开始): $cars=array("Volvo","BMW","Toyota"); 人工分配 ID 键: $cars[0]="Volvo"; $cars[1]="BMW"; $cars[2]="Toyota"; count() 函数用于返回数组的长度(元素的数量): <?php $cars=array("Volvo","BMW","Toyota"); echo count($cars); ?> 遍历并打印数值数组中的所有值 <?php $cars=array("Volvo","BMW","Toyota"); $arrlength=count($cars); for($x=0;$x<$arrlength;$x++) { echo $cars[$x]; echo "<br>"; } ?>
1.8.2关联数组
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); $age['Peter']="35"; $age['Ben']="37"; $age['Joe']="43"; <?php $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); echo "Peter is " . $age['Peter'] . " years old."; ?>
1.8.3多维数组
1.9数组排序
PHP 数组排序函数: sort() - 对数组进行升序排列 rsort() - 对数组进行降序排列 asort() - 根据关联数组的值,对数组进行升序排列 ksort() - 根据关联数组的键,对数组进行升序排列 arsort() - 根据关联数组的值,对数组进行降序排列 krsort() - 根据关联数组的键,对数组进行降序排列 eg: <?php $cars=array("Volvo","BMW","Toyota"); sort($cars); ?>
1.10超级全局变量
超级全局变量在PHP 4.1.0之后被启用, 是PHP系统中自带的变量,在一个脚本的全部作用域中都可用。
$GLOBALS 超级全局变量组 包含了全部变量的全局组合数组。变量的名字就是数组的键。 <?php $x = 75; $y = 25; eg: function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?> $_SERVER 一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组,这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。 以下实例中展示了如何使用$_SERVER中的元素: 实例 <?php echo $_SERVER['PHP_SELF']; echo "<br>"; echo $_SERVER['SERVER_NAME']; echo "<br>"; echo $_SERVER['HTTP_HOST']; echo "<br>"; echo $_SERVER['HTTP_REFERER']; echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<br>"; echo $_SERVER['SCRIPT_NAME']; ?> $_REQUEST 用于收集HTML表单提交的数据 $_POST $_GET $_FILES $_ENV $_COOKIE $_SESSION
下表列出了所有 $_SERVER 变量中的重要元素:
元素/代码 | 描述 |
---|---|
$_SERVER['PHP_SELF'] | 当前执行脚本的文件名,与 document root 有关。例如,在地址为 http://example.com/test.php/foo.bar 的脚本中使用 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。FILE 常量包含当前(例如包含)文件的完整路径和文件名。 从 PHP 4.3.0 版本开始,如果 PHP 以命令行模式运行,这个变量将包含脚本名。之前的版本该变量不可用。 |
$_SERVER['GATEWAY_INTERFACE'] | 服务器使用的 CGI 规范的版本;例如,"CGI/1.1"。 |
$_SERVER['SERVER_ADDR'] | 当前运行脚本所在的服务器的 IP 地址。 |
$_SERVER['SERVER_NAME'] | 当前运行脚本所在的服务器的主机名。如果脚本运行于虚拟主机中,该名称是由那个虚拟主机所设置的值决定。(如: www.runoob.com) |
$_SERVER['SERVER_SOFTWARE'] | 服务器标识字符串,在响应请求时的头信息中给出。 (如:Apache/2.2.24) |
$_SERVER['SERVER_PROTOCOL'] | 请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。 |
$_SERVER['REQUEST_METHOD'] | 访问页面使用的请求方法;例如,"GET", "HEAD","POST","PUT"。 |
$_SERVER['REQUEST_TIME'] | 请求开始时的时间戳。从 PHP 5.1.0 起可用。 (如:1377687496) |
$_SERVER['QUERY_STRING'] | query string(查询字符串),如果有的话,通过它进行页面访问。 |
$_SERVER['HTTP_ACCEPT'] | 当前请求头中 Accept: 项的内容,如果存在的话。 |
$_SERVER['HTTP_ACCEPT_CHARSET'] | 当前请求头中 Accept-Charset: 项的内容,如果存在的话。例如:"iso-8859-1,*,utf-8"。 |
$_SERVER['HTTP_HOST'] | 当前请求头中 Host: 项的内容,如果存在的话。 |
$_SERVER['HTTP_REFERER'] | 引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改 HTTP_REFERER 的功能。简言之,该值并不可信。) |
$_SERVER['HTTPS'] | 如果脚本是通过 HTTPS 协议被访问,则被设为一个非空的值。 |
$_SERVER['REMOTE_ADDR'] | 浏览当前页面的用户的 IP 地址。 |
$_SERVER['REMOTE_HOST'] | 浏览当前页面的用户的主机名。DNS 反向解析不依赖于用户的 REMOTE_ADDR。 |
$_SERVER['REMOTE_PORT'] | 用户机器上连接到 Web 服务器所使用的端口号。 |
$_SERVER['SCRIPT_FILENAME'] | 当前执行脚本的绝对路径。 |
$_SERVER['SERVER_ADMIN'] | 该值指明了 Apache 服务器配置文件中的 SERVER_ADMIN 参数。如果脚本运行在一个虚拟主机上,则该值是那个虚拟主机的值。(如:someone@runoob.com) |
$_SERVER['SERVER_PORT'] | Web 服务器使用的端口。默认值为 "80"。如果使用 SSL 安全连接,则这个值为用户设置的 HTTP 端口。 |
$_SERVER['SERVER_SIGNATURE'] | 包含了服务器版本和虚拟主机名的字符串。 |
$_SERVER['PATH_TRANSLATED'] | 当前脚本所在文件系统(非文档根目录)的基本路径。这是在服务器进行虚拟到真实路径的映像后的结果。 |
$_SERVER['SCRIPT_NAME'] | 包含当前脚本的路径。这在页面需要指向自己时非常有用。FILE 常量包含当前脚本(例如包含文件)的完整路径和文件名。 |
$_SERVER['SCRIPT_URI'] | URI 用来指定要访问的页面。例如 "/index.html"。 |
1.11循环
-
while - 只要指定的条件成立,则循环执行代码块
-
do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
-
for - 循环执行代码块指定的次数
-
foreach - 根据数组中每个元素来循环代码块
1.11.1while
同C
while (条件) { 要执行的代码; }
1.11.2do...while
同C
do { 要执行的代码; } while (条件);
1.11.3for
同C
for (初始值; 条件; 增量) { 要执行的代码; }
1.11.4foreach
foreach ($array as $value) { 要执行代码; } 每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。 foreach ($array as $key => $value) { 要执行代码; } 每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。 下面的实例演示了一个输出给定数组的值的循环: 实例 <?php $x=array("Google","Runoob","Taobao"); foreach ($x as $value) { echo $value . PHP_EOL; } ?> 下面的实例演示了一个输出给定数组键与值的循环: <?php $x=array(1=>"Google", 2=>"Runoob", 3=>"Taobao"); foreach ($x as $key => $value) { echo "key 为 " . $key . ",对应的 value 为 ". $value . PHP_EOL; } ?>
1.12函数
<?php function functionName() { // 要执行的代码 } ?>
PHP 函数准则:
-
函数的名称应该提示出它的功能
-
函数名称以字母或下划线开头(不能以数字开头)
下面的函数有两个参数: 实例 <?php function writeName($fname,$punctuation) { echo $fname . " Refsnes" . $punctuation . "<br>"; } echo "My name is "; writeName("Kai Jim","."); echo "My sister's name is "; writeName("Hege","!"); echo "My brother's name is "; writeName("Ståle","?"); ?> 如需让函数返回一个值,请使用 return 语句。 实例 <?php function add($x,$y) { $total=$x+$y; return $total; } echo "1 + 16 = " . add(1,16); ?>
1.13魔术常量
PHP 向它运行的任何脚本提供了大量的预定义常量。
不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了。
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
例如 LINE 的值就依赖于它在脚本中所处的行来决定。这些特殊的常量不区分大小写,如下:
1.13.1LINE
文件中的当前行号。
实例
<?php echo '这是第 " ' . __LINE__ . ' " 行'; ?>
以上实例输出结果为:
这是第 “ 2 ” 行
1.13.2FILE
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
自 PHP 4.0.2 起,FILE 总是包含一个绝对路径(如果是符号连接,则是解析后的绝对路径),而在此之前的版本有时会包含一个相对路径。
实例:
<?php echo '该文件位于 " ' . __FILE__ . ' " '; ?>
以上实例输出结果为:
该文件位于 “ E:\wamp\www\test\index.php ”
1.13.3DIR
文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
它等价于 dirname(FILE)。除非是根目录,否则目录中名不包括末尾的斜杠。(PHP 5.3.0中新增)
实例
<?php echo '该文件位于 " ' . __DIR__ . ' " '; ?>
以上实例输出结果为:
该文件位于 “ E:\wamp\www\test ”
1.13.4FUNCTION
函数名称(PHP 4.3.0 新加)。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值总是小写字母的。
实例
<?php function test() { echo '函数名为:' . __FUNCTION__ ; } test(); ?>
以上实例输出结果为:
函数名为:test
1.13.5CLASS
类的名称
在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。
<?php class test { function _print() { echo '类名为:' . __CLASS__ . "<br>"; echo '函数名为:' . __FUNCTION__ ; } } $t = new test(); $t->_print(); ?>
1.13.6TRAIT
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
<?php class 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(); ?>
1.13.7METHOD
类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。
实例:
<?php function test() { echo '函数名为:' . __METHOD__ ; } test(); ?>
以上实例输出结果为:
函数名为:test
1.13.8NAMESPACE
当前命名空间的名称(区分大小写)。此常量是在编译时定义的(PHP 5.3.0 新增)。
实例:
<?php namespace MyProject; echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject" ?>
以上实例输出结果为:
命名空间为:"MyProject"