《PHP程序设计》读书笔记

您所在的位置:网站首页 php读书心得 《PHP程序设计》读书笔记

《PHP程序设计》读书笔记

#《PHP程序设计》读书笔记| 来源: 网络整理| 查看: 265

========================第一章============================

Apache 源码

PHP解释器源码

 

========================第二章============================

基本数据类型 整型、浮点型、字符串、布尔值

复合数据类型 数组、对象

特殊类型 资源、NULL (例如,数据库就是资源)

函数名和类名不区分大小写

一个没有设置值的变量,其行为如同NULL值

变量的变量 $foo = 'bar' ; $$foo = 'baz';  => $bar = 'baz';

变量引用 $black = &$white; 当$white被unset时,$black的值仍然为原$white的值

垃圾回收 使用引用计数和写时复制,当$A变量被赋值给$B变量时,仅仅是$A的值的内存区域的引用增加了1,当$B变量的值的内容发生变化时,将$A值的内存区域进行复制,再修改$B的内存区域。$B=$A (未分配内存) $B[1] = '2' (复制内存,并更改)

垃圾回收 当内存的引用为0(用户角度为0,C的实现中为1),将占用内存释放

隐式类型转换 字符串与整形操作转化为整形或浮点型(如果字符串存的是浮点型),字符串与浮点型操作转换为浮点型

隐式类型转换 如果字符串开头没有字母则将字符串看为0,如果字符串开头有.eE字符,则解析为浮点数

+(3-4) 算术断言

逻辑运算符 && = and ,  || = or , xor , !

`...` 表示执行shell命令,如$list = `ls -l`

declare 滴答指令,通过register_tick_function()注册,declare(ticks = 3)表示每三次,执行一次register_tick_function中注册的函数

exit()是die()的别名

包含代码 require和include引入文件时,通过PHP的配置文件php.ini启用了allow_url_fopen选项,则可以通过提供一个URL代替本地路径包含来自远程站点的文件

从远程获取以.php结尾的文件也就是从一个启用了PHP的Web服务器取回PHP脚本的输出,因为这个原因,推荐使用.inc作为主要包含代码的库文件,并用.html作为主要包含HTML的库文件

get_included_files()函数用来获取脚本中用include和require包含的文件,返回一个所以已包含的文件名的数组

 

========================第三章============================

嵌套函数声明 嵌套声明不限制内部定义函数的可见性,这样就可以在程序的任何地方调用函数。内部函数不能自动获得外部函数的参数。直到外部函数被调用时才能调用内部函数

变量作用域 函数内不能访问函数外变量,函数外也不能访问函数内变量。函数内可以使用global关键字或$_GLOBALS[""]访问

静态变量 static

函数参数传递 值传递和引用传递,PHP中值传递必须复制该值,引用传递不必

默认参数

可变参数 可以不在函数声明中确定参数个数,而是使用func_get_args、func_get_arg、func_num_args来获取参数和个数

func_num_args 是可以作为参数直接传递其他函数的

function &fun(){}    $x = &fun();   返回返回值的引用,可以有效地从一个函数返回大型字符串或数组值

可变函数 $fun()即变量加(),可以先使用function_exists($functionname)进行判断,如echo、isset等无法使用变量调用

匿名函数 使用create_function(args_string, code_string)进行创建

 

========================第四章============================

 

字符串 一般情况下使用单引号,有转义变量时使用双引号,跨越多行时,使用

heredoc格式 heredoc格式 $str = 关于正则表达式的详细内容,还需要复习并做相应的练习

 

========================第五章============================

 

如果初始索引是一个非数字字符串,那么后面的索引是从0开始的整数 

在数组的末尾添加值 $family = array('Fred','Wilma');  $family[] = 'Pebbles';

foreach结构不在数组自身上操作,而是在它的一个拷贝上操作。可以在foreach循环体内插入或删除元素,这样并不会影响数组本身

 

========================第六章============================

 

用变量提供一个类名 $Class = 'Person'; $object = new $Class; $object = new Person;

对象的引用与赋值 当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。当使用对象引用时,引用的变量相当于该对象变量的别名。对对象变量赋null时,不会影响对象本事,但引用变量也会变成null

在反串行化之前,一个对象的类必须被定义。试图对一个没有定义类的对象进行反串行化将会使该对象被置于stdClass,从而使该对象失去作用

 

========================第七章============================

 

表单验证 可以使用javascript和php服务端同时验证

设置响应头 header()用来设置响应头,但必须在文档的开头,否则会出现警告

会话跟踪方法 1.使用隐藏的表单字段传递 2.为每个用户分配一个惟一标识符,并且通过一个隐藏表单字段传送ID 3.URL重写 4.使用cookie,setcookie()

使用session session_start() session_register() session_unregister() session_id() session_destory() ...

php.ini中register_globals 这个关键字在5.4以后已经不再使用了,之前的含义是当其值为On是,如果用户通过URL传入一个变量,可能对服务器造成破坏,如php文件中if(check_user_privilege()){ $user_level = 1;},当用户传入的URL为url?user_level=1且register_globals=On时,用户级别的验证就失效了

 

========================第八章============================

 

占位符 PEAR DB的三种占位符,?字符串或数字,|一个从不被引起来的字符串或数字,&文件名,如$db->query("insert into movies (title,year) values (?,?)", $movie);

 

========================第八章============================

 

数据库

 

========================第九章============================

 

GD库

 

========================第十章============================

 

PDF扩展

 

========================第十一章===========================

 

XML解析

Web服务 为基于XML和HTTP的远程过程调用提供一种标准的机制,从而省去建立各种新协议的需求

Web服务的标准协议 XML-RPC、SOAP、JSON-RPC、REST

 

========================第十二章===========================

 

全局变量和表单数据

初始化变量

设置variables_order

文件名 远程文件

相对路径检查 ../../etc/passwd

限制对特定目录的文件系统访问

上传文件 不信任浏览器提供的文件名

上传文件 小心文件系统被填满

上传文件 使register_globals续存

文件权限 在第一次使用时确定权限,会话文件

安全模式

隐藏PHP库

eval()和preg_replace /e的使用

shell命令

 

========================第十三章===========================

 

Smarty模板系统

异常级别 提示(notice)、警告(warming)、错误(error)

解析错误 在脚本语法不正确时引发的一类特定错误

所有除解析错误之外的错误都是运行时错误

错误禁止 @

错误触发

性能调整 先运行起来,在对慢速代码进行调整;优化两个方面:缩短执行时间和减少内存开销

性能监测 计算出页面中各个子例程或逻辑单元所耗费的时间

“如果产生一个页面需要5秒钟,你绝对不可能通过优化一个耗时0.25秒的函数来让页面的总时间减至2秒”

速度会存在绝对极限,如果需要继续提高速度,需要使用更好的硬件或带有反向代理缓存的Web服务器

当echo可以满足需要时避免使用printf()

避免重复计算循环内的值

尽量减少包含无用的文件和代码块

使用数据库时,最好使用数据库持久连接

当简单字符串可以满足需求时,不要使用正则表达式

优化内存开销 尽可能使用数值代替字符串

当处理完一个大字符串时,将字符串变量置空,这样可以释放内存以便重新利用

仅包含和请求实际需要的文件,并使用include_once和require_once代替include和require

解决传输瓶颈的通用解决方案 反向代理缓存、负载均衡服务器和数据库复制

MySQL复制 使用主从数据库

 

========================第十四章===========================

 

PHP扩展 C扩展库:PHP扩展、Zend扩展

以下显示了一个链接有PHP的Web服务器框图 

 可以登录http://svn.php.net/viewvc/下载php的源码,做一些扩展工作

开发扩展的一般步骤:

1. 创建扩展 可以使用PHP命令行代替Web调试

使用ext_skel工具创建扩展,将自动创建如下文件:

config.m4 配置规则

CERDITS 保存扩展名称和作者名称

EXPERIMENTAL 指示扩展仍然是实验性的

xxx.c 扩展的实际C代码

xxx.php 测试脚本

Makefile.ini makefile模板

php_xxx.h 扩展的C头文件

tests/ 用于回归测试的目录

2.充实框架

xxx.c中function_entry数组列出了扩展实现的所有用户可见的函数

MINFO()由phpinfo()调用,并在phpinfo()的输出中加入关于扩展的信息

3. 编译扩展

编辑config.m4,扩展方式有两种,编译成一个共享模块或将扩展直接放入PHP的源代码树框架中

共享模块方式可以更快地编译,但必须在程序源代码或者php.ini文件中显式载入它

内存管理

zval/pval

 

PDF文档下载地址:http://download.csdn.net/download/expleeve/4307064



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3