《PHP程序设计》读书笔记 |
您所在的位置:网站首页 › php读书心得 › 《PHP程序设计》读书笔记 |
========================第一章============================ 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 |