《细说PHP》读书笔记
第1-5章 略
第6章 PHP基本语法
6.1 PHP的应用
- 收集表单数据
- 生成动态网页
- 字符串处理
- 动态输出图像
- 处理服务器端文件系统
- 编写数据库支持的网页
- 会话跟踪控制
- 处理XML文件
- 支持利用大量的网络协议
- 服务器端的其他相关操作
6.2 PHP语言标记
- 标准风格:开始标记是<?php,结束标记是?>
- 指令分隔符:分号
- 程序注释:多行注释/* */,单行注释//或#
- 空白的处理:
- 使用两个空行:一个源文件的两个代码片段之间、两个类的声明之间
- 使用一个空行:两个函数声明之间、注释之前。
6.3 变量
- 变量的声明:使用$后面跟变量名表示,弱类型语言不区分类型
- 判空:使用isset()函数检测变量是否设置,使用empty()函数检查变量是否为空。对于""、0、“0”、NULL、FALSE、array()、var、$var,以及没有任何属性的对象都被认为是空。
- 变量的命名:严格区分大小写、以字母或下划线开头。
- 可变变量:$num等价于num等价于num等价于{$num},即一个可变变量获取一个普通变量的值作为这个可变变量的变量名。
- 变量的引用赋值:使用&符号,例如:car="BWM";car = "BWM";car="BWM";bike = &car;两个变量的值会互相关联,一个修改;另一个自动被修改。但unset(car;两个变量的值会互相关联,一个修改;另一个自动被修改。但unset(car;两个变量的值会互相关联,一个修改;另一个自动被修改。但unset(car)只会取消两个变量的关联关系,而变量$bike不会消失
- 变量的类型:PHP支持8种原始类型,四种标量类型(boolean、integer、float、string)、两种复合类型(array、object)、两种特殊类型(resource、NULL)
- 定界符<<<:从<<<之后的标识符开始,到最后是同样的标识符结束字符串。
- 数组:使用逗号分隔的key=>value参数。例如:$arr = array(“foo” => “bar”, 12 => true);
- 对象://创建对象 $p = new Person; //属性赋值 $p->name = “Taylor”; //调用方法 $p->say();
- 强制类型转换:若参与运算:true->1.false->0,null->0,例如:num1="100Swift";num1 = "100Swift";num1="100Swift";num2 = 11;$result = $num1 + $num2; // 结果 result = 111
- 常量的定义:例如 define(“PI”, 3.1415926); echo PI; 常量的定义默认区分大小写,当define函数的第三个参数为true,则不区分大小写。
- 运算符,字符串运算符:英文句号.可将字符串与变量相连。比较运算符:全等于===,操作数相同并且类型相同。
第7章 PHP的流程控制结构
7.1 分支结构
- if else
- switch
7.2 循环结构
- while
- do while
- for
7.3 特殊的流程控制语句
- break
- continue
- exit:直接退出当前脚本
第8章 PHP的函数应用
8.1 自定义函数
例如:
function getName($name) {echo "姓名 = $name";
return $name;
}$result = getName("函数调用");
echo "函数执行结果 = $result";
8.2 PHP变量的范围
- 局部变量:只作用于函数内部
- 全局变量:在函数中使用需要用global关键字声明,或使用$GLOBALS[“age”]
- 静态变量:内部动态变量在函数调用结束后自动释放,而静态变量在函数执行结束后依然保存在内存中,在所有对该函数的调用之间共享
8.3 声明及应用各种形式的PHP函数
- 常规参数的函数:string chr(int ascii)
- 伪类型参数的函数:mixed funName(mixed $args)
- 引用参数的函数:void funName(array &arg),PHP默认是按值传递参数,在函数内部改变参数的值并不会改变函数外部的值。
- 默认参数的函数:function getDefault($m_name=“LiZongWei”, $m_age=“11”) {}
- 可变个数参数的函数:使用系统的func_get_args()函数接收多个参数。
function more_args() {$args = func_get_args();
echo print_r($args);
}more_args("Taylor", "Swift", "LinDan", "LiZongWei");
- 回调函数:变量函数
function add($num1, $num2) {return $num1 + $num2;
}$result = "add";
echo "运算结果:".$result(2, 3);
8.4 使用自定义函数库
- include函数:读入指定文件并执行程序,用于流程控制或设置配置文件和拦截器。
- require函数:读入目标文件内容并替换,用于文件的开头/结尾处或定义类的映射关系。
- include_once 函数:在脚本执行期间包含并运行指定文件。与 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含;
- require_once 函数:和 require 语句完全相同,唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含。
第9章 PHP中的数组与数据结构
9.1 数组的分类
- 数组分为索引数组和关联数组两种
9.2 数组的定义
- 直接赋值的方式声明数组:例如:list[0]="WuLei";list[0] = "WuLei";list[0]="WuLei";list[1] = 27;若没有指定索引值,则紧跟索引值元素中最高的索引值递增。
- 输出数组的所有值:使用系统的print_r()或var_dump()函数(输出变量类型)
- 使用array()新建数组:例如:$soccer = array(2, “name” => “WuLei”, 8 => 27, “Man”);
- 多位数组的声明:例如:
$user = array(
"InsertUser" => [
'connection' => 'dzone',
'exchange' => [
'name' => 'dzone',
'type' => 'direct'
],
'queue' => [
'name' => 'InsertUser'
],
'routing_key' => 'saveusertask',
'count' => 2
],
'UpdateUser' => [
'connection' => 'dzone',
'exchange' => [
'name' => 'dzone',
'type' => 'direct'
],
'queue' => [
'name' => 'UpdateUser'
],
'routing_key' => 'handleusertask',
'count' => 2
]
);echo "多维数组";
echo print_r($user["UpdateUser"]);
9.3 数组的遍历
- 数组的遍历:使用for循环或foreach,例如:
for ($i=0; $i < count($list); $i++) {echo $list[$i].",\n";
}foreach ($list as $value) {echo "value=".$value.",\n";
}foreach ($list as $key => $value) {echo "key=".$key.",value=".$value.";\n";
}
- 联合使用list()、each()、while循环遍历数组
9.4 预定义数组
- $_SERVER:服务器信息
- $_ENV:执行环境提交至脚本的变量
- $_GET:由URL请求提交至脚本的变量
- $_POST:由HTTP POST方法提交至脚本的变量
- $_COOKIE:由HTTP Cookies方法提交至脚本的变量
- $_REQUEST:包含 $_GET、 $_POST、 $_COOKIE中的全部内容。
9.5 数组的相关处理函数
方法名 | 作用 |
---|---|
array_values() | 返回数组中的所有元素值 |
array_keys() | 返回数组中的所有键名 |
in_array() | 检查数组中是否存在某个值 若可选第三个参数为true,只有元素存在于数组中且数据类型相同时才返回true |
array_search() | 搜索给定值,若存在返回相应的键名 若可选第三个参数为true,只有元素存在于数组中且数据类型相同才返回对应的key |
array_flip() | 交换数组中的键值,返回一个反转后的数组 若同一个值出现了多次,则最后一个键名作为它的值 |
array_reverse() | 将原数组中的元素顺序翻转,创建新的数组并返回 |
count() | 计算数组中的元素数目或对象中的属性个数 对于数组的其它值会返回1,若参数是变量而变量没有定义或变量包含一个空的数组则返回0 |
array_count_values() | 统计数组中所有值出现的次数 |
array_unique() | 删除数组中重复的值,并返回没有重复值的新数组 |
array_filter() | 用回调函数过滤数组中的元素 |
array_walk() | 对数组中的每个元素应用回调函数的处理 |
array_map() | 可处理多个数组,将回调函数作用到给定数组的元素上 比array_walk()函数更灵活 |
sort() | 升序排序 |
rsort() | 降序排序 |
usort() | 按用户自定义的回调函数对数据排序 |
asort() | 对数组进行升序排序并保持索引关系 |
arsort() | 对数组进行降序排序并保持索引关系 |
uasort() | 按用户自定义的回调函数对数组进行升序排序并保持索引关系 |
ksort() | 按键名对数组进行升序排序 为数组值保留原来的键 |
uksort() | 按用户自定义的回调函数按键名对数组进行升序排序 |
natsort() | 用自然顺序算法对给定数组中的元素排序 |
natcasesort() | 用不区分大小写的自然顺序算法对给定数组中的元素排序 |
array_multisort() | 对多个数组或多维数组进行排序 |
array_slice() | 在数组中根据条件取出一段值并返回 |
array_splice() | 选择数组中的一系列元素用入参代替 |
array_combine() | 合并两个数组来创建一个新数组,其中一个数组作为键,一个数组作为值 若其中一个数组为空或两个数组的元素个数不同,则会返回false |
array_merge() | 把一个或多个数组合并为一个数组 若键名有重复,则取最后一个键名对应的值 |
array_intersect() | 计算数组的交集 键名保留不变。仅有值用于比较 |
array_diff() | 返回两个数组的差集数组 返回的数组中,键名保持不变 |
array_rand() | 从数组中随机选出一个或多个元素并返回 |
shuffle() | 将数组中的元素按随机顺序重新排列 |
array_sum() | 返回数组中所有值得总和 |
range() | 创建并返回一个包含特定范围的元素的数组 |
第10章 PHP面向对象的程序设计
10.1 面向对象的示例
class Person {var $name;
private $age;// 构造方法1
function Person($name="Taylor") {$this->name = $name;
}/* 构造方法2
function __construct($age="my_default") {
$this->age = $age;
}
*/
public function __set($propertyName, $propertyValue) {$this->$propertyName = $propertyValue;
}public function __get($propertyName) {return $this->$propertyName;
}function say() {echo "<br>姓名:".$this->name.",年龄:".$this->age;
}private function walk() {echo "行走 <br>";
}function __destruct() {echo "<br>再见".$this->name;
}
}$p = new Person();
$p->say(); // 姓名:Taylor
$p2 = new Person("Swift");
$p2->say(); // 姓名:Swift
// $p2->walk(); 调用报错,不能在外部调用私有方法
// 若无预定义__set()会调用报错,因为不能在外部调用私有属性
$p2->age = 66;
echo $p2->age;
$p2->say();// 继承class Student extends Person {var $school;
static $score;static function getScore() {return "<br>分数:".self::$score;
}function study() {echo "<br>学生:".$this->name.",正在学习".$this->school." <br>";
}// 方法重写
function say() {echo "<br>学生:".$this->name.",正在说话。。。 <br>";
}
}$s = new Student("Tom");
$s->study();
$s->school = "math";
$s->study();
$s->say();Student::$score = 99;// 静态变量的调用
echo Student::$score;
echo Student::getScore();
10.2 预定义方法
方法名 | 作用 | 备注 |
---|---|---|
__set() | 对所用私有属性能进行赋值操作 | 可在外部调用 |
__get() | 对所用私有属性能进行获取操作 | 可在外部调用 |
__isset() | 检查私有属性是否存在 | 可在外部调用 |
__unset() | 删除对象中私有属性的方法 | 可在外部调用 |
10.3 常见的关键字和魔术方法
- final:可加在类或方法前,表示类不能被继承、方法不能被覆盖。但不能标识成员属性。
- static:用来表示属性和方法,多个对象之间共享,类似于全局变量。访问静态变量:Person::$count
- 单例设计模式:一个类只实例化一个对象。
class Singleton {private static $instance;protected function __construct() {}public static function getInstance() {// if (false == self::$instance instanceof self) {if (is_null(self::$instance)) {self::$instance = new self();
}
return self::$instance;
}function query($content) {echo $content;
}
}$db = Singleton::getInstance();
echo $db->query("select * from singlton");
- const关键字:将类的成员属性定义为常量
class Teacher {const NAME = 'TEACHER';function showConstant() {echo self::NAME."<br>";
}
}echo Teacher::NAME."<br>";
$t = new Teacher();
$t->showConstant();
// echo $t::NAME; 不能通过对象名称访问常量
- instanceof关键字:判断一个对象是类的实例、类的子类,还是实现了某个特定接口。
- 克隆对象:使用clone关键字创建一个对象的副本,改变原对象不影响副本,例如:$p2 = clone $p1;
- 类中的通用方法:
- __toString():获取对象的字符串表示
- __call():调用对象不存在的方法就会自动调用call()方法,并且程序可以继续向下执行。
- __autoload()全局函数提供了类的自动加载功能
- serialize():对象串行化
10.4 抽象类与接口
- 抽象类:
- 接口
- 只能继承一个类,但可实现多个接口。
第11章 字符串处理
- 常用的字符串处理函数
方法名 | 作用 |
---|---|
sprintf() | 将格式化的字符串以返回值的形式写入一个变量中 |
ltrim() | 从字符串左侧删除空格或其它预定义字符 |
trim() | 从字符串的两端删除空白字符和其它预定义字符 |
strtolower() | 把字符串转换为小写 |
strtoupper() | 把字符串转换为大写 |
strrev() | 反转字符串 |
md5() | 将一个字符串进行MD5计算 |
strcmp() | 按字节顺序进行字符串的比较 |
第12章 正则表达式
12.1 正则表达式语法
元字符 | 含义描述 |
---|---|
* | 匹配0次、1次或多次前面的字符 |
+ | 匹配1次或多次前面的字符 |
? | 匹配0次或1次前面的字符 |
. | 匹配除了换行符外的任意一个字符 |
{n} | 表示前面的字符恰好出现了n次 |
{n,m} | 表示前面的字符至少出现n次,最多出现m次 |
^或\A | 匹配输入字符串的开始位置 |
$或\Z | 匹配输入字符串的结束位置 |
\b | 匹配单词的边界 |
\B | 匹配除单词边界以外的部分 |
[ ] | 匹配方括号中指定的任意一个字符 |
[ ^ ] | 匹配除方括号中的字符以外的任意一个字符 |
() | 模式单元,即由多个字符组成的匹配单元 |
12.2 与Perl兼容的正则表达式
- preg_match():对字符串进行搜素和匹配一次。
- perl_grep():匹配数组中的元素,返回正则表达式匹配的数组单元。
- preg_replace():执行正则表达式的搜素和替换。
第13章 PHP的错误和异常处理
13.1 错误处理
- openlog():打开一个和当前系统中日志器的连接
- syslog():向系统日志中发送一个定制消息
- closelog():向系统日志中发送完成定制消息以后调用。
13.2 异常处理
- 使用try catch语句块,可捕获多个异常
- 扩展异常处理类
第14章 PHP的日期和时间
- 常用的日期处理函数
方法名 | 作用 |
---|---|
mktime() | 将日期和时间转变为UNIX时间戳 |
getdate() | 返回一个由时间戳组成的关联数组 |
microtime() | 返回当前UNIX时间戳和微秒数 |
第15-19章略
第20章 PHP访问MySQL
- 连接MySQL,例如:$link = mysql_connect(“localhost”, “root”, “123456”);
- 输出版本信息:echo mysql_get_server_info();
- 选择数据库:mysql_select_db(“mysql”);
- 插入数据:mysql_query(“insert into qgl_my_user(id,name,age,type) values (2, ‘Swift’, 22, 5)”);
- 更新数据:mysql_query(“update qgl_my_user set age = 29 where type = 3”);
- 删除数据:mysql_query(“delete from qgl_my_user where type = 3”);
- 查询数据:$result = mysql_query(“select id,name,age,type from qgl_my_user”);
- 获取查询结果
- 从结果集中获取行数:mysql_num_rows($result);
- 从结果集中获取列数:mysql_num_fields($result);
- 将一条结果以普通索引数组的形式保存:mysql_fetch_row($result);
- 将一条结果以普通关联数组的形式保存:mysql_fetch_assoc($result);
《细说PHP》读书笔记相关推荐
- 读书笔记 | 墨菲定律
1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...
- 读书笔记 | 墨菲定律(一)
1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...
- 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记
<洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...
- 股神大家了解多少?深度剖析股神巴菲特
股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...
- 2014巴菲特股东大会及巴菲特创业分享
沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...
- 《成为沃伦·巴菲特》笔记与感想
本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...
- 读书笔记002:托尼.巴赞之快速阅读
读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...
- 读书笔记001:托尼.巴赞之开动大脑
读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...
- 读书笔记003:托尼.巴赞之思维导图
读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...
- 产品读书《滚雪球:巴菲特和他的财富人生》
作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...
最新文章
- 如何用burp抓取手机的流量_用企业微信SCRM如何搭建流量新体系
- 技术图文:如何利用C# 实现 Kruskal 最小生成树算法?
- 攻击面管理预防网络攻击原理?
- docker nginx 简单的代理设置
- python中若干关于类的问题
- 04-spring的依赖注入
- android ImageButton设置背景图片无法显示
- 数字孪生技术从概念走向实际应用
- 爬虫python爬取页面请求_03 Python网络爬虫第三弹《爬取get请求的页面数据》,urllib...
- Qt调用face++的http接口,实现人脸对比
- XML解析:PULL解析
- iOS App 上架流程-新版本1.0上架
- 海西小霸王TD-299Z厂家10芯(密码 2.F2.4.蓝键.下.8)
- 【论文投稿】SOTA论文也未必能被接收,谷歌科学家Eric Jang谈顶会审稿标准
- BulletedList控件[转载]
- 不用写代码也能学会采集海量企业电话及邮箱数据
- 通过爬虫在GEO数据库上获取对应SRR号
- android edittext背景颜色,Android 设置 EditText 背景颜色、背景图片
- 解决oracle异常ORA-01012: not logged on
- 如何评价深度学习相关顶级期刊论文难复现的问题?