多维数组
- 多维数组指的是包含一个或多个数组的数组。
- PHP 能理解两、三、四或五级甚至更多级的多维数组。不过,超过三级深的数组对于大多数人难于管理。
- 注释:数组的维度指示您需要选择元素的索引数。
- 对于二维数组,您需要两个索引来选取元素
- 对于三维数组,您需要三个索引来选取元素
示例代码
";
echo $cars[1][0].": 库存:".$cars[1][1].", 已售:".$cars[1][2].".
";
echo $cars[2][0].": 库存:".$cars[2][1].", 已售:".$cars[2][2].".
";
echo $cars[3][0].": 库存:".$cars[3][1].", 已售:".$cars[3][2].".
";
?>
运行结果:
Volvo: 库存:33, 已售:20.
BMW: 库存:17, 已售:15.
Saab: 库存:5, 已售:2.
Land Rover: 库存:15, 已售:11.
FOR循环的代码
行数 $row";
echo "";
for ($col = 0; $col < 3; $col++) {
echo "- ".$cars[$row][$col]."
";
}
echo "
";
}
?>
我们也可以在 For 循环中使用另一个 For 循环,来获得 $cars 数组中的元素(我们仍需使用两个索引):
行数 0
Volvo
33
20
行数 1
BMW
17
15
行数 2
Saab
5
2
行数 3
Land Rover
15
11
Directory函数
- chdir() 改变当前的目录。
- chroot() 改变根目录。
- closedir() 关闭目录句柄。
- dir() 返回 Directory 类的实例。
- getcwd() 返回当前工作目录。
- opendir() 打开目录句柄。
- readdir() 返回目录句柄中的条目。
- rewinddir() 重置目录句柄。
- scandir() 返回指定目录中的文件和目录的数组。、
Filesystem函数
Filesystem函数允许您访问和操作文件系统。
- unix和Windows兼容性问题
- 当在 Unix 平台上规定路径时,正斜杠 (/) 用作目录分隔符。而在 Windows 平台上,正斜杠 (/) 和反斜杠 (\ ) 均可使用。
使用中查手册的key函数
- php filter:PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。
- php ftp:通过文件传输协议(FTP)提供对文件服务器的客户端访问。
- php http:允许您在其他输出被发送之前,对由web服务器发送到浏览器的信息进行操作。
- php libxml:Libxml 函数和常量与 SimpleXML、XSLT 以及 DOM 函数一起使用。
- php mail:mail() 函数允许您从脚本中直接发送电子邮件。
- php math:Math 函数能处理 integer 和 float 范围内的值。
- php 杂项函数:我们把不属于其他类别的函数归纳到杂项函数类别。
- php pdo:php数据对象(pdo)扩展为php访问数据库定义了一个轻量级的一致接口。
- php simplexml:提供了一种获取xml元素名称和文本的简单方式。
- php string:PHP String 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。
- php xml parse:XML 函数允许您解析 XML 文档,但无法对其进行验证。
- php zip file:Zip File 函数允许您读取压缩文件。
- php time zones:支持的时区。
- php 图像处理:PHP 提供了丰富的图像处理函数。
- php restful(Representational State Transfer):一种架构约束条件和原则。
PHP Restful
REST(英文:Representational State Transfer,简称REST) ,指的是一组架构约束条件和原则。
- 符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:
- 直观简短的资源地址:URI,比如:http://example.com/resources/。
- 传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAM等。
- 对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。
基本语法回顾
- static:让局部变量不被删除。(在php中,当一个函数执行完,函数中的变量通常都会被删除)
- 注意:将static定义在函数内部
- 参数作用域:参数是通过调用代码将值传递给函数的局部变量,作为函数声明的一部分。
- echo语句
- echo和Print输出字符串都可以包含html标签
- echo和Print的区别是
- echo可以输出一个或者多个字符串,没有返回值
- print只允许输出一个字符串,返回值是1
- PHP对象
- 对象数据类型也可以用于存储数据。
- 在php中,对象必须声明:
- 必须用class关键字声明类对象。类是可以包含属性和方法的结构。
- 在类中定义数据类型,在实例化的类中使用数据类型。
color = $color;
}
function what_color() {
return $this->color;
}
}
?>
- PHP关键字this就是指向当前对象实例的指针,不指向任何其他对象或类。
- NULL值
- NULL值表示变量没有值,NULL是数据类型为NULL的值。
- 常用场景1:设置变量值为 NULL 来清空变量数据:
- 常用场景2:NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
- php常量
- 常量名不需要加$修饰符,用define(x,x,x)关键字定义常量。
- 注意:常量在整个脚本中都可以被使用
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
- name:必选参数,常量名称,即标志符。
- value:必选参数,常量的值。
- case_insensitive :可选参数,如果设置为TRUE,不区分大小写。默认是大小写敏感的。
- 运算符
- php7+新增的整除运算符:intdiv():
输出结果是int(3)
- a.=b的意思是:a = a.b;
$x="Hello";
$x .= " world!";
echo $x; // outputs Hello world!
- php递增递减运算符:++x x++,--x,x--:
- ++x:x先加1,再返回x
- x++:先返回x,再加1
- --x,x--同理
- php比较运算符
- x === y 恒等于 如果 x 等于 y,且它们类型相同,则返回 true 5==="5" 返回 false
- x <> y(或者x != y) 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
- x !== y 不恒等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!=="5" 返回 true
- php逻辑运算符
- x or y 或 如果 x 和 y 至少有一个为 true,则返回 true
x=6
y=3
(x==6 or y==5) 返回 true
- x xor y 异或 如果 x 和 y 有且仅有一个为 true,则返回 true
x=6
y=3
(x==6 xor y==3) 返回 false
- php数组运算符
- x == y 相等: 如果 x 和 y 具有相同的键/值对,则返回 true
- x === y 恒等: 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
- x !== y 不恒等 如果 x 不等于 y,则返回 true
- 三元运算符
(expr1) ? (expr2) : (expr3)
- expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
- 自 PHP 5.3 起,可以省略三元运算符中间那部分。表达式 expr1 ?: expr3 在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
示例代码:
- 注意:PHP_EOL 是一个换行符,兼容更大平台。比如Windows下的/n/r
- NULL合并运算符 (php7新增)
- 组合比较符(php7+新增)
- 语法是这样的:$c = $a <=> $b;
echo 2 <=> 1; // 1
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
如果$a > $b, $c 的值为1
如果$a == $b, $c 的值为0
如果$a < $b, $c 的值为-1
数组 array()
- 在 PHP 中,有三种类型的数组:
- 数值数组 - 带有数字 ID 键的数组
- 关联数组 - 带有指定的键的数组,每个键关联一个值
- 多维数组 - 包含一个或多个数组的数组
";
}
打印结果:
who
are
you
//php的关联数组
$connectArray = array('first'=>'maiyatian',
'second'=>'huawei',
'third'=>666);
echo $connectArray['first'].'-'.$connectArray['second'].'@'.$connectArray['third'].'
';
打印结果:
maiyatian-huawei@666
//遍历关联数组
$age = array('jason'=>12,
'mike'=>34,
'jenny'=>23);
foreach ($age as $x=>$x_value){
echo 'key:'.$x.' Value:'.$x_value.'
';
}
打印结果:
key:jason Value:12
key:mike Value:34
key:jenny Value:23
?>
- 数组排序
数组中的元素可以按字母或数字顺序进行降序或升序排列。
- sort() - 对数组进行升序排列
- rsort() - 对数组进行降序排列
- asort() - 根据关联数组的值,对数组进行升序排列
- ksort() - 根据关联数组的键,对数组进行升序排列
- arsort() - 根据关联数组的值,对数组进行降序排列
- krsort() - 根据关联数组的键,对数组进行降序排列
PHP超级全局变量
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
详解
- $GLOBALS
- $GLOBALS 是PHP的一个超级全局变量组,在一个PHP脚本的全部作用域中都可以访问。
- $GLOBALS是包含了全部变量的全局组合数组。变量的名字就是数组的键(KEY)\
$x=25;
$y=75;
function submit(){
$GLOBALS['z'] = $GLOBALS['x']+$GLOBALS['y'];
}
submit();
echo $z;
注意:
- $GLOBALS['']中括号里面需要用引号''来指定全局中定义的变量
- 实例中 z 是一个$GLOBALS数组中的超级全局变量,该变量同样可以在函数外访问。
- $_SERVER
- 也是一个数组:包含了诸如头信息(header)、路径(path)以及脚本信息(script)等等信息的数组。
- 数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目
- 服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
- 具体参数比较多,可以参考手册
- PHP $_REQUEST
- 用于收集HTML表单提交的数据。
$_REQUEST结果
- PHP $_POST
- PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="post"。
//在php中以$_POST的方式获得html中post提交的数据
- PHP $_GET
- 和$_POST一样用来收集表单数据,在HTML form标签中指定该属性:"method='get'"。
- $_GET 也可以收集URL中发送的消息
测试 $_GET
ForEach循环
用于遍历数组
";
}
?>
PHP函数
- 创建php函数
function functionName()
{
要执行的代码;
}
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头(不能以数字开头)
自定义函数示例
function myFunc($x, $y)
{
$total = $x + $y;
return $total;
}
echo 'operation:'.myfunc(1,3);
- 带返回值 return
- 传递参数,单参数或者多参数,建议最多参数不要超过3个;超过3个用数组。
PHP魔术变量之 TRAIT代码复用
- 自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
- Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
//魔法变量之 trait
class base
{
public function sayHello()
{
echo 'hello';
}
}
trait sayhello
{
public function sayHello()
{
parent::sayHello();
echo 'world';
}
}
class myHelloWord extends base
{
use sayHello;
}
$o = new myHelloWord();
$o->sayhello();
如果是有基础的同学,那么看上面的代码是非常好理解的:
- 优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
其他PHP魔术变量
- LINE
- FILE
- DIR
- FUNCTION
- CLASS
- METHOD
- NAMESPACE
具体使用请参看手册
PHP命名空间(namespace)
php命名空间解决的问题
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
在同一个文件下定义不同的命名空间
< ?php
namespace MyProject1;
// MyProject1 命名空间中的PHP代码
namespace MyProject2;
// MyProject2 命名空间中的PHP代码
// 另一种语法
namespace MyProject3 {
// MyProject3 命名空间中的PHP代码
}
?>
注意:
- 如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间
- 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。
- 比如:下面的代码就会出错,命名空间必须是程序脚本的第一条语句
” 会致命错误
?>
子命名空间
- 与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:
上面的例子创建了常量 MyProject\Sub\Level\CONNECT_OK,类 MyProject\Sub\Level\Connection 和函数 MyProject\Sub\Level\Connect。
- 注意访问任意全局类、函数或常量,都可以使用完全限定名称,例如 \strlen() 或 \Exception 或 \INI_ALL。
- 在命名空间内部访问全局类、函数和常量:
延伸之const用法
- 在类里面定义常量用 const 关键字,而不是通常的 define() 函数。
- 常量的值一旦被定义后就不可在程序中更改。
";
}
}
// 输出常量
echo Person::country."
";
// 访问方法
$p1 = new Person();
$p1 -> myCountry();
?>
结果:
中国
我是中国人
- const和define的区别