PHP常量:

预定义常量:

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

PHP_OSPHP系统。

PHP_VERSIONPHP版本。

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基础语法随记的更多相关文章

  1. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  2. Objective-C基础语法快速入门

    Objective-C基础语法快速入门 2010-11-04 16:32 折酷吧 zheku8 字号:T | T 假如我们对面向对象的思维已经C语言都很熟悉的话,对于我们学习Objective-C将会 ...

  3. ruby基础语法

    首发:个人博客,更新&纠错&回复 学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}. 这种事情毫无技术含量又毫无乐趣可言,但极 ...

  4. JavaScript 正则表达式基础语法

    前言 正则表达式在人们的印象中可能是一堆无法理解的字符,但就是这些符号却实现了字符串的高效操作.通常的情况是,问题本身并不复杂,但没有正则表达式就成了大问题.javascript中的正则表达式作为相当 ...

  5. Python的基础语法(一)

    0. 前言 最近正在重新整理Python的基础知识,以便更好地学习新知识.这一部分主要是讲述Python基础语法的演示.下面的语法都是基于Python3的语法. 1. 注释 注释:Python的注释方 ...

  6. 2-5 vue基础语法

    一.vue基础语法 语法: {{msg}} html赋值: v-html="" 绑定属性: v-bind:id="" 使用表达式: {{ok? "ye ...

  7. 2-Python基础语法-内存管理-运算符-程序控制

    目录 1 Python 基础语法 1.1 注释 1.2 缩进 1.3 续行 1.4 标识符 1.5 转义序列 1.6 数字 1.7 字符串 1.8 其他 2 Python 运算符 2.1 赋值运算符 ...

  8. 1.scala基础语法总结

    Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...

  9. Scala快速入门 - 基础语法篇

    本篇文章首发于头条号Scala快速入门 - 基础语法篇,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的 ...

随机推荐

  1. PYTHON-进阶-ITERTOOLS模块

    PYTHON-进阶-ITERTOOLS模块小结 这货很强大, 必须掌握 文档 链接 pymotw 链接 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总 ...

  2. pyqt5表格qtablewidget

    表格用到控件QTableWidget,还有一个类似的叫QTableView的. 设置单元格里的内容用方法:setItem(0,0,str) 第一个0表示第一行, 第二个0表示第一列, 第三个参数是写入 ...

  3. python的工作记录B

    这次很强了.就差最后一步,判断一下SVN的版本是否是真的库里的. #!/usr/bin/env python # -*- coding: utf-8 -*- import os,sys,command ...

  4. LeetCode_Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  5. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

  6. BZOJ2697: 特技飞行

    2697: 特技飞行 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 607  Solved: 363[Submit][Status] Descript ...

  7. 基于Bootstrap 3.x的免费高级管理控制面板主题:AdminLTE

    AdminLTE 是一个基于Bootstrap 3.x的免费高级管理控制面板主题.AdminLTE - 是一个完全响应式管理模板.基于Bootstrap3框架.高度可定制的,易于使用.适合从小型移动设 ...

  8. 将Maven项目转换成Eclipse支持的Java项目

    当我们通过模版(比如最简单的maven-archetype-quikstart插件)生成了一个maven的项目结构时,如何将它转换成eclipse支持的java project呢? 1. 定位到mav ...

  9. log4j 突然不打印记录,提示:No appenders could be found for logge,处理方法

    log4j 一直都在使用正常,log4j.xml配置.代码都没有修改,突然不打印记录,出现下面提示: log4j:WARN No appenders could be found for logger ...

  10. JavaScript 数组中查找符合条件的值

    数组实例的find方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员.如果没有符合条件的成员,则返回u ...