【精粹系列】PHP精粹
点击关注微信公众号 wenyuqinghuai
分享提纲:
2.10 调试技巧
1. 概述
关于PHP整理的需要记忆和熟练掌握的内容
2. 精粹内容
2.1)【语言结构】
- eval(): eval() 函数把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾(详见 http://www.w3school.com.cn/php/func_misc_eval.asp)
2.2)【大小写问题】
- - 类名、方法名、属性名、函数名:不区分大小写
- - 变量名、常量名、元素下标:区分大小写
2.3) 【变量函数 】
- get_defined_vars //返回由所有已定义变量所组成的数组(包括环境变量、服务器变量和用户定义的变量)
2.4)【常量相关函数】
- defined
- get_defined_constants
2.5)【字符串的使用】
- 可将字符串当作一个字符的集合来使用,可独立访问每个字符。仅适用于单字节字符(字母、数字、半角标点符号),像中文等不可用
- $str = "abcd";
- echo $str[3]; // d
- echo $str{0}; // a
2.6)【函数】
- 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) 返回引用的作用
- 13)PHP Math 函数
- 1)decbin() 函数把十进制转换为二进制
- 2)pow() 函数返回 x 的 y 次方。
- 3)abs() 绝对值。
- 4)bindec() 把二进制转换为十进制
- 5)ceil() 向上舍入为最接近的整数
- 6)floor() 向下舍入为最接近的整数。
- 7)max() 返回最大值
- 8)min() 返回最小值
- 9)rand() 返回随机整数
- 10)round() 对浮点数进行四舍五入
函数
2.7)【数据库操作】
- #连接认证
- mysql_connect 连接并认证数据库
- #发送SQL语句,接收执行结果
- mysql_query 发送SQL语句
- 仅对select, show, explain, describe语句执行成功返回一个资源标识符,其他语句成功返回true。执行失败均返回false。
- #处理结果
- mysql_fetch_assoc 从结果集中取得一行作为关联数组
- 每次只取回一条,类似each
- 结果集中记录指针
- mysql_fetch_row 从结果集中取得一行作为枚举数组
- mysql_fetch_array 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
- array mysql_fetch_array ( resource $result [, int $ result_type ] )
- 可选参数result_type可选值为:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH(默认)
- mysql_free_result 释放结果内存
- #关闭链接
- mysql_close 关闭连接
2.8)【自动加载对象】
- - 在试图使用尚未被定义的类时自动调用 __autoload 函数
- - 自动加载使用到的类名文件(根据类名找相应名称的文件,故需类名与类文件名一致)
- - 每个需要加载类的文件都需要存在__autoload函数
- - 将__autoload函数写入单独的文件,每个需要用到类的文件再require该函数文件
- - __autoload 参数是类名
- function __autoload($class_name) {
- require_once $_SERVER["DOCUMENT_ROOT"] . "/class/$class_name.php";
- }
- // $_SERVER["DOCUMENT_ROOT"] 当前运行脚本所在的文档根目录
- - 可以通过类名,来推导出类所在的文件名!
- - 如果一个项目存在多个自动加载函数时,定义一个可以完成加载的普通函数,并在函数之前使用spl_autoload_register注册该函数。
- # spl_autoload_register
- - 注册__autoload()函数
- bool spl_autoload_register ([ callback $autoload_function ] )
- - 可以注册多个自动加载函数,先注册的先执行
- - 一旦注册自动加载函数,__autoload就失效。
- - 注册函数时,参数为函数名(注意加引号);注册方法时,参数为数组
- # 注册类或对象的方法为自动加载方法时,参数需为数组:
- spl_autoload_register(array(__CLASS__, '__autoload'));
- __CLASS__表示当前类名,若是对象可用$this,详细见手册
2.9)【魔术方法】
- __construct 构造方法
- __destruct 析构方法
- __clone 克隆对象
- __sleep 序列化对象
- __wakeup 反序列化对象
- __autoload 自动加载,使用类但未找到时
- __toString 对象被当作字符串使用时
- __invoke 当尝试以调用函数的方式调用一个对象时
2.10)【重载 overload】
- 指动态地"创建"类属性和方法
- 用户可以自由的为对象添加额外的属性,该特性就是重载。
- 所有的重载方法都必须被声明为public。
- 当调用当前环境下未定义或不可见的类属性或方法时,重载方法会被调用。
- 重载相关魔术方法的参数都不能通过引用传递。
- # 属性重载
- - 处理不可访问的属性
- 属性重载只能在对象中进行。
- # 属性重载对于静态属性无效
- 在静态方法中,这些魔术方法将不会被调用。所以这些方法都不能被声明为static。
- __set 在给不可访问的属性赋值时
- public void __set(string $name, mixed $value)
- 作用:批量管理私有属性,间接保护对象结构
- __get 读取不可访问的属性的值时
- public mixed __get(string $name)
- __isset 当对不可访问的属性调用isset()或empty()时
- public bool __isset(string $name)
- __unset 当对不可访问的属性调用unset()时
- public void __unset(string $name)
- # 方法重载
- - 处理不可访问的方法
- __call 当调用一个不可访问的非静态方法(如未定义,或者不可见)时自动被调用
- public mixed __call(string $name, array $arguments)
- __callStatic 当在调用一个不可访问的静态方法(如未定义,或者不可见)时自动被调用
- public static mixed __callStatic(string $name, array $arguments)
- # $name参数是要调用的方法名称。$arguments参数是一个数组,包含着要传递给方法的参数。
2.11)【类与对象相关函数】
- class_alias([$original [,$alias]]) 给类取别名
- class_exists($class [,$autoload]) 检查类是否已定义
- interface_exists($interface [,$autoload]) 检查接口是否已被定义
- method_exists($obj, $method)检查类的方法是否存在
- property_exists($class, $property) 检查对象或类是否具有该属性
- get_declared_classes(void) 返回由已定义类的名字所组成的数组
- get_declared_interfaces(void) 返回一个数组包含所有已声明的接口
- get_class([$obj]) 返回对象的类名
- get_parent_class([$obj]) 返回对象或类的父类名
- get_class_methods($class) 返回由类的方法名组成的数组
- get_object_vars($obj) 返回由对象属性组成的关联数组
- get_class_vars($class) 返回由类的默认属性组成的数组
- is_a($obj, $class) 如果对象属于该类或该类是此对象的父类则返回TRUE
- is_subclass_of($obj, $class) 如果此对象是该类的子类,则返回TRUE
- get_object_vars($obj) 返回由对象属性组成的关联数组
2.12)【调试技巧】
- -- 使用 debug_print_backtrace()函数可以打印出程序的调用栈
-- Xdebug也是一个不错的调试工具
【精粹系列】PHP精粹的更多相关文章
- 谢孟军:The State of Go | ECUG Con 精粹系列
本月 17 日,Go 1.8 版本火热发布.相较于以往的版本,Go 1.8 具体有哪些新的特性呢?想必这是不少 Gopher 们热切关注和讨论的问题.作为著名的Golang 布道者,Gopher Ch ...
- 【精粹系列】Mysql精粹
关于Mysql整理的需要记忆和熟练掌握的内容 1.查询数据表的信息(比如有多少行数据): show table status like 'tab_User' -- 数据表中的数量 2. 使用 ex ...
- js 继承inheritance/extends
主要就是<javascript语言精粹>语言精粹中的内容 5.1伪类 Function.prototype.method = function(name,func){ this.proto ...
- OO课程的完结,软件工程学习的开始
目录 UML小结 阅读学习 大象:Thinking in UML UML精粹 UML和模式应用 本单元作业的架构设计 四个单元中架构设计及OO方法的演进 四个单元中测试与实践的演进 课程收获 三个具体 ...
- 《NoSQL精粹》思维导图读书笔记
<NoSQL精粹>思维导图读书笔记 各主题笔记 这本书短小精悍,虽不能解答所有NoSQL疑问,但在读书过程中会抛给你不少未曾想过的问题,给人以更深入的思考: 这里对每一个主题分别做了笔记: ...
- 读《javascript语法精粹》知识点总结
昨天泡了大半天的读书馆,一口气看完了<javascript语法精粹>这本书,总体来说这本书还是写的不错,难怪那么多的推荐.<javascript语法精粹>主要是归纳与总结了ja ...
- [置顶] CSS语言精粹
本文主要是对CSS中一些比较重要的高级部分作了一些整理,这些内容也许不是经常使用,但是都很强大.本文将长期更新. 边框 CSS2.1 规定:元素的背景是内容.内边距和边框区的背景.设置背景颜色时是没有 ...
- JavaScript 语言精粹笔记3
方法 毒瘤 糟粕 记录一下阅读蝴蝶书的笔记,本篇为书中最后一部分:方法.代码风格.优美的特性.毒瘤.糟粕等. 方法 这一章主要介绍了一些方法集.这里写几个我不太熟悉的方法和要点吧. array.joi ...
- 《JavaScript语言精粹》小记
一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...
随机推荐
- Python----reduce原来是这样用的
官方解释: Apply function of two arguments cumulatively to the items of iterable, from left to right, so ...
- 解决 PLSQL Developer无法连接数据库
问题:PLSQL Developer无法连接数据库 原因:PLSQL Developer不支持x64的Oracle客户端 解决方案:1.下载instantclient-basic-nt-12.1.0. ...
- C#设计模式-建造者模式
在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成. 例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象,它是由C ...
- C#实现约瑟夫环问题
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace orde ...
- php语句
判断变量的方法: 例: $a=""; var_dump(empty($a)); 输出的结果为true 若$a=10; var_dump(empty($a)); 输出falst 若没 ...
- ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Opt ...
- OracleDBA之表管理
下面是Oracle表管理的部分,用到的测试表是oracle数据库中scott用户下的表做的测试,有的实验也用到了hr用户的数据,以下这些东西是我的麦库上存的当时学Oracle的学习笔记今天拿出来和大家 ...
- 小菜学习Winform(五)窗体间传递数据
前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...
- Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLo ...
- spring @import和@importResource
@ImportResource in spring imports application xml in configuration file which is using @Configuratio ...