本文整理 PHP 基础学习笔记。涉及旧版行为的内容保留历史说明,运行时应按实际 PHP 版本核对。
数组
php中的数组可以包含任意类型,不要求类型统一,键值可以是另一个数组,也可以是一个变量。
1.数值数组
键名为数字的数组,称为数值数组。如$arr[1] = 2.1;$arr[2] = 2.3;
$arr = [];
$arr[1] = 'je';
$arr[7] = 'sd';
//未初始化的值为null,所以不能只通过键的数量来判断数组大小。
$arr = array('2e','sd','c');
$arr = [1,2,3,5,2];//键名默认连续
2.关联数组
键名为字符串的数组,称为关联数组。如$arr[‘tets’] = ‘csc’;
$arr = array('a'=>'b','c'=>'d');
$arr = [
'a'=>'cd',
'cds',
'sd'
//给定键名则关联,如果未给定则按照0开始按数值进行关联
//键名不能重复
]
3.对数组的操作
1.获取数组长度 count();
2.遍历数组
for($a = 0; $a < count($arr); $a++)
{
...
}//只适合数值数组,因为$a为数字
foreach($arr as $key)
{
...
}
foreach($arr as $key => $value)
{
...
}//保存下key和value,对key和value操作更简单一些
3.对多维数组的操作
$arr = [
'demo1' => [
'vip1'=>'a',
'vip2'=>'b'
],
'demo2'=>[
...
]
];
foreach($arr as $key => $value)//通过$value获取内层数组
{
foreach($value as $key2)
{
//通过key2对内层数组操作
}
}
函数
1.函数的格式
/*
declare(strict_types = 1);
function name(string $name,string $sex)
这两句结合起来可以严格限定参数的类型,不符合则报错。没有第一句则当不符合的时候会自动类型转换。无法转换的时候会报错。
*/
function name(arguments)
{
do something;
return ...;
}
2.变量作用域
1.在函数外定义的变量,为全局变量,可以在脚本的任何位置访问,但是在函数内访问会报错,在函数内访问全局变量需要使用global关键字声明。
2.在函数内部定义的变量为局部变量,只能在函数内部访问。
$name = 'xhangsan';//全局变量
function name(){
$name2 = 'lisi';//局部变量
global $name;//在函数中,需要使用global关键字访问全局变量
$name3 = $name;
}
3.static作用域:在第一次声明变量的时候,使用static修饰局部变量,会将局部变量保存下来,之后在每一次调用的时候都会保留上一次的变量值,生命周期与全局变量相同,直到脚本结束。但是使用static修饰不会改变作用域,依旧只能在函数内部访问。
function test($name){
static $v = 1;
return $v++;
}
echo test(1);
echo test(1);
echo test(1);
4.释放全局变量
unset($name);//将变量释放,和作用域有关。在函数外可以释放全局变量,在函数内只能释放局部变量,无法释放全局变量。
isset($name);//判断变量是否存在
5.超级全局变量
php中有超级全局变量数组,可以在脚本的任何地方访问,函数内部也可以。
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
$GLOBALS是一个包含了全部变量的全局组合数组。变量的名字就是数组的键。可以通过这个数组对全局变量的值修改以及添加新的键
$name = 'zhangsan';
print_r($GLOBALS);
/*
Array
(
[_GET] => Array()
[_POST] => Array()
[_COOKIE] => Array()
[_FILES] => Array()
[GLOBALS] => Array
RECURSION
[name] => zhangsan
)
*/
function test(){
$GLOBALS['name'] = 'lisi';
$GLOBALS['sex'] = '男';
}
test();
print_r($GLOBALS);
/*
Array
(
[_GET] => Array()
[_POST] => Array()
[_COOKIE] => Array()
[_FILES] => Array()
[GLOBALS] => Array
*RECURSION*
[name] => lisi
[sex] => 男
)
*/
$_SERVER是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。
| $_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[‘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”。 |
3.php自带函数的学习
1.判断空值有关函数
isset()//判断是否定义
is_null()//判断是否为null,如果未定义则报错,但是仍然返回true
empty()//判断是否为空(空字符串””,false,0,空数组[],null),如果未定义,仍然会返回true


2.字符串操作函数
| 函数 | 描述 |
|---|---|
| bin2hex() | 把 ASCII 字符的字符串转换为十六进制值。 |
| chr() | 从指定 ASCII 值返回字符。 |
| hex2bin() | 把十六进制值的字符串转换为 ASCII 字符。 |
| join() | 返回一个由数组元素组合成的字符串,implode() 的别名。 |
| ltrim() | 移除字符串左侧的空白字符或其他字符。 |
| md5() | 计算字符串的 MD5 散列。 |
| md5_file() | 计算文件的 MD5 散列。 |
| parse_str() | 把查询字符串解析到变量中。 |
| print() | 输出一个字符串,返回 1。 |
| rtrim() | 移除字符串右侧的空白字符或其他字符。 |
| sha1() | 计算字符串的 SHA-1 散列。 |
| sha1_file() | 计算文件的 SHA-1 散列。 |
| str_pad() | 把字符串填充为新的长度。 |
| str_replace() | 替换字符串中的一些字符(大小写敏感)。 |
| str_split() | 把字符串分割到数组中。 |
| strcasecmp() | 比较两个字符串(大小写不敏感)。 |
| strchr() | 查找字符串在另一字符串中的第一次出现。(strstr() 的别名。) |
| strcmp() | 比较两个字符串(大小写敏感)。 |
| stripos() | 返回字符串在另一字符串中第一次出现的位置(大小写不敏感)。 |
| strlen() | 返回字符串的长度。中文字符串的处理使用 mb_strlen() 函数。 |
| strncasecmp() | 前 n 个字符的字符串比较(大小写不敏感)。 |
| strncmp() | 前 n 个字符的字符串比较(大小写敏感)。 |
| strpos() | 返回字符串在另一字符串中第一次出现的位置(大小写敏感)。 |
| strrchr() | 查找字符串在另一个字符串中最后一次出现。 |
| strrev() | 反转字符串。 |
| strripos() | 查找字符串在另一字符串中最后一次出现的位置(大小写不敏感)。 |
| strrpos() | 查找字符串在另一字符串中最后一次出现的位置(大小写敏感)。 |
| strtolower() | 把字符串转换为小写字母。 |
| strtoupper() | 把字符串转换为大写字母。 |
| substr() | 返回字符串的一部分。 |
| trim() | 移除字符串两侧的空白字符和其他字符。 |
3.数组操作函数
| 函数 | 描述 |
|---|---|
| array() | 创建数组。 |
| array_combine() | 通过合并两个数组(一个为键名数组,一个为键值数组)来创建一个新数组。 |
| array_fill() | 用给定的键值填充数组。 |
| array_fill_keys() | 用给定的指定键名的键值填充数组。 |
| array_filter() | 用回调函数过滤数组中的元素。 |
| array_key_exists() | 检查指定的键名是否存在于数组中。 |
| array_keys() | 返回数组中所有的键名。 |
| array_merge() | 把一个或多个数组合并为一个数组。 |
| array_multisort() | 对多个数组或多维数组进行排序。 |
| array_pop() | 删除数组中的最后一个元素(出栈)。 |
| array_push() | 将一个或多个元素插入数组的末尾(入栈)。 |
| array_replace() | 使用后面数组的值替换第一个数组的值。 |
| array_search() | 在数组中搜索给定的值,如果成功则返回相应的键名。 |
| array_shift() | 删除数组中的第一个元素,并返回被删除元素的值。 |
| array_splice() | 把数组中的指定元素去掉并用其它值取代。 |
| array_unique() | 删除数组中重复的值。 |
| array_unshift() | 在数组开头插入一个或多个元素。 |
| array_values() | 返回数组中所有的值。 |
| arsort() | 对关联数组按照键值进行降序排序。 |
| asort() | 对关联数组按照键值进行升序排序。 |
| count() | 返回数组中元素的数目。sizeof()的别名 |
| current() | 返回数组中的当前元素。pos()的别名 |
| each() | 返回数组中当前的键/值对。 |
| end() | 将数组的内部指针指向最后一个元素。 |
| in_array() | 检查数组中是否存在指定的值。 |
| key() | 从关联数组中取得键名。 |
| krsort() | 对关联数组按照键名降序排序。 |
| ksort() | 对关联数组按照键名升序排序。 |
| next() | 将数组中的内部指针向后移动一位。 |
| prev() | 将数组的内部指针倒回一位。 |
| range() | 创建一个包含指定范围的元素的数组。 |
| reset() | 将数组的内部指针指向第一个元素。 |
| sort() | 对数值数组进行升序排序。 |
4.对日期和时间的操作
| 函数 | 描述 |
|---|---|
| date_default_timezone_get() | 返回默认时区,被所有的 Date/Time 函数使用。 |
| date_default_timezone_set() | 设置默认时区,被所有的 Date/Time 函数使用。 |
| date_format() | 返回根据指定格式进行格式化的日期。 |
| date_time_set() | 设置时间。 |
| date_timestamp_get() | 返回 Unix 时间戳。 |
| date_timestamp_set() | 设置基于 Unix 时间戳的日期和时间。 |
| date_timezone_get() | 返回给定 DateTime 对象的时区。 |
| date_timezone_set() | 设置 DateTime 对象的时区。 |
| date() | 格式化本地日期和时间。 |
| getdate() | 返回某个时间戳或者当前本地的日期/时间的日期/时间信息。 |
| gmmktime() | 返回 GMT 日期的 UNIX 时间戳。 |
| gmstrftime() | 根据区域设置格式化 GMT/UTC 日期和时间。 |
| localtime() | 返回本地时间。 |
| microtime() | 返回当前 Unix 时间戳的微秒数。 |
| mktime() | 返回一个日期的 Unix 时间戳。 |
| strptime() | 解析由 strftime() 生成的时间/日期。 |
| time() | 返回当前时间的 Unix 时间戳。 |
文件包含
include “文件名”;包含另一个文件,如果文件不存在或发生错误,则报错,但是会继续执行当前脚本
require “文件名”;如果发生错误,则抛出致命错误,并终止当前脚本的执行
include_once “…”;保证只包含一次。
require_once “…”;保证只包含一次。
文件包含可以利用重复的代码片段,等价于将包含的脚本复制到调用的地方,所以如果被包含的脚本中有函数的定义,多次包含时会报错,相当于函数重复定义。
评论发表评论 +
评论