2,PHP解惑

前段时间买了本《PHP与Mysql高性能应用开发》,有几天晚上睡觉前抽空,把第一章解惑篇看了一遍。
虽说其中一些示例的确存在错误,但并不影响我去汲取此书作者所记载下来的经验。

2,PHP解惑_第1张图片
解惑篇整理.png

我把解惑篇提到的知识点,整理成了一张脑图,接下来我也将对这些知识点,写一写自己的总结。

目录


  • 语法
  • 省略结束标签
  • 引入文件
  • =,==,===
  • HereDoc / NowDoc
  • return / exit
  • goto
  • 函数
  • 传值
  • 引用
  • 简化传参
  • 匿名函数
  • is_callable / method_exists
  • 变量
  • 非空与赋值判断
  • boolean
  • 变量作用域
  • 多维数组排序
  • 超全局数组
  • 静态变量
  • 其他
  • 执行外部程序

语法


省略结束标签

这个问题我也曾思考过,因为看到不少框架都是不带结束标签的。直到现在我才明白,原来纯php代码的话,php解析器本身就支持省略结束标签,这样一来,也能避免一些include等时候出现的奇葩问题。

引入文件

在PHP中,有include、require、include_once、require_once还有autoload的方式来引入PHP文件。
include和require的区别,在于遇到错误时,给出的错误级别。include给出的错误级别是warning,而require则是fatal。
php在默认情况下遇到fatal错误会直接崩了,而遇到warning则会给出提示,继续向下执行(除非向下执行时遇到了fatal错误)
而有无_once的区别,则是引入一份文件,还是多份文件。

很多时候,引入文件失败,很可能是目录权限或路径错误导致。一般都要用error_reporting(0)来抑制错误信息,而程序内部需要做完善的日志系统。

=,==,===

=,赋值符,其结果就是赋值后最终的值,如 echo ($a = 3); 最终会输出 3,前提是$a要先声明。
== ,比较运算符,php是弱类型的,所以只要两个值通过转换,能凑出相等的情况,那它就相等
===,全等,这个就是强类型了,甚至,两个类也可以进行比较,比如说判定你类的结构,实现的接口等

HereDoc / NowDoc

一种允许在代码中嵌入大段文本内容的语法。
它们都使用了定界符

<<<任意文本 
   省略大量文本内容 
同开始标签一样的文本;

注意,结束标签必须顶行写。

HereDoc和NowDoc的效果不同之处在于,是否对文本内的变量进行解析。
HereDoc会对文本变量进行解析,而NowDoc则原样输出。

NowDoc定义与HereDoc定义唯一的不同之处,就在于:开始定界符的文本上要加单引号

return / exit

return,用于从函数或方法内返回一个值到调用处。
exit(die)则是在当前行直接结束整个PHP脚本的生命周期。
不同之处,需要大家自己去体会。

goto

局部跳转,一般不常用。
局部,指的是只能在当前文件和当前作用域之间进行跳转,不能跨方法、跨函数、跨文件,同样也无法跳进任何循环或者switch结构中(但他可以从循环中跳出外面来)




函数


传值

 func_get_arg(0); // 获取传入函数的第一个值
 func_get_arg(1); // 获取传入函数的第二个值
 func_get_arg(); // 获取传入函数的所有值

引用

C和C++中有指针的概念,因为它是一个指向内存地址的变量,所以称之为指针。(变量的值是一个地址)
PHP有 & 引用符,使用引用符的时候,则两个变量共享一个内存地址。对象赋值的时候,都是引用的,除非用clone

简化传参

可以用对象、数组的形式来传递参数

匿名函数

也称为闭包函数、动态函数,是动态创建的,通常用于实现闭包。匿名函数有时候会出现解释出错的情况,这种时候可以把匿名函数变成正常的函数,再继续调试。

is_callable / method_exists

method_exists($object,'method'); // 检测对象中是否存在该方法
method_exists('functionName'); // 检测当前是否存在该函数
method_exists函数只检测是否存在该方法,并不关心当前是否可以调用

is_callable(); // 检测当前条件下是否可以调用

变量


非空与赋值判断

 empty() 是否为空,弱类型,任何可以通过类型转换变成0 '' null false的,都会被认为空
 isset() 是否被赋值,且不为null
 is_null() 是否为null

boolean

通常情况下写大写的TRUE和FALSE

变量作用域

PHP的变量作用域只有两种,全局和局部。
全局为不在任何函数或方法体以内的,局部则是在函数或方法体以内的
局部想要访问全局,要用global
想要在外部访问局部变量,可利用闭包

多维数组排序

uasort函数

超全局数组

$_GET 取得get请求的值
$_POST 取得post请求的值
$_COOKIE 获取当前站点的cookie
$_SESSION 获取当前用户访问的会话文件,每个session都以session_id标识
$_ENV 当前PHP服务器的环境变量
$_SERVER 当前PHP运行的服务器变量,还有一些客户端信息
$_FILES 用户上传文件时提交到当前脚本的参数,这不包含文件
$_REQUEST 包含GET、POST、COOKIE、SESSION
$GLOBALS 包含上面所有数组的内容

静态变量

静态变量存放在内存的静态区,全局变量则存放在全局区,局部变量存在堆栈区。

其他


执行外部程序

$out = `命令`;
echo $out;
这种方式,返回的结果会放在一个数组里面
$out = shell_exec("dir");
这种方式会把返回结果放在一个标量变量中

注意,是``而不是''

本文来自半醒的狐狸博客

你可能感兴趣的:(2,PHP解惑)