Heim  >  Artikel  >  Backend-Entwicklung  >  PHP基础语法知识

PHP基础语法知识

WBOY
WBOYOriginal
2016-08-08 09:33:101242Durchsuche

PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。

PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

PHP常量:

预定义常量:

PHP自身也定义了大量的预定义常量,可以使用get_defined_constants()来查看,比较常用的预定义常量有:

PHP_OS:PHP系统。

PHP_VERSION:PHP版本。

PHP_EOL:换行符(跨平台移植型,很重要),会根据不同的操作系统使用不同的值。不同操作系统换行符不同。 window: \r\n   *nix: \n  MAC: \r

PHP_INT_MAX:整形的最大值。

PHP_INT_SIZE:整形占用的字节数。

PATH_SEPARATOR:环境变量中路径与路径间的分隔符。

DIRECTORY_SEPARATOR:目录分隔符。window下 '\' 和 '/'都可以, *nix只能使用'/'。

魔术常量:

形似常量,实非常量,语法上类似常量,称之为魔术常量!

__FILE__:完整的文件路径和文件名。典型的应用(项目代码)如:

define('ROOT_PATH',str_replace('7.php','',__FILE__));

echo ROOT_PATH;

结果等同(__DIR__,该常量在PHP5.3新增)

 

__FUNCTION__:获得当前的函数名的魔术常量!

 

PHP进制的转换

在PHP中,提供了一系列函数进制的转换:

hex:16进制;dec:10进制;oct:8进制;bin:2进制。

如:decbin(),将10进制数转换2进制数;octhex()将8进制转换成16进制。

 

对于整形,一旦数值过大,不会溢出,而是发生类型转换,会转成浮点型。

php不支持无符号整型。

如:

$a = PHP_INT_MAX;  //2147483648

$b = $a+1;

var_dump($b);   //float

 

在php中,float,double 实际上是相同的。浮点数具有14位十进制数字的精度,最大值 和平台相关,通常是 1.8e308。浮点数的比较是不靠谱的。在编写程序的时候,不要试图通过比较两个浮点数是否相等来获得业务逻辑。

 

字符串的定义方式

有四种方式来定义字符串:双引号,单引号,heredoc(定界符),nowdoc(定界符)

双引号可以解析变量,单引号不能解析变量。单引号可以包含双引号,双引号可以包含单引号,但是引号不能包含引号自身。

变量能不能解析,不是取决于变量被哪一个包含,而是取决于定义字符串是单引号还是双引号,如果是双引号,则变量解析,如果是单引号,则不解析。

在字符串中,如果有{$ 连在一起的时候,就表示{}当中的这个作为一个变量进行解析。

 

变量被认为NULL的情况

1.被赋值为 NULL

2.尚未被赋值

3.被unset()

最常见的一个应用就是将对象的值赋值为NULL,以销毁该对象。

 

数据类型相关函数

var_dump():打印变量的详细信息,包括类型和值。

gettype():获得类型。

settype():设置类型。

is系列:其中is_array()会经常用到。

isset():检查一个变量是否存在(设置)。

empty() : 检查一个变量是否为空.

对于isset()而言,只要有声明过(有值),不管他的值是什么,都返回true.

对于empty()而言,相当于boolean(变量),然后再来取反.

 

转换成布尔型被认为是FALSE的情况

1.布尔值 FALSE 自身

2.整型值 0 (零)

3.浮点型值 0.0 (零)

4.空字符串, 以及 字符串 "0" (注意"00"、"0.0"被认为是TRUE)

5.空数组

6.特殊类型 NULL (包括尚未设定的变量)

所有其它值都被认为是 TRUE(包括对象和资源)。

PHP的运算规则

除法运算的结果,可能是浮点数,也可能是整数。

在取模运算中,如果有小数,则会去除小数部分。

在取模运算中,结果的正负取决于第一个数。

 

原码

将十进制转成的二进制。用最高位表示符号位,0表示正数,1表示负数。

反码

对于正数,反码和原码相同

对于负数,符号位不变,其它位取反。

补码

对于正数,补码和原码相同

对于负数,在反码的基础上 + 1。

 

转码的时候符号不变,运算的时候符号位参与运算,

移位运算

右移:低位溢出,符号位不变,高位用符号位补全 (相当于除以2的n次幂,然后取整)

左移:高位溢出,符号位不变,低位补0 (相当于乘以2的n次幂)

不管是左移还是右移,它只会改变该数的大小,不改变符号,所以在移位操作的时候,符号位始终是不变的。

PHP运算符号优先级

and or 和 && ||的区别。

用法相同,优先级不同。  && 、|| > = > and 、 or

 

break:终止,当执行到break时,整体的循环循环语句直接结束。

continue:继续,当前循环体结束执行,而继续执行下次循环体。

include和require

设置include_path的值

使用函数set_include_path()。

set_include_path('d:/php/test');然后直接require 'file.php',

注意:在设置时,后设置的会将前面设置的覆盖掉!

取得当前的include_path的值

利用函数:get_include_path()可以获得当前的include_path的值!

目录之间采用分号连接.

set_include_path('d:/php/test'.PATH_SEPARATOR.get_include_path());

 

PHP对代码的编译时已源文件为单位的,当前文件如果有语法错误,php会报错。不会执行代码编译处理。

 

require(require_once)和include(include_once)的区别

在载入文件失败时,对文件的依赖不同,触发的错误不一致!级别不同。

require(require_once):会触发一个 致命错误,导致脚本终止;

include(include_once):会触发一个 警告错误,脚本继续运行。

require(include)和require_once(include_once)的区别:

带once指的是加载一次。在执行加载时,带once的会先对当前文件是否已经加载的了该文件做一判断。

已经加载:不会再次加载

没有加载:执行加载!

使用尽量使用require即可。

控制脚本执行

终止脚本执行和延迟脚本执行。

die(),exit():终止脚本执行,一旦出现,脚本立即终止,结束所有执行。并且可以在结束前输出一段字符串。

sleep():延迟脚本执行,暂停一段时间,以秒为单位。最大执行周期为30秒,可以被配置,在php.ini文件中 max_execution_time = 30

 

如果在参数列表内,有部分参数存在默认值,但是部分不存在,则将有默认值的参数放在形参列表后边完成。

func_get_args():得到函数内的所有实参。

 

$GLOBALS:预定义变量

专门为用户数据超全局化的一个预定义变量。

不同于其他的超全局变量:

每个全局变量,自动地 与 $GLOBALS内的一个元素相对应。

增加一个全局变量,则自动在$GLOBALS内增加一个同名元素!反之亦然!

$v1 = 10;

var_dump($GLOBALS['v1']);

 

$GLOBALS['v2'] = 20;

var_dump($GLOBALS['V2']);

global的作用是

声明一个局部变量,并将其初始化为同名全局变量的一个引用!

 

匿名函数的作用

典型的匿名函数可以作为临时函数来使用。例如,有些内部函数,需要调用某个函数来完成操作!像:array_map():返回数组 = array_map('函数',数组); 对某个数组内的所有元素利用提供的函数做操作!

凡是参数需要 callback(callable)地方,都是通过传递匿名函数完成!

PHP数组指针问题

指针函数

php有:获得指针指向的数组元素的键和值的能力!利用函数:

current(),获得当前元素的值

key():获得当前元素的键。如果指针已经非法,返回NULL。用来判断是否存在元素了

还应该有:将指针移动的能力!

next():可以完成指针的移动!

 

数组函数:

range():可以得到某个范围内的元素数组。

array_merge('$arr1','$arr2',...):数组合并,合并多个。

下标重复会怎么样?

数值索引:完全重新索引!

字符下标:后出现的元素值会覆盖前面的元素值!

array_rand(数组,个数):随机地从数组内取得元素,取得是下标!如果多个,返回随机下标的集合!结果是被排序之后的,从小到大!

shuffle(&$arr):打乱数组内元素的顺序。注意,参数为引用传递!会打乱原数组。

键值操作:

array_keys(): 取得所有的键。

array_values():取得所有的值。

in_array():是否存在某个值。

array_key_exists():某个键是否存在。

array_combine('键数组','值数组'): 利用两个数组合并成一个数组,其中一个作为键,另一个作为值!

array_fill('第一个索引值','数量','值'):填充数组。

数组 = array_fill(起始下标,填充的元素个数,填充的值);

array_chunk():拆分数组,原则是子数组内的元素个数!

array_intersect($arr1, $arr2):计算两个数组的交集,找到在$arr1中存在,并也在$arr2中存在的元素,数据是出现在第一个参数中的。

array_diff($arr1, $arr2):计算两个数组的差集。找到在arr1中存在,但是在arr2中不存在的元素!

数组模拟栈和队列:

桟 和 队列 都是典型数据结构,都是 list 列表的一种。

入栈:array_push(),在数组的尾端将数据压入数组。

出栈:array_pop(),在栈顶输出元素。

array_push()与array_pop()会重新索引,保证所有的元素都是由0开始的逐一递增。

入队:array_push(),在数组的尾端将数据压入数组。

出队:array_shift(),在数组的顶端,将数据取出。

array_unshift(),可以将数据由数组的顶端压入数组。

数组排序函数

排序函数都是引用传值!

r:reverse,反转 。a:association,关联。u:user,用户自定义。

sort('数组'):          按照值,升序,不保持键值关联。

rsort('数组'):        按照值,降序,不保持键值关联。

asort('数组'):       按照值,升序,保持键值关联。

arsort('数组'):      按照值,降序,保持键值关联。

ksort('数组'):       按照键,升序,保持键值关联。

krsort('数组'):      按照键,降序,保持键值关联。

natsort('数组'):   自然数排序,可以利用计算出来的自然数,对数据进行排序!

usort('数组'):       自定义排序,用户自定义的元素之间的大小关系。用户提供一个比较两个元素大小的函数,并可以告知php元素的大小关系。用户所定义的函数,负责告知usort()两个元素之间的大小关系,而usort得到关系之后,负责完成排序!利用返回值告知!

升序的返回效果:

返回负数,表示第一个元素小;

返回正数,表示第一个元素大;

返回0,表示相等。

以上就介绍了PHP基础语法知识,包括了PHP语法方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP 类的静态变量 索引Nächster Artikel:PHP设计模式(一)