php基础知识(很简单一套适合零基础的朋友学习)

时间:2024-01-02 22:14:44

红色的一般都是重点,还有自己的一些废话

运算符

算术运算符: 基本运算(除数不能为0)

比较运算符: 大小比较(类型比较), 如果两个类型不一样,系统会自动转换成统一类型

赋值运算符: 基本赋值和运算赋值(右边是一个计算整体)

逻辑运算符: 是对结果进行运算(逻辑与,逻辑或称之为短路运算)

错误抑制符: 抑制简单错误

连接运算符: 把两边数据当做字符串连接

三目运算符: 简单的if else结构(复合三目运算,内部三目运算用括号包裹)

自操作运算: 前置与后置的区别

位运算符: 按位比较, 计算机码(原码,反码和补码)

$a = 5;

00000000 00000000 00000000 00000101;   //正数: 原码反码补码一样

Var_dump(~$a);

//取反: 什么都反过来

11111111 111111111 111111111 11111010;      //系统内部: 符号位1,认为是负数(补码)

//求反码(符号位不变) -1操作

11111111 111111111 111111111 11111001;      //反码

//求原码(符号位不变)

1000000 000000000 00000000 00000110;   //原码: -6

符号结合的优先级

代码执行结构: 顺序结构(默认的),分支结构,循环结构

分支结构: if分支和switch分支

循环结构: for循环,while循环和do-while循环

循环结构内部控制 : 有时候在循环的内部可能碰到某些特殊情况,需要让循环中止或者终止, 需要使用内部控制语句: continue和break

Continue: 中止,中间停止,以下的内容不再继续,重新开始循环

Break: 终止, 绝对停止, 整个循环结束

不管是continue还是break,不单单只能控制自己的循环,而且还能控制外部循环(前提是被循环包含),可以使用循环层数来控制

Continue/break 循环层数; //循环层数默认是1

模板标签: 用来替换大括号, 为了让代码结构更明显

函数: 实现某个功能的代码集合, 实现代码的复用

函数要素: 关键字,函数名,参数列表(形参和实参),函数体,返回值

参数传值: 值传递(默认的)和引用传递(定义形参的时候指定地址符)


函数

所谓函数就个一个功能,例如计算乘法九九表,这就是一个功能

参数默认值

参数默认值: 在定义函数的时候, 发现参数有可能外部在传入的时候基本一致,使用某个固定的值: 为了给函数调用者提供方便: 可以给形参指定一个默认值,那么当用户在调用函数的时候,如果不给实际参数,那么对应的形参就会使用默认值来进行处理.

Function 函数名(参数名 = 值){

//参数没有真正的值: 形参是在调用的时候才会被赋值

}

如果说一个函数有多个参数,那么有默认值的参数必须放到没有默认值的参数之后,否则没有办法使用默认值.

返回值

Return关键字: return代表返回数据给函数调用处: 代表函数的结束(一定碰到return,函数必然结束)---这里我要解释一下:如果一个函数里面有retur n就会将结果返回给调用处并且不管下面还有什么就直接结束

只要是函数一定有返回值: 但是不一定有return,如果函数没有明确使用return返回值,那么函数执行结束,默认返回NULL

函数体

函数体: 实现函数的核心部分, 可以几乎是任意代码(变量,常量,分支结构,循环结构)

作用域

--作用域要理解清楚什么是全局作用域和什么是局部作用域

PHP作用域: 变量可以被使用的范围(scope)

程序作用域: 全局作用域和局部作用域

全局: 任何地方都可以使用

局部: 只有某个特定的空间内部可以使用

PHP中也有全局作用域和局部作用域

PHP全局: 外部作用域, 凡是在结构(函数和类)的外部

PHP局部: 内部作用域, 只能在结构的内部(特定函数自己)

在不同的作用域中定义的变量也分为两种:全局变量和局部变量

全局变量: 在函数外部定义的变量

局部变量: 在函数内部定义的变量

全局作用域只能访问全局变量; 局部作用域只能访问局部变量

跨”域”访问

希望在局部作用域可以访问全局变量(成立)

方案1: 引用传值

--$GLOBALS这是一个关键字

方案2: 所有的全局变量都会自动收纳到$GLOBALS超全局预定义变量中

超全局: 超越全局, 没有作用域的限制: 可以在函数的内部使用$GLOBALS来访问全局变量

注意: $GLOBALS不是引用全局变量,而是直接代表全局变量: 删除

方案3: 使用global关键字引入全局变量

Global关键字: 在函数内部定义一个与全局变量同名的变量名, 系统会自动尝试去全局作用域中找同名的变量: global只能声明,不能复制

找到: 将全局变量所指向的内存地址赋值给内部定义的同名局部变量(形成引用)

没有找到: 在全局作用域创建一个与局部变量同名的全局变量: 指向同一块内存地址

在全局作用域可以访问局部变量(不成立): 利用了global关键字通过在函数内部创建一个同名的全局变量, 最终访问的是全局变量

静态变量

静态变量: 不是在函数调用的时候初始化的, 而是在函数进行编译的时候就已经初始化(只初始化一次), 函数在调用的过程中,都是直接使用静态变量.

--静态变量有一个非常明显的功能是在跨函数,以后会学到

静态变量关键字:
static

基本语法: 在声明的局部变量之前,加上一个static关键字(static只能修饰局部变量)

静态的原因: 静态变量只会在函数加载到内存的时候直接初始化

匿名函数

匿名函数: 没有名字的函数.

通过变量来保存函数的内存地址

$变量名 = function(参数列表){

//函数体

//返回值

};

使用匿名函数: 通过变量找到函数地址,还必须告诉当前内容是函数,必须当做函数来解析: 系统只要碰到()就认为是函数.

$变量名();     //通过$func找到函数所在地址; 通过()确定当做函数处理

匿名函数的意义

  1. 当做函数的回调函数callback(callable): 很多时候一个函数只能解决一个问题, 需要其他额外的函数来帮助处理,
    利用回调函数(包含匿名函数)
  1. 闭包函数: 函数内部定义了函数,但是内部函数想使用外部函数的局部变量

可变函数

可变函数: 一个变量保存的值刚好是一个函数的名字,那么就可以通过变量直接访问函数,(加())

可变函数通常是作为回调函数实现.

课堂作业: 求1到指定数之间的立方和(回调函数)

伪类型

伪类型: 假的数据类型, 因为数据类型太具体了,有时候需要的并不止是某一种具体的数据类型.

如果是写在参数中,说明参数类型可以是以下类型; 如果是放在函数前,说明函数的返回值是以下类型.

Mixed: 混合的,可以出现多种数据类型

Number: 数值型的, 整型,浮点型和数值型字符串

Callback: 回调函数(必须传入一个自定义函数的名字字符串)

Void: 空,什么都没有

数据类型验证

这个希望你们都记住以后会经常用的上,还有很多这些类型可以上网上下一个php手册

针对每一种数据类型,系统都有函数对其进行类型验证.

is_bool: 判断类型是否是布尔型

is_float: 浮点型判断

is_integer: 整型判断

is_object: 对象判断

is_array: 数组判断

is_string: 字符串判断

is_resource: 资源判断

is_scalar: 标量类型判断(四种基本类型判断)

is_null:    空判断

is_numeric: 数值型判断

Gettype: 获取数据的类型,返回的是类型字符串

Settype: 设置类型,会强制转换数据本身.

数据类型转换

数据类型转换: 数据在某些特定情况下,需要指定的类型才能完成任务, 但是数据本身可能不属于指定的数据类型: 需要将类型进行转换.

PHP数据类型转换分为两种: 自动转换和强制转换

自动转换

系统在判断的时候会自动的去确定数据类型,凡是不合理的地方都会进行自动的转换.

碰到条件判断: 系统会自动转换成布尔结果

碰到.运算符: 系统会自动将数据转换成字符串

碰到算术运算符: 系统会自动将数据转换成数值

字符串转数值的规则

  1. 以数字开头的会保留所有的数字,如$a2
  2. 以小数点开始的,会保留一个小数及之后数字,如$a3和$a4
  3. 如果以字母开头,结果为0

强制转换

有时候为了数据的使用方便: 严谨的程序猿不喜欢被自动转换, 需要所有的东西都在自己的控制之内, 需要手动根据需求去转换数据类型.

强制转换的语法: 不会使用settype转换的不止是类型,会改变值.

(目标类型)变量;

Int

Integer: 整型转换

Bool

Boolean: 布尔转换

Float: 浮点转换

String: 字符串转换

Array: 数组转换

Object: 对象转换

文件包含

文件包含: 在一个文件中,将另外一个文件的内容取出来放到加载(包含)文件的位置

文件包含意义

本质就是一个意义: 实现代码的复用

  1. 文件包含适用于HTML的布局
  1. 实现PHP代码的复用: 将PHP的代码进行逻辑上的分离,为了更好的维护

文件包含实现

将另外一个文件里面的内容获取过来.

PHP提供了很多方式: include和include_once, require和require_once

四个的使用语法都一样(完全一样)

Include ‘文件路径’ /(‘文件路径’);

文件包含原理

文件的独立存在进行编译

文件包含使用

在PHP中将文件包含作为两种使用方式: 向上包含和向下包含

向上包含: 在所有代码还没有开始写之前,先加载别的文件: 目的是为了使用被包含文件中的内容(结构)

向下包含: 自己已经拥有了很多内容, 在定义完内容(结构)之后,加载别的文件: 目的为了在别的脚本中使用自己的内容.

文件包含形式的区别

Include和include_once, require和require_once

Include和include_once的区别: include_once只包含一个文件最多一次,include会多次重复包含.

Include重复加载

Include_once重复加载

Include与require的区别: 本质上没有区别,都是加载文件: 区别在于当被加载的文件不存在的时候,对于错误的处理态度不一样

Include会给出警告,不影响脚本执行

Require会给出致命错误,终止脚本执行

文件路径

任何文件在进行包含的时候都必须指定路径

路径分为两种: 绝对路径和相对路径

绝对路径: 从磁盘根目录开始的路径(一定能找到)

D:/server/apache/htdocs/20150920/demo10_include.php

相对路径: 相对当前被访问的文件所在的文件夹的路径

./: 当前文件所在目录

../: 当前文件所在目录的上级目录

/: 网站URL中,表示网站根目录

默认的,不指定任何内容,直接使用文件名,系统也认为是当前文件所在的目录

相对路径改变

在任何一个系统(windows和linux)的文件夹下都有两个看不到的文件(. 和 ..), .代表当前目录, .. 代表上级目录.

如果当一个文件使用./和../进行文件包含的时候, 这个时候又被另外一个文件包含, 自己的相对路径.和..就会变成别人的相对路径.和..

解决方案1: 不用使用./和../作为相对路径的检索

解决方案2: 使用绝对路径

解决方案3: 所有的文件都放在同一个文件夹

系统函数

讲一些常用的系统函数

将系统函数分成了三类来讲: 字符串相关函数, 数学相关函数和时间日期相关函数.

字符串函数

不解释:这些经常用的

Strlen: 字符串的长度(PHP中基本上是以字节为单位)

Substr: 字符串截取

Substr(要截取的字符串,截取的起始位置[,截取长度]);
//不指定长度截取到最后

Strtolower: 全部小写

Strtoupper: 全部大写

Ucfirst: 首字母大写

Strrev: 字符串反转(中文不能反)

Strpos: position位置,获取某个字符串在目标字符串中的位置(从左边开始)

Strrpos: 从右边开始

Strchr: 字符串截取,不同于substr的是直接截取到最后(从左边开始)

strrchr(获取文件后缀名): 从右边开始

Trim: 默认的取出字符串两边的空格, 也可以去除两边的指定字符串

Str_repeat: 重复输出某个数据

时间日期函数

Time: 获取一个当前时间的时间戳,从格林威治时间开始

时间戳指的是当前每时每刻的时间

Date: 将一个时间戳转换成指定格式的时间,如果不指定时间戳,就是当前时间

在date函数的第一个参数里植入对应的占位符, 系统只会解析占位符,其他的正常保留

Strtotime: 将一个时间字符串(可以是英文描述)转换成时间戳

Microtime: 获取一个微秒时间

数学函数

Abs: 绝对值

Floor: 向下取整, 获取一个比当前数值小的最大整数

---例如:3.1取到3;意思是要取到比3.1小的整数

Ceil: 向上取整, 获取一个比当前数值大的最小整数

--相反---例如:3.1取到3;意思是要取到比3.1小的整数

Round: 四舍五入

Rand: 获取一个指定区间的随机整数  --给你一个区域,自动抽取

mt_rand: 获取一个指定区间的随机整数

作业:

  1. 打印菱形: 函数实现, 可以随意控制层级

*

***

*****

***

*

  1. 打印空心菱形

*

* *

*  *

* *

*

1, 2题代码在下面,--我做的不一定是好的我只是实现的功能给你参考而已

  1. 根据代码画内存图

<?php

Function display(&$name,$age = 10){

Static $count =
0;

$name = ‘mark’;

Unset($age);

Echo ++$count;

}

Display();

Display();

?>

需求: 求1到指定数之间的立方和(回调函数)

求立方

求和: 将所有的数的立方累加起来: 用到已经定义的好外部的求立方的函数

菱形:

function sum($book){

for($i=1;$i<$book;$i++){

for($k=$book;$k>=$i;$k--){

echo
"&nbsp;";

}

for($j=1;$j<=$i;$j++){

echo
"\t"."*";

}

echo
'<br/>';

}

for($i=$book;$i>0;$i--){

for($k=$book;$k>=$i;$k--){

echo
"&nbsp;";

}

for($j=0;$j<=$i-1;$j++){

echo
"\t".'*';

}

echo
'<br/>';

}

}

sum(35);

一般2个for循环语句一个控制行一个控制列

空心菱形:

function
display($sum=6){

for($i=1;$i<$sum;$i++){

for($k=$sum;$k>=$i;$k--){

echo
"&nbsp;";

}

if($i>2){

//echo
"<br\>";

echo
'*';

for($j=1;$j<=$i;$j++){

echo
"&nbsp;"."\t";

}

echo
'*';

echo
'<br/>';

}
else{

for($j=1;$j<=$i;$j++){

echo
"\t".'*';

}

echo
'<br/>';

}

}

for($i=$sum;$i>0;$i--){

for($k=$sum;$k>=$i;$k--){

echo
"&nbsp;";

}

if($i>2){

echo
"*";

for($j=0;$j<=$i-1;$j++){

echo
"\t".'&nbsp;';

}

echo
"*";

echo
'<br/>';

}else{

for($j=0;$j<=$i-1;$j++){

echo
"\t".'*';

}

echo
'<br/>';

}

}

}

display(15);