当前位置: 首页>后端>正文

PHP学习笔记1

//语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出。

/* 【命名规则】 */

常量名 类常量建议全大写,单词间用下划线分隔? ? // MIN_WIDTH

变量名建议用下划线方式分隔? ? ? ? ? ? // $var_name

函数名建议用驼峰命名法? ? ? ? ? ? ? ? // varName

定界符建议全大写? ? ? ? ? ? ? ? // <<<DING, <<<'DING'

文件名建议全小写和下划线、数字? ? ? ? // func_name.php

私有属性名、方法名建议加下划线? ? ? ? // private $_name _func

接口名建议加I_? ? ? ? ? ? ? ? ? ? // interface I_Name

/* 语言结构 */

array(), echo(), empty(), eval(), exit(), isset(), list(), print(), unset()

echo, print 可省略括号。

/* 预定义常量 */

PATH_SEPARATOR? //路径分隔符(Windows为分号,类Unix为冒号)

DIRECTORY_SEPARATOR //目录分隔符

PHP_EOL //当前系统的换行符

PHP_VERSION //PHP版本号

PHP_OS? //PHP服务操作系统

PHP_SAPI? ? //用来判断是使用命令行还是浏览器执行的,如果 PHP_SAPI=='cli' 表示是在命令行下执行

PHP_INT_MAX? ? ? ? ? ? ? ? ? ? INT最大值,32位平台时值为2147483647

PHP_INT_SIZE? ? ? ? ? ? ? ? ? INT字长,32位平台时值为4(4字节)

M_PI? ? //圆周率值

M_E? ? //自然数

//PHP运行环境检测函数

php_sapi_name() //返回一个PHP与WEB服务器接口类型的小写字符串

该函数返回值与常量PHP_SAPI一致!

接口类型:SAPI(the Server API, SAPI)

可能值:aolserver、apache、apache2filter、apache2handler、caudium、cgi、cgi-fcgi、cli、 continuity、embed、isapi、litespeed milter、nsapi、phttpd、pi3web、roxen、thttpd、tux、webjames

/* 大小写问题 */

- 类名、方法名、属性名、函数名:不区分大小写

- 变量名、常量名、元素下标:区分大小写

/* 可变标识符 */

可变变量? $i = 3; $k = 'i'; echo $$k; //输出3

可变函数? function func() {echo 'hello!';} $i = 'func'; $i(); //输出hello

可变下标? $i = '1234'; $k = 3; echo $i[$k];? //输出4

可变类名? class CLS{public $k = 'hello';} $i = 'CLS'; $j = new $i; echo $j->k;

可变属性? class CLS{public $k = 'hello';} $i = 'k'; $j = new CLS; echo $j->$i;

可变方法? class CLS{public function k(){echo 'hello';}} $i='k'; $j=new CLS; $j->$i();

/* 可变变量 */

* 用于业务逻辑判断得到某些具体信息

? ? $var_name = "class_name";

? ? $$var_name = "PHP0913";? ? ? ? // $class_name = "PHP0913";$class_name已存入内存中

? ? var_dump($class_name);? ? ? ? // var_dump($$var_name);

/* 变量函数 */

get_defined_vars? ? //返回由所有已定义变量所组成的数组(包括环境变量、服务器变量和用户定义的变量)

/* unset() */

* unset()仅删除当前变量名和引用,其值并未被删除

* 引用传递中,删除一个变量及其引用,其他变量及引用均存在,且值依然存在

? ? echo "<br />";

? ? $v3 = '值';

? ? $v4 = &$v3;

? ? unset($v4);

? ? var_dump($v3, $v4);

/* 变量的最长有效期 */

* 当前脚本的执行周期,脚本执行结束,变量即消失

/* 预定义变量/超全局变量 */

$GLOBALS

$_COOKIE

$_ENV

$_FILES

$_GET

$_POST

$_REQUEST

$_SERVER

$_SESSION

/* 常量定义 */

define(常量名, 常量值, [区分大小写参数])? ? ? ? //true表示不区分/false表示区分大小写

const 常量名 = 常量值? ? // 新,建议

常量名可以使用特殊字符

constant($name)? ? ? ? // 获取常量名

? ? ? ? ? ? ? ? ? ? // 例:echo constant('-_-');

/* 常量相关函数 */

defined

get_defined_constants

/* 预定义常量 */

__FILE__? ? ? ? ? ? 所在文件的绝对路径

__LINE__? ? ? ? ? ? 文件中的当前行号

__DIR__? ? ? ? ? ? 文件所在目录

__FUNCTION__? ? ? ? 函数名称

__CLASS__? ? ? ? ? ? 类的名称

__METHOD__? ? ? ? 类的方法名

__NAMESPACE__? ? ? ? 当前命名空间的名称

/* 整型 */

整型占用4字节,共4*8=32位,最大值为2147483647,最小值为-2147483648,最小值的绝对值比最大值的大1

最高为表示正负,1表示负,0表示正

/* 进制转换函数 */

只能十进制与其他进制进行转换,只有六种

转换时,参数应是字符串(即不可含八进制的“0”或十六进制的“0x”)

? ? dec

? ? bin

? ? oct

? ? hex

hexdec()? ? 十六进制转十进制? ? ? ? 也可写hex2dec()

dechex()? ? 十进制转十六进制? ? ? ? 也可写dec2hex()

bindec()? ? 二进制转十进制? ? ? ? 也可写bin2dec()

decbin()? ? 十进制转二进制? ? ? ? 也可写dex2bin()

octdec()? ? 八进制转十进制? ? ? ? 也可写oct2dec()

decoct()? ? 十进制转八进制? ? ? ? 也可写dec2oct()

/* 浮点数 */

浮点数不能比较大小 !!!

几乎所有小数,在保存时都是近似值而不是精确值!

最大值:+/- 1.8E308

PHP所能保存的最长小数位:14位

/* 单引号字符串 */

单引号字符串中,只能转义反斜杠和单引号

/* 双引号字符串 */

只解析字符串一次 !!!

eval? ? 把字符串作为PHP代码执行

大括号包裹变量,可确定变量名界限。如:"aaa{$bbb}ccc"

双引号中可以将ASCII码转换为字符

"\x61" -> a? ? // 字符串中不需0,整型中才是0x前导

"\x49\x54\x43\x41\x53\x54" -> ITCAST

将ASCII转成字符函数chr()

将字符转成ASCII函数ord()

#双引号转义列表

\n 换行

\r 回车

\t 水平制表符

\\ 反斜线

\$ 美元标记

\v 垂直制表符

\e Escape

\f 换页

\" 双引号"

\[0-7]{1,3} 符合该正则表达式序列的是一个以八进制方式来表达的字符?

\x[0-9A-Fa-f]{1,2} 符合该正则表达式序列的是一个以十六进制方式来表达的字符?

/* 定界符 */

herodoc - 功能同双引号,能解析

$str = <<<AAA

字符串内容

AAA;

nowdoc - 功能同单引号,不能解析

只在开始位置有单引号

$str = <<<'AAA'

字符串内容

AAA;

/* 字符串的使用 */

可将字符串当作一个字符的集合来使用,可独立访问每个字符。仅适用于单字节字符(字母、数字、半角标点符号),像中文等不可用

$str = "abcd";

echo $str[3];? // d

echo $str{0};? // a

/* 【类型操作函数】 */

//获取/设置类型

gettype($var) //获取变量的数据类型

settype($var, $type) //设置变量的数据类型

//类型判断

is_int

is_float

is_null

is_string

is_resource

is_array

is_bool

is_object? ? ?

is_numeric? ? ? 检测变量是否为数字或数字字符串

//转换成指定的数据类型

boolval

floatval

intval

strval

//强制转换类型

(int)

(float)

(string)

(bool)

(array)

(object)

(unset) //转换为NULL

(binary) 转换和 b前缀转换? //转换成二进制

var_dump? ? ? ? 打印变量的相关信息。

? ? ? ? ? ? ? ? 显示关于一个或多个表达式的结构信息,包括表达式的类型与值。

? ? ? ? ? ? ? ? 数组将递归展开值,通过缩进显示其结构。

var_export($var [,bool $return]) //输出或返回一个变量的字符串表示

? ? $return:为true,则返回变量执行后的结果

print_r? ? ? ? 打印关于变量的易于理解的信息

empty? ? ? ? ? 检查一个变量是否为空

isset? ? ? ? ? 检测变量是否存在

/* 【流程控制】 */

//if语句的替代语法

if (条件判断) :

? 语句块;

elseif (条件判断) :

? 语句块;

else :

? 语句块;

endif;

//流程控制的替代语法

在嵌入HTML时常用

将 { 换成 : , 将 } 换成 endif; 等

endif

endwhile

endfor

endforeach

endswitch

/* 【switch】 */

switch (条件) {

? case 状态值1:

? ? ? 语句块;

? ? ? [break;]

? case 状态值2:

? ? ? 语句块;

? ? ? [break;]

? case 状态值3:

? case 状态值4:

? ? ? 语句块;

? ? ? [break;]

? default:

? ? ? 语句块;

? ? ? [break;]

}

switch是状态分支,特殊的循环

先计算出状态值,再去与判断数作比较

break退出流程

/* 【for循环】 */

for (条件初始化表达式; 条件判断表达式; 条件变化表达式) {

循环体

}

假设循环体被执行了N次,则

条件初始化表达式被执行1次

条件判断表达式被执行N+1次

条件变化表达式被执行N次

注意:

? ? 1. 循环变量在for语句结束后还可以继续使用,值为第一次失败的值

? ? 2. 循环变量在for循环体内可以使用

? ? 3. 任何条件表达式均可省略,但分号不能省略

? ? ? ? a. 条件初始化表达式被省略时,循环变量被赋值为null,在与条件判断时,

? ? ? ? ? ? 进行类型转换后再比较。也可以在for语句外进行初始化。

? ? ? ? b. 条件判断表达式被省略时,表示循环为真,进入死循环

? ? ? ? c. 条件变化表达式被省略时,可以在循环体内完成

? ? 4. 每个表达式均可由多条语句组成,每条语句之间使用逗号分割

? ? ? ? 如果条件判断表达式由多条语句组成,都会执行,但只有最后一条语句才作为判断条件

? ? 5. for只能遍历数值型索引下标数组

? ? ? ? 数组长度函数:count()

? ? 6. 应该将可以初始化的语句均放在条件初始化表达式内,这样可以省去很多执行次数

/* 【goto】5.3+ 版本 */

用来跳转到程序中的某一指定位置

该目标位置可以用目标名称 加上冒号来标记。

PHP中的goto有一定限制,只能在同一个文件和作用域中跳转,

? ? 也就是说你无法跳出一个函数或类方法,也无法跳入到另一个函数。

? ? 你也无法跳入到任何循环或者switch结构中。

? ? 常见的用法是用来跳出循环或者switch,可以代替多层的break。

可以从循环(switch)中跳出来,但不能从外部跳转进去。而函数或类方法,向外向内均不可。

goto a;

echo 'Foo';

a:

echo 'Bar';

/* 【文件加载】 */

require / include / require_once / include_once

文件载入只是载入目标文件内的代码并执行,与载入的文件类型无关

文件载入属于执行阶段,当执行到require等语句时,才载入该文件的代码,

? ? 编译并执行,然后回到require等语句位置继续执行下面的语句

【注意】

? ? 在载入开始时,先退出PHP模式;

? ? 再载入目标文件代码,执行该代码;

? ? 结束时,再进入PHP模式。

require:处理失败,产生 E_COMPILE_ERROR 错误,脚本中止。

include:处理失败,产生 E_WARNING 错误,脚本继续执行。

#不建议使用require_once/include_once

/* 【相对路径】 */

当前浏览器请求的哪个脚本,当前位置就是属于哪个脚本。

./file 和 file 都表示当前目录下的file文件

file情况(嵌套载入文件时):

如果当前目录没找到该文件就在代码文件所在目录中继续找。

如果当前目录找到有该文件,则不会再在代码文件所在目录去找也不会再加载。

__DIR__? ? 脚本文件所在目录

__FILE__? ? 脚本文件路径

include_path? ? 加载文件查找目录

? ? set_include_path()? 设置include_path,可多个,用字符串作参数

? ? 该函数设置的path只针对该当前文件有效

? ? 该设置只针对查找未直接写文件路径方式有效

? ? 设置新的include_path会覆盖原来的

? ? get_include_path()? 获取当前include_path设置项,无参数

? ? 路径分隔符,在Windows下是分号,在Linux下是冒号

? ? 利用预定义常量 PATH_SEPARATOR 来获得当前的分隔符

如果直接写文件名:

? ? 1. include_path所设置的

? ? 2. 当前目录

? ? 3. 代码所在文件的目录

如果文件名前带有路径,则会直接根据路径查找,include_path直接被忽略

/* 【return】 */

return与require结合,可返回文件的内容,return写在被载入的文件内

return可以终止所在脚本的执行,作为普通脚本语句

return可以返回函数的相应值

/* 【终止和延迟脚本执行】 */

die / exit? 终止

return是终止所在脚本的执行

die和exit会立即终止脚本执行

die("到此为止");? ? 该函数内的字符串可被输出

sleep()? 延迟(单位:秒)

? ? 默认最多可延迟30秒,PHP配置可以修改 max_execution_time

? ? 例:sleep(12);

usleep()? ? 以指定的微秒数延迟执行

time_sleep_until? ? 使脚本睡眠到指定的时间为止

/* 【函数】 */

1. 函数的声明是在编译时,故先定义再调用,定义与调用无先后关系!

2. 文件只是代码的载体,程序均在内存中执行!

3. 如果函数的定义在需要载入的文件内,则需要先载入该文件,否则调用出错!

4. 函数的定义可以出现在其他的代码段中,此时函数不会在编译阶段被执行

? ? 只有被执行到时才会被定义!只有独立定义时才会被编译在内存中!

? ? 如果出现在其他函数体内,也需要外层函数被调用时才被定义并生效!

5. 函数名不区分大小写

6. 不允许重名,包括系统函数

7. 【可变函数】

? ? 函数名可以用其他变量代替

? ? $func_name = "sayHello";

? ? $func_name();? ? ? //此时调用sayHello()函数

? ? 注意:只有在调用时才能使用变量,定义时不允许!

8. 变量可作为函数名调用函数,数组元素值也可以!

9. 形式参数parameter,实际参数argument

? ? 可以对参数传递 null,表示该形参不想传递值

? ? 形参与实参之间既可值传递,也可引用传递。

? ? 引用传递参数,应该在定义函数时就在形式参数前加上 & 符号,而此时调用函数实参必须为变量

? ? 如何选择使用哪种传递方式?

? ? ? ? a. 是否需要保证原始数据的完整性

? ? ? ? b. 是否需要增加效率

? ? ? ? c. 对大数据引用传递可节省内存

10. 参数默认值

? ? ? ? a. 函数的参数默认值必须是已经确定的值,不能是变量!

? ? ? ? ? ? 只要在调用之前定义该常量,则可以使用常量作为参数默认值

? ? ? ? b. 函数默认值可以有多个,建议将有默认值的参数放在参数列表的最后面

? ? ? ? ? 这样可以在调用函数时,不赋予后面有默认值的参数值,否则会出错

? ? ? ? c. 默认参数可以是非标量类型,比如数组、null

? ? ? ? d. 任何默认参数必须放在任何非默认参数的右侧

11. 参数数量

? ? a. 形参数量多于实参数量

? ? ? ? 报告警告级别错误,并以NULL代替

? ? b. 实参多于形参

? ? ? ? 不报告错误,依次为形参赋值

? ? c. 不确定参数数量

? ? ? ? 1) 一个形参都不定义,永远都是实参多于形参

? ? ? ? 2) 【可变数量参数】

? ? ? ? ? ? func_get_args() 获取当前函数被调用时所有实参的值,返回一个所有实参值组成的数组

? ? ? ? ? ? func_get_arg()? 获取某个实参的值,通过索引值标识,e.g: func_get_arg(0)

? ? ? ? ? ? func_num_args() 获取所有实参的数量

12. 【return】返回值

? ? a. 函数只有一个返回值,可以通过返回一个数组来得到类似的结果,但可以有多条return语句

? ? b. return语句会立即中止函数的运行,并将控制权交回调用该函数的代码行

? ? c. 可以返回包括数组和对象的任意类型

? ? d. 函数的返回也分值传递和引用传递(返回的是一个变量才可)

? ? ? ? 1) 默认是值传递方式

? ? ? ? 2) 引用传递方式:

? ? ? ? ? ? - 定义函数时,函数名前加上& 表示该函数可以返回引用

? ? ? ? ? ? - 调用函数时,函数名前加上& 表示取得函数返回的引用

? ? ? ? ? ? ? ? 此时,函数外修改返回值,会修改函数内的该返回变量的值

? ? ? ? ? ? - 如果函数需返回引用,则需要返回一个变量才可以

? ? ? ? ? ? - 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符&

? ? ? ? ? ? ? ? function &returns_reference(){return $someref;}

? ? ? ? ? ? ? ? $newref =& returns_reference();

? ? ? ? 3) 返回引用的作用


https://www.xamrdz.com/backend/3zu1920675.html

相关文章: