搜索文章

输入标题或内容中的关键词。

← 回到技术手记
编程

PHP 学习笔记(二):数组、函数与文件包含

gemhack··17 分钟阅读

本文整理 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 “…”;保证只包含一次。

文件包含可以利用重复的代码片段,等价于将包含的脚本复制到调用的地方,所以如果被包含的脚本中有函数的定义,多次包含时会报错,相当于函数重复定义。

参考资料

评论发表评论

评论

发表评论

邮箱不会公开。标有 * 的项目为必填项。