欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP 学习笔记

程序员文章站 2022-06-21 23:46:15
前言 虽说已经工作,并且也做了两个项目,但总觉得自己的基础知识不牢固,所以从头开始学起。学习过程中的一些代码已上传到 "Github" 和 "码云" 基础知识 认识 PHP 略。。。 安装与配置 略。。。 语言基础 标记风格 XML 风格 脚本风格 简短风格 ASP 风格 如果使用简短风格和 ASP ......

前言

虽说已经工作,并且也做了两个项目,但总觉得自己的基础知识不牢固,所以从头开始学起。学习过程中的一些代码已上传到 github

基础知识

认识 php

略。。。

安装与配置

略。。。

语言基础

标记风格

xml 风格

<?php
    echo "这是 xml 风格";
?>

脚本风格

<script language="php">
    echo "这是脚本风格";
</script>

简短风格

<? echo "这是简短风格"; ?>

asp 风格

<%
    echo "这是 asp 风格";
%>

如果使用简短风格和 asp 风格,需要在 php.ini 中进行设置,将 short_open_tag 和 asp_tags 设置为 on,重启 apache 服务器

推荐使用 xml 风格

注释

单行注释

  • c++ 风格(//)
<?php
    // 单行注释
?>
  • shell 风格(#)
<?php
    # shell 风格的单行注释
?>

多行注释

<?php
    /*
    	多行注释
    	多行注释
    	多行注释
    */
?>

单行注释中不允许出现 ?> php 结束标签

多行注释中不允许出现 */ 多行注释结束标签

数据类型

php 中数据类型可以分为三类:标量类型复合类型特殊类型

标量类型

布尔类型

布尔类型只有两个值:真(true),假(false),通常使用在条件控制循环控制语句的条件表达式中

php 中可以自动转换为假(false)的值:0, 0.0, "0", "", []

字符串类型

字符串就是连续出现的字符序列。php 支持四种定义字符串的方式:单引号('),双引号("),heredoc 语法结构,nowdoc 语法结构

  • 单引号
<?php
    echo '字符串';
?>
  • 双引号
<?php
    echo "字符串";
?>

如果字符串包含在双引号(")中,可以对变量和一些特殊字符进行解析

# 含义
\n 换行(new line)
\r 回车
\t 水平制表符
\v 垂直制表符
\e escape
\f 换页
\\ 反斜线
\$ 美元符号
\' 单引号
\" 双引号
...

\r 和 \n 在 windows 中的对比效果不明显,在 linux 中,\n 表示换到下一行,但不会回到行首;而 \r 表示光标回到行首,但仍在本行

  • heredoc 语法结构
<?php
    <<<eod
这是 heredoc 语法结构
eod
?>
  • nowdoc 语法结构
<?php
    <<<'eod'
这是 nowdoc 语法结构
eod
?>

heredoc 和 nowdoc 语法结构和双引号与单引号的关系类似,heredoc 可以解析上面列出的特殊字符,nowdoc 不可以。heredoc 语法结构和 nowdoc 语法结构的结束标识符必须在行首。

整型

在 32 位操作系统中,有效的数值范围的 -2147483648~2147483647(书上这么写的),在 php7 (不要问我为什么是 php7,因为我用 php7 测试的)中可以使用 php_int_maxphp_int_min 来获取范围的最大最小值。整型可以使用十进制、二进制、八进制、十六进制来表示,使用八进制,需要在数字前面加上0,使用十六进制需要在数字前面加上0x。

  • 十进制
<?php
    echo 123;	// 正数
    echo -123;	// 负数
?>
  • 二进制
<?php
    echo 0b10011;
?>
  • 八进制
<?php
    echo 0123;
?>

在八进制中,如果出现非法数字 8,9这些,程序会报错(php7 中是这样)

  • 十六进制
<?php
    echo 0x123;
?>

整数溢出

如果给定一个数超出了 integer 的范围,会被解释为 float。

不要将未知分数强制转换为 integer

<?php
    echo (int)( (0.1 + 0.7) * 10 );		// 结果是 7
?>

浮点类型

浮点类型默认有两种格式,标准格式的科学记数法格式

<?php
    $float  = 3.1415;
    $float2 = -23.3;
    $float3 = 2.34e2;

    echo pi();			// 圆周率
?>

浮点型数值只是一个近似值,要尽量避免浮点数比较大小

复合数据类型

数组 array

数组的定义:

<?php
    $arr = array(
        $key => $val,
        ...
    );
    // 或
    $arr = [
        $key => $val,
        ...
    ];
?>

数组的取值:

<?php
    echo $arr[$key];
?>

数组 key 的强制转换

  1. 包含合法的十进制整数值的字符串会被转换成整数值,例如 "3" 会转换成 3,而 "03" 则不会转换成 3
  2. 浮点数也会强制转换为整型,方式为向下取整,例如 2.3 会转换成 2
  3. 布尔值中 true 会转换为 1,false 转换为 0
  4. null 会转换为空字符串""

如果在数组中定义了相同的键名,只使用最后一个

对象 object

类的实例,使用 new 关键字创建。

<?php
    class foo
    {
        protected $name = 'class';
    
        public function show()
        {
            echo $this->name;
        }
    }

    $obj = new foo();		// 这是的 obj 就是一个对象,是从 foo 这个类实例化来的
?>
特殊数据类型

资源类型 resource

手册上解释的是:它是保存了外部资源的一个引用。

null

表示一个变量没有值,以下情况会被认为是 null

  • 被赋值为 null
  • 变量未赋值
  • 被 unset()
数据类型转换
转换操作符 转换类型
(boolean) 布尔类型
(string) 字符串类型
(integer)/(int) 整型
(float) 浮点型
(array) 数组
(object) 对象
(unset) null(php5)

还可以使用 settype(mixd var, string type) : boolean 函数对类型进行转换,第一个参数是要转换的变量,第二个参数是要转换的类型,支持:boolean, float, integer, array, null, object, string。转换成功返回 true,失败返回 false。

检测数据类型

php 中内置了检测数据类型的系列函数,判断一个变量是否属于某个类型,是的话返回 true,不是返回 false。

函数 检测类型
is_bool(mixed var) : boolean 布尔
is_string(mixed var) : boolean 字符串
is_float(mixed var) : boolean/is_double(mixed var) : boolean 浮点型
is_integer(mixed var) : boolean/is_int(mixed var) : boolean 整型
is_null(mixed var) : boolean null
is_array(mixed var) : boolean 数组
is_object(mixed var) : boolean 对象
is_numeric(mixed var) : boolean 数字或由数字组成的字符串

php 常量

常量是一个简单的标识符,在脚本运行期间不允许改变。

常量的定义

使用 define() 函数,语法格式:

define(string constant_name, mixed value, boolean case_sensitive = false);

define() 函数说明:

参数 说明
constant_name 必须,常量名
value 必须,常量值
case_sensitive 可选,指定是否大小写敏感,默认为 false,表示敏感

常量的取值

一是直接使用常量名取值,另一种是使用 constant() 函数取值。

判断一个常量是否已经定义

使用 defined() 函数判断一个常量是否已经定义,如果定义了则返回 true,否则返回 false。

php 中常用的预定义常量

常量名 功能
__file__ php 程序文件名
__line__ 当前所在行
php_version php 版本
php_os 执行 php 解析器的操作系统 eg. winnt
e_xxx php 的错误调试部分,参考 error_reporting() 函数

php 变量

变量是在程序执行过程中可以变化的量,用一个美元符号后面跟上变量名表示,区分大小写。

变量声名

变量名必须以字母或下划线开头,后面跟上数字、字母、下划线,不能包含特殊符号,也不能以数字或其它特殊符号开头。变量可以是中文,但不建议使用。

$this 是一个特殊的变量,不能被赋值

<?php
// 变量的声明
$foo  = 'variable';
$foo1 = 'var';
// $1_a = '1a';                 // 变量名不合法
// $@abc = 'abc';               // 变量名不合法
$var  = $foo;                   // 使用 $foo 给变量 $var 赋初值
$var2 = &$foo;                  // 引用赋值
$var2 = 'var2';                 // 改变 $var2 的值
var_dump($foo);                 // $foo 的值也会改变
var_dump($var);                 // $var 的值还是 variable
?>
变量作用域

变量必须在有效的范围内使用,超出变个范围,变量就失去的意义。

全局变量不能被函数直接使用,如果要使用,必须在函数中声明为 global

// 变量作用域
$a = 1;
function test()
{
    echo $a;                    // 这里不会有任何输出,调用的局部的变量 $a
    var_dump($a);               // 打印结果显示 null
}
test();

// 全局变量在函数内部使用的时候,必须使用 global 
$b = 2;
function test2()
{
    global $b;                  // 声明为 global
    echo $b;                    // 结果为 2
}
test2();

// 使用 $globals 代替 global
$c = 3;
function test3()
{
    $globals['c'] = 5;          // 使用 $globals 代替 global
}
test3();
echo $c;                        // 显示结果为 5

一般来说,在函数中声明的变量,在函数运行结束时,就会自动被清除掉,使用静态变量则会被保留。

// 静态变量
function static_var()
{
    static $d = 1;
    echo $d++;
}
static_var();                   // 显示 1
static_var();                   // 显示 2
可变变量

用一个变量的值,作为另一个变量的变量名。

// 可变变量
$e = 'f';                       // 变量值为 f
$$e = 'i am f';                 // 相当于 $f = 'i am f';
echo $f;
预定义变量
// 预定义变量
dump($globals);             // 全局作用域中全部变量
dump($_server);             // 服务器和执行环境信息
dump($_get);                // http get 变量
dump($_post);               // http post 变量
dump($_files);              // http 文件上传变量
dump($_request);            // http request 变量
dump($_session);            // session 变量
dump($_cookie);             // cookies
dump($_env);                // 环境变量
dump($php_errormsg);        // 前一个错误信息
dump($http_raw_post_data);  // 原生 post 数据
dump($http_response_header);// http 响应头


function dump($var)
{
    echo '<pre>';
    print_r($var);
    echo '</pre>';
}

运算符

运算符是可以通过给出的一个或多个值,得出另一个值的东西。

运算符优先级

从上到下,优先级降低。

运算符 结合方向
clone, new
**[乘方运算符]
++, --, ~[取反减1], (int), (float), ..., @
instanceof
!
*, /, %
+, -, .
<<, >>
<, <=, >, >=
==, !=, ===, !==, <>[相当于是 !=], <=>[a <=> b,如果a > b,返回1,相等返回0,否则返回-1]
&[按位与]
|
&&
//
??

  1. 按位异或