php学习笔记1--PHP基础

PHP 学习笔记

  • PHP 学习笔记
    • PHP 简介
      • PHP 常用运行环境架构
        • PHP 环境搭建
      • php 编码规范DRY原则 Do not repeat Yourself
    • PHP 基本语法
      • php的标记风格插标
      • PHP 指令分隔符
      • PHP 注释 php 支持多种常见注释方式
      • PHP 常量
      • PHP 变量
        • 变量赋值方式
        • 变量的作用域
      • PHP数据类型
        • 标量数据类型
        • 复合数据类型
        • 特殊数据类型
        • 数据类型的转换
      • PHP 运算符
        • 递增递减运算符
        • 运算符优先级
    • PHP 函数
      • PHP 流程控制
        • 顺序结构按先后从上到下执行语句只执行一次
        • 分支结构根据条件判断执行那些语句块
        • 循环结构
        • break continue
      • PHP 自定义函数
        • 函数定义
        • 递归函数在函数体内调用函数本身
        • 嵌套函数
      • php内置函数库即内置函数
        • 常用的内置函数
        • 数组函数
        • 数组遍历
        • 字符串函数
        • 日期时间型函数
        • PHP 数学函数
        • 其他函数

PHP 简介

PHP 语言(PHP:Hypertext Preprocessor)是一种开源脚本语言, 由PHP解析器在服务器上执行

PHP:Hypertext Preprocessor 全称前的 PHP 不可省略, PHP缩写是一种递归缩进的写法

PHP 常用运行环境架构

php 主要是用于支持WEB服务的脚本语言, 为了运行 php 通常需要安装 web 服务器 php 和数据库工具, 一般的有以下几种架构组合
* LAMP:Linux,Apache,MySQL,PHP
* LNMP:Linux,Nginx,MySQL,PHP
* WAMP:Windows,Apache,MySQL,PHP

LNAMP: Linux,Nginx+Apache,MySQL,PHP 通过Nginx代理转发, 提高并发能力

HTTP:Hypertext Transfer Protocol, 超文本传输协议; 是 web 服务的一种基础协议, 对于 PHP 学习来说非常重要 HTTP详解
* HTTP 连接四步工作: 建立连接,发送请求,给出应答,关闭连接
* 常见状态码:200,400,401,403,404,500,503
MySQL: 是一种小型开源数据库(现在也支持很大的数据内容了), 和开源的 php 是一种非常完美的组合, MySQL学习笔记

PHP 环境搭建

详见: PHP运行环境搭建(Win&Linux)

php 编码规范:DRY原则, Do not repeat Yourself

  • 命名规则:
    • 变量, 有意义的英文单词,之间可用_连接
    • 函数, 同上,运用小驼峰,首词小写,后面每词首字母大写
    • 类, 同上,运用大驼峰,首词大写,后面每词首字母大写
  • 书写规范(PSR2):
    • 注意缩进和留白
    • 嵌套要缩进,避免3层以上嵌套,
    • 各功能区空行留白
    • 参数间逗号(,)后空一格

      PHP 书写规范详见()[]

  • 验证不可少:
    • 前端要验证,后端也要验证,输出也要验证
    • 合理使用缓存机制,适当使用框架

PHP 基本语法

PHP 脚本在服务器上执行, 然后将纯 HTML 结果发送回浏览器.

php的标记风格(插标)

1. XML风格
  
  // PHP 代码
  ?>

2. shell(脚本)风格
  <script language="php">
  // PHP 代码
  script>

3. 简短风格 //需要在php.ini里更改short_open_tag = off 为on
  
  // PHP 代码
  ?>

4. ASP标记风格 //需要在php.ini里更改asp_tags = off 为on    
  <%
  // PHP 代码
  %>

PHP 指令分隔符

PHP 需要在每个语句后用分号结束指令

PHP 注释: php 支持多种常见注释方式

  // c++风格
  # shell风格
  /* c多行注释风格 */  

PHP 常量

常量, 用于存储程序中不变的数据, 使用函数define()来声明, 声明后值不可改变, 常量名必须以下划线或字母开始,不需要$符, 区分大小写,一般全字母大写
bool define(sting $name,mixed $value [, bool $case_insensitive = false ]);  
  • name:必选参数, 常量名称, 即标志符.
  • value:必选参数, 常量的值.
  • case_insensitive :可选参数, true or false,true对大小写不敏感,反之则反,默认false
define(FILENAME,'huwhois');     //定义常量FILENAME,值为huwhois,对大小写敏感

使用函数defined()来判断是否定义为常量

defined(FILENAME);  //判断FILENAME是否定义为常量了,返回值为true or false

php常见的预定义常量:

echo "__FILE__,当前文件的路径:".__FILE__.'
'
; echo "__LINE__,当前PHP程序的行数:".__LINE__.'
'
; echo "PHP_VERSION,当前PHP的版本:".PHP_VERSION.'
'
; echo "PHP_OS,当前PHP使用的操作系统:".PHP_OS.'br'; echo "Boolean值:TRUE FALSE
"
; echo "E_ERROR,php错误的级别代码:".E_ERROR.'
'
; echo "E_WARNING,警告的级别代码:".E_WARNING.'
'
; echo "E_ERROR,语法解析有潜在问题处的级别代码:".E_PARSE.'
'
; echo "E_NOTICE,该常量为发生不寻常,但不一定是错误处的级别代码:".E_NOTICE.'
'
;

PHP 变量

用于存储程序中值可以改变的数据, 是一种存储数据的容器.

$name [= value];
  • 注意事项:
    • 变量名前要加$符
    • 变量名必须以字母或下划线开头,后面可跟字母/下划线/数字
    • 变量名区分大小写
    • 变量名不允许与系统内建变量/函数/常量等同名

变量赋值方式:

PHP 没有声明变量的命令, 变量在第一次赋值给它的时候被创建
* 直接赋值,使用赋值号 = :

  • 传值赋值,将一个变量的值赋值给另一个变量(传一个副本)

  • 引用赋值,将一个变量的内存空间和另一个变量共享

    $a = 5;
    echo $a.'
    '
    ; // 5 $b=$a; echo $b.'
    '
    ; // 5 $a=5; $c=&$a; echo $c.'
    '
    ; // 5 /* 若$c值改变了,$a也跟值一起变 */ $c = $a*2; echo $c.'
    '
    ; // 10 echo $a.'
    '
    ; // 10 echo $b.'
    '
    ; // 5 /* 使用unset()函数销毁其中一个时, 另一个不受影响, 即有福同享,有难不当*/ unset($c); echo $a.'
    '
    ; // Notice: Undefined variable: a echo $c.'
    '
    ; // 10

    php 中变量不需要特殊声明, 直接拿出来用就可以, 但常常会用到赋空字符串/数组初始化变量, 以方便程序运行

变量的作用域

即变量起作用的范围,主要是根据他们的声明方式和位置决定的

  • 局部变量,声明在某范围的变量,只在其声明范围内起作用,如函数体里的内部变量

    $a = 'aaaa';
    
    function test($a) {
      $a = 'bbbb';
      echo $a.'
    '
    ; } test($a); // 'bbbb' echo $a.'
    '
    ; // 'aaaa' /* 引用赋值可将局部变量的影响传出来 */ $a = 'aaaa'; function test(&$a) { $a = 'bbbb'; echo $a.'
    '
    ; } test($a); // 'bbbb' echo $a.'
    '
    ; // 'bbbb'
  • 全局变量,使用关键字global定义,可在广泛范围内使用

    php 超级全局变量, 又称预置变量,系统定义的,可直接使用,以数组形式存储相关信息c,php预置变量,又称超级全局变量,系统定义的,可直接使用,以数组形式存储相关信息,详见数组

  • 静态变量,使用关键字static定义,制作用在函数域内,函数结束后不会释放,而会保存最后一次调用的值,等待函数下次被调用时使用(详解)

  • 可变变量,即多个$组在一起,变量名由其他变量的值确定

    $test = 'abc';
    $abc = '123456';
    echo $$test;  // '123456'

    可变变量的语法形式是php特殊的语法, 其他语言中少见(目前没见到过), 很好用, 一个变量的变量名可以动态的设置和使用.

  • 函数和类的方法中, 超全局变量不能用作可变变量.
  • $this变量也是一个特殊变量, 不能被动态引用.

PHP数据类型

标量数据类型:

类型 中文名称 说明
Boolean 布尔型 TRUE or FALSE (true false)
String 字符串型 ” or “” 之间 //单独占一行,且前后不能有多余的空格
Integer 整型(int) 有符号整数 php中没有无符号整数
Float 浮点型 浮点型数(有小数点或者E)

单引号(”), 不解析变量, 把变量名原样输出(理论上速度比双引号快); 双引号(“”)解析变量,输出变量值, eg:

$test = 'abc';

echo '$test'.'
'
; // '$test' echo "$test".'
'
; // 'abc'

界定符: 相当于多行双引号(“”), ‘<<<’加指定的开始标记符和结束符之间的字符都可以看做一个双引号里

  $test01 = <<12141242412
  $test
FFF;

echo $test01.'
'
; // 'testest abcd 12141242412 abc'

结束符必须和开始标记想同, 且单独占一行,且前后不能有多余的空格

  • 转义字符,\’ \n \r \t \” \% …
  • php 识别 ‘\’
  • 字符串多引号嵌套:

复合数据类型:

类型 中文名称 说明
array 数组 一组数据的集合(可以是任何数据,包括数组),组成要素,索引(下标/键名)———元素
object 对象 类的一个实例化

* 数组赋值(声明)
- 使用array()关键字直接赋值
- 追加赋值
- -php5.4 后可直接用 [] 声明数组
“`
arr=array(1,2,3,bb);//,0 arr[] = 1;
arr[]=2; arr[] = 3;
$arr[] = ‘bb’;

$arr=arry('key0'=>'value0','key1'=>'value1'...tec)  //指定键名
$arr['key0']='value0';
$arr['key1']='value1';  //同上

/* php5.4 开始可以使用 [] 替代array() */ 
$arr = ['a', 1, 'b', 'exit'];
$arr = ['key0'=>'value0','key1'=>'value1'];

“`

数组打印输出不能用echo, 而是用print_r, 也可以用var_dump等打印变量详细信息;

  • 多维数组,即数组里面的元素也是数组,

    $arr1=(
    array("a"=>"aaaa","b"=>"bbbb");
    array("c"=>"cccc","d"=>"dddd");
    )
    $arr1['a']['a']="aaaa";
    $arr1['a']['b']="bbbb";
    $arr1['a']['c']="cccc";
    $arr1['a']['d']="dddd";
  • 数组合并

    • ”+”运算符:若前后数组有重复键名,则前者保留,后面数组的同键名值,直接去掉
    • array_merge($ar1,$ar2,....$arn),若前后数组有重复键名,则后面覆盖前面的,同+相反
      根据数组索引(key)的数据类型分为两类,索引数组(键名全为整型),关联数组(包括混合数组)
  • 特殊数组,预定义变量,又名超级全局变量,是以数组形式存储的系统预定义变量

    • $GLOBALS 全局作用域中可用的全部变量, PHP 在名为 $GLOBALS[index] 的数组中存储了所有全局变量.变量的名字就是数组的键.
    • $_SERVER 保存关于报头、路径和脚本位置信息的超级全局变量
    • $_REQUEST 存储$_POST$_GET的所有变量
    • $_POST 存储表单 post 提交的值
    • $_GET 存储get 提交的值(包括表单和地址栏/链接)
    • $_FILES 存储上传的文件提交到当前脚本的数据
    • $_COOKIE 取得用户浏览器中Cookie中存储的数据
    • $_SESSION 存储当前脚本会话的session变量
    • $_ENV 存储当前WEB环境变量

php对象是类的实例化, 在面对对象编程的学习中会详细介绍

特殊数据类型:

类型 中文名称 说明
resource 资源 保存外部资源的一个引用的变量,如打开文件/图形画布等
null 空值 没有赋初始值的变量
- - 赋值为null的变量
- - 被内置函数unset()处理了的变量

数据类型的转换

  • 自动转换: PHP 是 若类型语言, 标量数据类型参与类型时, PHP 解析器会根据实际情况自动转换
  • 强制转换:使用PHP运算符或内置函数强制改变变量数量类型
    • 函数:
      • intval($var), 强制转换为整型(取整)
      • floatval($var), 强制转换为浮点型
      • stringval($var), 强制转换为字符型
      • settype($var,type),type为目标数据类型
      • unset($var), 转为null,销毁变量
    • 运算符:
      • (int/integer)$var;
      • (float)$var;
      • (string)$var;
      • (bool/boolean)$var;
      • (array)$var;
      • (object)$var;
  • 类型检测:
    • is_bool($var);
    • is_int($var);
    • is_float($var);
    • is_string($var);
    • is_array($var);
    • is_object($var);
    • is_null($var);
    • is_numeric($var), 判断变量是否为数字(字符型的数字也是)

var_dump($var); //打印变量的详细属性

instanceof: php 没有 typeof 运算符, 可以使用 instanceof 检测是否某类型, instanceof 也可以检测变量是否属于某 class

PHP 运算符

运算符,即变量执行算术/逻辑运算的符号,也成操作符

类型 运算符 说明 结合方向
算术运算符
        / % **
非数值型参与运算时PHP先转换为数值型 从左到右(左联)
递增/递减 ++ – 变量先做其他运算,再自加 从右到左(右联)
字符串运算符 . 连接两字符串 左连
赋值运算符 = += -= *= /= %= .= 左边为变量名,右面右表达式或常量 右联
比较运算符 == === != <> !== > < >= <= ?? 又称关系运算符或条件运算符,用于判断操作数的关系,返回布尔值(TRUE or FALSE)
逻辑运算符 and && or ` ` not ! xor(亦或)
三目运算符 :? exp1?exp2:exp3 //exp1为真则执行exp2否则执行exp3

递增/递减运算符

例子 名称 效果
++$a 前加 $a 的值加一, 然后返回 $a.
$a++ 后加 返回 $a, 然后将 $a 的值加一.
–$a 前减 $a 的值减一, 然后返回 $a.
$a– 后减 返回 $a, 然后将 $a 的值减一.

一个简单的示例脚本:


echo "

Postincrement

"
; $a = 5; echo "Should be 5: " . $a++ . "
\n"
; echo "Should be 6: " . $a . "
\n"
; echo "

Preincrement

"
; $a = 5; echo "Should be 6: " . ++$a . "
\n"
; echo "Should be 6: " . $a . "
\n"
; echo "

Postdecrement

"
; $a = 5; echo "Should be 5: " . $a-- . "
\n"
; echo "Should be 4: " . $a . "
\n"
; echo "

Predecrement

"
; $a = 5; echo "Should be 4: " . --$a . "
\n"
; echo "Should be 4: " . $a . "
\n"
; ?>

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 $a = 'Z'; $a++;将把$a变成’AA’,而在 C 中,a = ‘Z’; a++; 将把 a 变成 ‘[‘(’Z’ 的 ASCII 值是 90,’[’ 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化

运算符优先级

一般地: 运算符优先>级特殊运算符>算术运算符>比较运算符>逻辑运算符>赋值符

  • 运算符优先级相同则由运算符的结合方向决定运算先后

  • 没有结合行的同级运算符不能对一个操作数使用, eg: 1< 2 > 3; 不合法

  • 圆括号有最高优先级,适当加圆括号可是运算表达式更清晰

    优先级: clone new > [ > * > ++ – ~ (int) (float) (string) (array) (object) (bool) @ > instanceof > ! > / % > + - . > << >> > < <= > >= > == != === !== <> <=> > & > ^ > | > && > || > ?? > ?: > = += -= = *= /= .= %= &= |= ^= <<= >>= > and > xor > or


PHP 函数

函数, 被命名的独立代码块, 可能一个有返回结果

PHP 流程控制

流程控制,即程序执行的顺序控制(执行跳过选择等)

顺序结构,按先后从上到下执行,语句只执行一次

分支结构,根据条件判断执行那些语句块


单分支, if(expression){
statement
}
多分支, if(expression){
statement1
}else{
statement2
}
多重分支,if(expression1){
statement1
}elseif(expression2){
statement2
}......else{ statement3}
分支嵌套, if(expression0){
if(expression1){
statement1
}
}else{
if(expression2){
statement2
}
}
多分支选择
switch(exoression){ //表达式为整型或字符
case 常量1; statement1;
break;
case 常量2; statement2;
break;
case 常量3; statement3;
break;
case 常量4; statement4;
break;
...
default; statementn;
break;
}

循环结构

循环结构主要有条件表达式和执行语句组成,且必须有结束条件
* while, 条件循环,常用于循环次数不知的时候

while(expression){
statement; //必须要有结束条件
}

while循环也可以嵌套多层,但一般不会嵌套多层

  • do while循环基本同while,但至少会在判断前执行一次体内语句

    do{
        statement;  
    }while(expression);
  • for循环, 计数循环

    for (initalization,con-expr,++/-- ){
        statememt;
    }
  • foreach循环,一般用来遍历数组和对象,配合关键字as使用

    for($aaray as $key=>$val){
    echo $key.'-----'.$val;
    }

使用循环写乘法口诀

   $i=1;
    while($i<10){
        $j=1;
        while{
            echo $j.'*'.$i.'='.$j*$i;
        }
        $i++;
    }
    for($i,$i<10,$i++){
        for($j,$j<10,$j++){
             echo $j.'*'.$i.'='.$j*$i;
        }
    }

break && continue

break 跳出当前循环,执行循环外语句
continue 跳过本次循环,执行下一次循环

PHP 自定义函数

函数定义

PHP使用关键字 function 来声明函数

    function fuc_name( arguments ){
            函数体
            return r_value;
    }
  • 函数命名:
    • 以字母下划线开头,后面可跟字母数字下划线
    • 不可与系统函数名重名
    • 函数名不区分大小写
  • 函数需要先定义才调用
  • 函数只有调用时才会执行,return的值给调用的地方
  • 参数列表(arguments)由0个/一个/多个表达式组成,之间用逗号隔开

形参是函数定义时,函数名后面跟着的参数;
实参是函数调用时,函数名后面跟着的参数

  • 参数传递方式

    • 按值传递,参数把函数外变量值的副本(即复制)给函数体用,函数体内操作不会改变函数外的变量
    • 按引用传递,参数把函数外变量的内存地址共享给函数体使用,函数体内操作会改变外部的变量
    • 默认值传递,即给形参设置默认值, 当没对应实参传进来时, 函数调用默认值, 有默认值的形参必须放到参数列表最后, 默认值必须是常量表达式
    • 自定义传参,函数定义时不给形参, 调用时函数参数数量不定,函数体类通过以下函数获取参数列表(数组)
      • func_num_args(); 返回参数个数
      • func_get_arg(n); 返回参数指定位置的参数值
      • func_get_args(); 返回包含所有参数的数组
        $test1 = 'aa';
        $test2 = 'bb';
        
        function value($a){
            $a .= 'tttt';
            echo '$a'.'
        '
        ; } echo $test1.'
        '
        ; value($test1); echo $test1.'
        '
        ; function quote(&$b){ $b .= 'test'; echo $b.'
        '
        ; } echo $test2.'
        '
        ; quote($test2); echo $test2.'
        '
        ; function sortNumber(){ $array=func_get_args(); var_dump($array); } $test=sortNumber(1,2,3,4,5); /* 运行结果 */ aa aatttt aa bb bbtest bbtest E:\www\test.php:24: array (size=5) 0 => int 1 1 => int 2 2 => int 3 3 => int 4 4 => int 5

递归函数,在函数体内调用函数本身

function sunm($a){
    if($a>0){
        return $a+sum($a-1);
    }
}
sum(100);   求0100的和

function test($n){
    echo $n;
    if($n>0){
        test($n-1);
    }
    ehco $n;
}
test(5);

嵌套函数

嵌套函数, 是指在一个函数体内又同事调用一个或多个函数, 形成函数内外嵌套的关系, 先调用外部函数, 才能调用内部函数, 内部函数不调用, 不执行

function start(){
    echo "正在开机...\n";
    function boot(){
        echo "正在加载引导程序...\n";
    }
    function welcome($user){
        echo "欢迎使用本系统\n";
    }
}

start();
boot();
welcome("aaa");

php内置函数库,即内置函数

PHP 有很多标准的函数和结构,还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的“未定义函数”错误。例如,要使用 image 函数中的 imagecreatetruecolor(),需要在编译 PHP 的时候加上 GD 的支持。或者,要使用 mysql_connect() 函数,就需要在编译 PHP 的时候加上 MySQL 支持。有很多核心函数已包含在每个版本的 PHP 中如字符串和变量函数。调用 phpinfo() 或者 get_loaded_extensions() 可以得知 PHP 加载了那些扩展库。–PHP 手册<语言参考>

常用的内置函数

  • empty(), 检查一个变量是否为空,空返回true,非空返回false
  • isset(), 检测一个变量是否被设置及值时候不为null,非空为true,空或null为false
  • print_r(), 格式化打印标量(一般用来打印数组)
  • unset(), 销毁一个变量
  • var_dump(), 打印变量相关信息(位置,类型,值,长度等)

数组函数

  • array_merge($ar1,$ar2,....$arn), 数组合并 若前后数组有重复键名,则后面覆盖前面的,同+相反
eg: $a=['a'=>1,'b'=>2,'c'=>3];
    $b=['c'=>4,'d'=>5,'f'=>6];
    var_dump(array_merge($a,$b));
    D:\PHP04\www\test.php:41:
    array (size=5)
    'a' => int 1
    'b' => int 2
    'c' => int 4
    'd' => int 5
    'f' => int 6
  • range(low,high,step),在low和high之间创建步长为step的数组
eg: $aa=range(1,9,2);
    var_dump($aa);
    D:\PHP04\www\test.php:42:
    array (size=5)
    0 => int 1
    1 => int 3
    2 => int 5
    3 => int 7
    4 => int 9
  • in_array($var,$array),检测 $array 中值是否有 $var
  • array_key_exists($key,$array),检测 $array 中键是否有 $key

数组遍历

数组的遍历, 是编程语言中的重要一环, PHP 一般使用 foreach 遍历数组
- foreach()函数, 仅用于遍历数组和对象, 配合关键字as使用, 有两种形式

foreach($arr as $val){
foreach($val as $k=>$v){
statement;
}
}

> foreach 不支持用“@”来抑制错误信息
  • each()函数,以混合数组的方式返回当前数值指针指向元素的键值对(键名和值),并将指针向后走一步(最后超出时返回false)

    $arr = array('aa'=>'aaaaa', 'bb'=>'bbbb');
    vardump(each($arr));
    
    /* 运行结果 */
    E:\www\test.php:119:
    array (size=4)
      1 => string 'aaaaa' (length=5)
      'value' => string 'aaaaa' (length=5)
      0 => string 'aa' (length=2)
      'key' => string 'aa' (length=2)

    相关函数

    current(),当前指针指向的值
    next(),当前指针的下一个值
    prev(),当前指针的后一个值
    end(),最后一个元素的值
    reset(),将指针重新定向到第一个值
  • list(),将一个数组的值按先后顺序批量赋给list的参数

    list($a,$b)=array(1,2,3);   //数组必须是以0开始的数组
    
    /* list和explode获取文件后缀名 */
    $filename="huaji.jpg";
    list($name,$type)=explode('.',$filename);
    echo $name.'
    '
    ; // huaji echo $type.'
    '
    ; // jpg
  • while list each配合来遍历数组

    while(list($k,$v)=each($arr)){ // each() 指针最后无元素时会返回false, 结束循环
    echo $k.'=>'.$v;
    }

字符串函数

  • strlen()

        int strlen ( string $string )

    返回字符串长度, 计空格(包括首尾空格), 英文单字母返回1字符长度, 汉字在不同的编码情况下返回长不同, utf8每字3个, gb2312(或是gbk)下2长度

  • mb_strlen()

        mixed mb_strlen (string $str [, string $encoding = mb_internal_encoding()])

    返回指定字符编码的字符串长度(未指定则使用内部默认字符串), 计空格(包括首尾空格), 多字节的字符被计为1, 即英文字母和汉字都返回1字符长度(utf8,gbk 下都是).

    /* UTF-8 */
    $test = 'php编程';
    
    var_dump($test);
    var_dump(strlen($test));  
    var_dump(mb_strlen($test));
    
    /* 结果*/
    E:\www\test.php:5:string 'php编程' (length=9)
    E:\www\test.php:175:int 9
    E:\www\test.php:176:int 5
    
    
    /* GB2312 */
    header("Content-type: text/html; charset=gb2312"); //php 默认编码方式为utf-8
    
    $test = 'php编程';
    
    var_dump($test);
    var_dump(strlen($test));  
    var_dump(mb_strlen($test));
    
    E:\www\test.php:6:string 'php编程' (length=7)
    E:\www\test.php:7:int 7
    E:\www\test.php:8:int 5
  • trim()

        string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )

    去除字符串收尾的空字符(包括空格/换行等), character_mask
    可选参数, 过滤字符也可由 character_mask 参数指定. 一般要列出所有希望过滤的字符, 也可以使用 “..” 列出一个字符范围, 不指定第二个参数,trim() 将去除这些字符:

    • ” ” (ASCII 32 (0x20)), 普通空格符。
    • “\t” (ASCII 9 (0x09)), 制表符。
    • “\n” (ASCII 10 (0x0A)), 换行符.
    • “\r” (ASCII 13 (0x0D)), 回车符.
    • “\0” (ASCII 0 (0x00)), 空字节符.
    • “\x0B” (ASCII 11 (0x0B)), 垂直制表符.
  • substr

        string substr ( string $string , int $start [, int $length ] )

    从指定位置 $start,按指定长度 $length,截取出一段字符

    • 开始位置, $start
      • $start >= 0, 则从开头(左)数(0为左开始)
      • $start < 0, 则从结尾处(右)数(-1为右开始)
      • $start > $strlen($string), 将返回 FALSE
    • 截取长度, $length
      • 无$length, 则从start截取值尾
      • $length值为 0 false 或 null, 返回一个空字符串
      • length > 0, 即截取length长度, 超过字符串尾部的部分舍去
      • length < 0, string 末尾处的 length 个字符将会被省略(若 start 是负数则从字符串尾部算起). 如果 start 不在这段文本中, 那么将返回 FALSE
        echo substr('abcdef', 1);      // bcdef
        echo substr('abcdef', 1, 3);   // bcd
        echo substr('abcdef', 0, 4);   // abcd
        echo substr('abcdef', 0, 8);   // abcdef
        echo substr('abcdef', 2, -1);  // cde
        echo substr('abcdef', 2, -4);  // [false]
        echo substr('abcdef', -1, 1);  // f

    也可以使用中括号访问字符串中的单个字符(字符串就像单个字符组成的数组)

      $string = 'abcdef';
      echo $string[0];                 // a
      echo $string[3];                 // d
      echo $string[strlen($string)-1]; // f
  • strstr

        string strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] )

    返回 haystack 字符串从 needle 第一次出现的位置开始到 haystack 结尾的字符串, $before_needle省略值为false, 为true时截取前面的部分

    echo strstr("abcdef.jpg", '.'); // .jpg
    echo strstr("abcdef.jpg", '.', true);   // adcdef
  • stristr(),同上,但strstr()区分大小写,而stristr()不区分大小写

  • str_replace

    mixed substr_replace (mixed $string , mixed $replacement , mixed $start [, mixed $length])
    • 使用 replacement子字符串替换 string 的副本中由 start 和可选的 length 参数限定范围的字符串;
    • 此函数区分大小写
    • start
      • 如果 start 为正数,替换将从 string 的 start 位置开始。
      • 如果 start 为负数,替换将从 string 的倒数第 start 个位置开始。
    • length
      • 如果设定了这个参数并且为正数,表示 string 中被替换的子字符串的长度。
      • 如果设定为负数,它表示待替换的子字符串结尾处距离 string 末端的字符个数。
      • 如果没有提供此参数,那么它默认为 strlen( string ) (字符串的长度).
      • 如果 length 为 0,那么这个函数的功能为将 replacement 插入到 string 的 start 位置处。
        $var = 'ABCDEFGH:/MNRPQR/';
        echo "Original: $var
        \n"
        ; /* 这两个例子使用 “bob” 替换整个 $var。*/ echo substr_replace($var, 'bob', 0) . "
        \n"
        ; echo substr_replace($var, 'bob', 0, strlen($var)) . "
        \n"
        ; /* 将 “bob” 插入到 $var 的开头处。*/ echo substr_replace($var, 'bob', 0, 0) . "
        \n"
        ; /* 下面两个例子使用 “bob” 替换 $var 中的 “MNRPQR”。*/ echo substr_replace($var, 'bob', 10, -1) . "
        \n"
        ; echo substr_replace($var, 'bob', -7, -1) . "
        \n"
        ; /* 从 $var 中删除 “MNRPQR”。*/ echo substr_replace($var, '', 10, -1) . "
        \n"
        ;

    也可用于处理数组

    $input = array('A: XXX', 'B: XXX', 'C: XXX');
    
    // A simple case: replace XXX in each string with YYY.
    echo implode('; ', substr_replace($input, 'YYY', 3, 3))."\n";
    
    // A more complicated case where each replacement is different.
    $replace = array('AAA', 'BBB', 'CCC');
    echo implode('; ', substr_replace($input, $replace, 3, 3))."\n";
    
    // Replace a different number of characters each time.
    $length = array(1, 2, 3);
    echo implode('; ', substr_replace($input, $replace, 3, $length))."\n";
  • strpos($str1, $str2, [, int $offset = 0 ]), 返回$str2在$str1第一次出现的位置

  • strrpos($str1, $str2, [, int $offset = 0 ]), 返回$str2$str1最后一次出现的位置

  • str_pad($str1, $length, $str2),使用指定字符$str2填充原字符串$str1到[‘PP’]指定长度

  • strcmp($str1,$str2),比较两字符串大小(二进制\ASCII码),如果 $str1 小于 $str2 返回 -1; 如果 $str1 大于 $str2 返回 1;如果两者相等,返回 0。

  • strtoupper(),将字符串转成大写

  • strtolower(),将字符串转成小写
  • ucwords(),将字符串的每个单词首字母大写
  • ucfirst(),将字符串的首个单词首字母大写
  • count_chars($str,[0|1|2|3|4]),统计 string 中每个字节值(0..255)出现的次数, 可使用多种模式返回结果

日期时间型函数

  • time(),返回当前Unix的时间戳

  • date(),格式化一个本地时间

string date(string $format [, int $timestamp = time() ]);
    $format为输出格式,后面的time,为指定时间戳,省略则为当前时间戳
    $forma格式及作用(区分大小写)
        d - 一个月中的第几天(从 0131D - 星期几的文本表示(用三个字母表示)
        j - 一个月中的第几天,不带前导零(131)
        l('L' 的小写形式)- 星期几的完整的文本表示
        N - 星期几的 ISO-8601 数字格式表示(1表示Monday[星期一],7表示Sunday[星期日])
        S - 一个月中的第几天的英语序数后缀(2 个字符:st、nd、rd 或 th。与 j 搭配使用)
        w - 星期几的数字表示(0 表示 Sunday[星期日],6 表示 Saturday[星期六])
        z - 一年中的第几天(从 0365)
        W - 用 ISO-8601 数字格式表示一年中的星期数字(每周从 Monday[星期一]开始)
        F - 月份的完整的文本表示(January[一月份] 到 December[十二月份])
        m - 月份的数字表示(从 0112)
        M - 月份的短文本表示(用三个字母表示)
        n - 月份的数字表示,不带前导零(112)
        t - 给定月份中包含的天数
        L - 是否是闰年(如果是闰年则为 1,否则为 0)
        o - ISO-8601 标准下的年份数字
        Y - 年份的四位数表示
        y - 年份的两位数表示
        a - 小写形式表示:am 或 pm
        A - 大写形式表示:AM 或 PM
        B - Swatch Internet Time(000999)
        g - 12 小时制,不带前导零(112)
        G - 24 小时制,不带前导零(023)
        h - 12 小时制,带前导零(0112)
        H - 24 小时制,带前导零(0023)
        i - 分,带前导零(0059)
        s - 秒,带前导零(0059)
        u - 微秒(PHP 5.2.2 中新增的)
        e - 时区标识符(例如:UTC、GMT、Atlantic/Azores)
        I(i 的大写形式)- 日期是否是在夏令时(如果是夏令时则为 1,否则为 0O - 格林威治时间(GMT)的差值,单位是小时(实例:+0100)
        P - 格林威治时间(GMT)的差值,单位是 hours:minutes(PHP 5.1.3 中新增的)
        T - 时区的简写(实例:EST、MDT)
        Z - 以秒为单位的时区偏移量。UTC 以西时区的偏移量为负数(-4320050400)
        c - ISO-8601 标准的日期(例如 2013-05-05T16:34:42+00:00)
        r - RFC 2822 格式的日期(例如 Fri, 12 Apr 2013 12:01:05 +0200)
        U - 自 Unix 纪元(January 1 1970 00:00:00 GMT)以来经过的秒数
  • strtotime,将能识别的字符串时间格式转为时间戳
echo 'strtotime("now")当前时间戳:'.strtotime("now").'
'
; echo 'strtotime("2018/03/28 12:23:45")2018/03/28 12:23:45时间戳:'.strtotime("now").'
'
; echo 'strtotime("10 September 2000")2000-09-10时间戳:'.strtotime("now").'
'
; echo 'strtotime("+1 week")一个星期后的时间戳:'.strtotime('+1 week').'
'
; echo 'strtotime("next Thursday")下个星期四的时间戳'.strtotime('next Thursday').'
'
;

以上结果可以用于 date() 时间格式化输出:

echo '昨天的这个时间点'.date("Y-m-d H:i:s",strtotime('-1 day')).'
'
;

PHP 中设置时区

PHP 默认时区设置是 UTC (国际标准时), 即格林威治时间, 使用 date(“Y-m-d H:i:s”,strtotime(‘now’)) 得到的时间比本地时区晚8小时, 要正常显示本地时间需要设置 php 时区
1. 修改php.ini, 在[Date]下找到中找到data.timezone =去掉注释,即去掉它前面的;号, 然后设置 data.timezone = “Asia/Shanghai” (或者 date.timezone =”PRC” 没有就添加), 重启 Apache 即可.

  1. PHP5以上版本可在程序代码中使用函数ini_set() 或者 date_default_timezone_set()

    ini_set('date.timezone','Asia/Shanghai');
    
    if (function_exists(date_default_timezone_set)) {
        date_default_timezone_set("Etc/GMT");//这是格林威治标准时间,得到的时间和默认时区是一样的 
        date_default_timezone_set("Etc/GMT+8");//这里比林威治标准时间慢8小时 
        date_default_timezone_set("Etc/GMT-8");//这里比林威治标准时间快8小时 
        date_default_timezone_set('PRC'); //设置中国时区
        date_default_timezone_set('Asia/Shanghai'); //设置中国时区
    }
    
    /*一些常用的时区标识符说明:*/
    Asia/Shanghai – 上海 
    Asia/Chongqing – 重庆 
    Asia/Urumqi – 乌鲁木齐 
    Asia/Hong_Kong – 香港 
    Asia/Macao – 澳门 
    Asia/Taipei – 台北 
    Asia/Singapore – 新加坡 
    • microtime(),返回当前时间戳及其微秒数
          function microtime_float(){
              list($usecond,$time)=explode(' ',microtime());
              return $time=(float)$usecond+(float)$time;      
          } 
          $time_start=microtime_float();      //开始时间
          echo  microtime_float()."
      "
      ; /* sleep for a while 休眠一下,替代中间一段执行过程 */ usleep(1000); //单位微妙 $time_end=microtime_float(); //结束时间 echo microtime_float()."
      "
      ; $time=$time_end-$time_start; //计算时间差 echo "sleep in $time seconds"."
      "
      ;

PHP 数学函数

  • abs(),取绝对值
  • ceil(),进一取整
  • floor(),去未取整
  • round(),四舍五入
  • fmod(),浮点取余
  • mt_rand($min,$max),在$min,$max生成随机数,整型随机数,比老的 rand()更好快更好
  • max(),min()求数组中的最大最小数

其他函数

  • is_numeric(),检测变量是否为数字,或纯数字字符串
  • md5(),加密,计算字符串的md5散列值
  • number_format(),格式化输出数字,财务用
  • htmlspecialchars();
  • htmlspecialchars_decode();
  • urlencode($string),对字符进行浏览器地址栏编码
  • urldecode($ue_string),对字符进行浏览器地址栏解码
  • json_encode() & json_decode()
  • gettype(), 获取变量类型

你可能感兴趣的:(学习笔记,php)