兄弟连的书《细说PHP笔记》,web开发入门的必备书籍,大致浏览一遍有个印象总是好的,语言类的书籍一通百通,过一遍就可以了没有必要精读,语言的精通需要在项目的实战中去锤炼的,这里将自己认为值得一记的地方做了一个摘抄
HTML的设计与应用
HTML常用字符实体
space  
< < > >
& &
" "
' &apos
HTML文档头部元素
<title></title>
<link rel="stylesheet" type="text/css" href="style.css"/> <!--在头部链接CSS文件位置-->
<meta charset="utf-8"> <!--定义文件信息的名称、内容等-->
<meta name="keywords" content="博客,信息安全">
<meta name="description" content="个人技术博客">
HTML文档主题标记<body>
<body>
标签的常用属性:text,bgcolor,background,topmargin,leftmargin
4个通用属性,在任何HTML标签中都可以使用:id,name,class,style
格式标签
常见的HTML格式标签:<br>,<p>,<center>,<pre>,<li>,<ul>,<ol>,<hr>
文本标签
常见的文本风格标签:<hn>,<b>,<i>,<u>,<sub>,<sup>,<font>,<cite>,<em>,<srong>,<small>,<big>
创建图像和链接
插入图片,默认情况下文字和图片处于同一行<img src="image/favicon.jpg" alt="favicon" width="80" height="80" border="2">
建立锚点和超链接
在网页中定义锚点和链接,如果链接到对应的锚点位置,需要在锚点名前加一个”#”字符<a href="url" name="" target="">链接文字</a>
target属性指定要打开的链接所使用的浏览器的窗口名称
- _self: 在当前窗口中打开链接文件,是默认值
- _blank: 开启一个新的窗口打开链接文件
- _parent: 在父级窗口中打开文件,常用于框架页面
- _top: 在顶层窗口中打开文件,常用于框架页面
<a name="anchor_one"> <!--声明一个锚点-->
<a href="#anchor_one">链接到当前页面的锚点位置</a>
使用HTML表格
在HTML文档中,表格需要通过表格标记<table>
、行标记<tr>
、单元格标记<th>
或<td>
嵌套完成<table>
标签常用属性:align,border,width,height,cellspacing,cellpadding
<table border="2" cellspacing="0" cellpadding="2">
<caption>表格名称</caption>
<tr>
<th>表格头</th>
</tr>
<tr>
<td>表格数据</td>
</tr>
</table>
<caption>
标签用于定义表格标题的位置,可以由align属性来设置,该标记应放在<table>
标签内,在表格行<tr>
之前
HTML框架结构<frameset>
HTML表单设计
表单的各种输入域可以由<input>
,菜单下拉列表域<select>
,多行文本域<textarea>
三个标签定义
表单标记<form>
常用属性:name,method,action,enctype,target
文本域和密码域<input>
常用属性:type,name,value,size,maxlength
标签中提供了9种类型的输入区域,具体是哪一种类型由type属性决定:
- text 文本输入域
- password 密码输入域
- submit 表示这是一个提交按钮
- reset 表示这是一个重置按钮
- button 表示这是一个普通按钮,并不实现任何功能,需要和JavaScript等脚本语言一起使用
- radio 单选按钮
- checkbox 复选框
- hidden 隐藏域
层叠样式表CSS
CSS规则的组成
p选择器{
attribute属性:value值;
}
长度单位
- em: 是一个大致与一个字符高度相同的单位
- px: 是一个像素的单位
- pt: 是一个磅的单位
- %: 是一个百分比
颜色单位和url值
关键字通常有16个:aqua,black,blue,fuchsia,gray,green,lime,maroon,navy,olive,purple,red,silver,teal,white,yellow
RGB颜色则可以有以下4种形式:
- #rrggbb
- #rgb
- rgb(x,x,x) x是一个0~255的整数
- rgb(y%,y%,y%) y是一个0.0~100.0的整数
URL的格式为:url(addr),addr是一个URL
在HTML文档中放置CSS的几种方式
内联样式表<p style="color:red">这段的样式是红色的字体</p>
嵌入一个样式表
<style type="text/css">
p{
color:red;
}
</style>
连接到一个外部的样式表<link rel="stylesheet" type="text/css" href="style.css">
CSS选择器
HTML选择器,任何HTML元素都可以是一个CSS的选择器,用于找到和选择器同名的HTML元素h1{color:red}
类选择器p.dark-row{background-color:#EAEAEA}
p.light-row{background-color:#F8F8F8}
ID选择器,id用在唯一的元素上#main{text-indent:3em}
关联选择器table a{color:red} /*只有在表格<table>内的链接<a>改变了样式*/
组合选择器h1,h2,h3,h4,h5,h6{color:red} /*使用组合选择器修饰标题*/
伪元素选择器,是指对同一个HTML元素不同状态的一种定义方式
a:link{color:red;} /*超链接没有任何动作前的状态*/
a:hover{color:yellow; font-size:125%;} /*光标移动到超链接上的状态*/
a:active{color:blue; font-size:125%;} /*选中超链接时的状态*/
a:visited{color:green; font-size:80%;} /*访问过的超链接的状态*/
CSS常见样式属性和值:字体、文本、背景、位置、边框、列表
字体属性:font-family,font-size,font-style,font-weight,font-variant
颜色属性:color
背景属性:background-color,background-image,background-repeat,background-attachment,background-position
文本属性:letter-spacing,word-spacing,text-decoration,text-align,text-indent,line-height
边框属性:边框风格、边框宽度、边框颜色
border-style,border-width,border-color
鼠标光标属性:cursor
默认的鼠标形状default、小手形状hand、交叉十字crosshair、文本选择器号text、Windows的沙漏形状wait、带有问号的鼠标help
列表属性:list-style-type,list-style-image,list-style-position
关于盒模型
span是内联的,div是块级元素
<style type="text/css">
#box{
width: 200px;
height: 200px;
padding: 10px;
border: 5px solid #ccc;
margin: 20px;
}
</style>
关于定位和浮动
参与页面布局的CSS属性:position,top,left,text-align,line-height,z-index,display,visibility,overflow,float,clear
盒子区块框的定位
区块的定位有普通流、绝对定位和浮动三种基本的定位机制。
相对定位是”相对于”它在普通流的起点位置进行移动,绝对定位不会占据普通流中现有区块框的空间,浮动的元素要指定一个明确的宽度,否则它们会尽可能的窄。
<style type="text/css">
.clear{
clear: right;
}
</style>
<div class="clear"></div> <!--这个区块专门用于清除浮动-->
HTML文件的设计
HTML文件只需要使用一些div,span,ul,li之类的标签,然后最好将不同类型的样式分别定义在独立的样式文件中,常见的一些文件命名规范有:全局样式global.css,框架布局layout.css,字体样式font.css,链接样式link.css,打印样式print.css
PHP
PHP是服务器端嵌入到HTML中的脚本语言,PHP脚本语言是一种弱类型检查的语言,变量或常量的数据类型由程序的上下文决定。
PHP的基本语法
在变量的使用范围周期内,可以借助unset()函数释放指定的变量,使用isset()函数检测变量是否设置,使用empty()函数检查一个变量是否为空。
若使用isset()测试一个被设置成NULL的变量,将返回FLASE。推荐使用!empty($var)这种方法去判断一个变量存在且不能为空。
变量名严格区分大小写,但内置结构和关键字以及自定义的类名和函数名都是不区分大小写的。
PHP的引用并不是像c语言中的地址指针,不会导致在内存上同体,只是把各自的值相关联起来,使用unset()则不会导致所有引用变量消失。
如果想查看某个表达式的值和类型,可以使用函数var_dump($var)
PHP中的数组实际上是一个有序图,图是一种把values映射到keys的类型,它接受一定数量用逗号分隔的key=>value参数对,如下所示:$arr = array("foo"=>"var",12=>true);
一个对象类型的变量,是由一组属性值和一组方法组成的,对象的声明和使用如下所示:
class Person{
var $name;
function say()
{
echo "Doing foo";
}
}
$p = new Person;
$p->name = "Tom";
$p->say();
资源是一种特殊类型的变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。使用资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄。并由程序员创建、使用和释放
$file_handler = fopen("info.txt","w");
var_dump($file_handler);
$dir_handler = opendir("C:\\Windows\\Fonts");
$link_mysql = mysql_connect("localhost","root","123456");
$im_handler = imagecreate(100,50);
$xml_parser = xml_parser_create();
常量的定义define(“PI”,3.14);
执行命令运算符:反隐号(``)
$output = `ls -al`
echo "<pre> $output </pre>"
错误控制运算符:@
PHP中的流程控制结构
PHP提供了两种类型的循环语句:一种是计数循环语句,通常用for完成,一种是条件循环语句,通常用while或do-while完成。
PHP的函数应用
[continue,break]{num},die()函数是exit()函数的别名
function fun(arg1,arg2,...)
{
return;
}
//在函数内部使用global关键字加载全局变量
global $one,$two;
// 使用变量函数声明和应用回调函数
function filter($fun)
{
for ($i=0; $i < 100; $i++) {
if ($fun($i)) {
echo $i."  ";
}
}
}
//借助call_user_func_array($fun_name,$para_arr)函数自定义回调函数
call_user_func_array('fun',array($i));
//类静态函数回调,将第一个参数"函数名称字符串"改为"数组类型的参数"
//第一个元素为类名称字符串
call_user_func_array(array('Demo','fun'),array($para));
//对象方法的回调,第一个元素值为对象的引用
call_user_func_array(array(new Test(),'fun'),array($para));
将函数库文件载入到脚本中,include(),include_once(),require(),require_once()。
对include语句,在执行文件时,每次都要读取和评估;而对于require语句来说,文件只处理一次,实际上文件内容替换了require语句,这意味着执行多次的代码,require效率更高。但如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就是用include语句。
include语句放在流程控制的处理区段中使用,当PHP脚本文件读到它时,才将包含的文件读进来;require语句放在文件的开头和结尾处,在执行这个脚本前,就会先读入它所引入的文件,使它包含的文件成为PHP脚本的一部分。
require()和include()语句是语言结构,不是真正的函数,可以向PHP中其它的语言结构一样,例如echo可以使用echo(“abc”)的形式,也可以使用echo “abc”输出字符串,也可以使用include “config.php”的形式。
PHP中的数组与数据结构
索引数组、关联数组。
直接为数组元素赋值即可声明数组;使用array函数声明数组。
array如果不使用=>指定下标,默认为索引数组。
mysql_fetch_row()
数组遍历
1.使用foreach语句遍历数组时与数组下标无关,且foreach只能用于数组
第一种语法格式:foreach($array_expr as $value){}
第二种语法格式:foreach($array_expr as $key=>$value){}
2.each()函数需要传递一个数组作为参数,返回数组中当前元素的键/值对,并且向后移动数组指针到下一个元素的位置。键/值对被返回为带有4个元素的关联和索引混合的数组,键名分别为0、 1、key、value。其中键名0和key对应的值是一样的,是数组元素的键名,1和value则包含有数组元素的值。
list()函数,这不是真正的函数,而是PHP的语言结构。list()仅能用于数字索引的数组并假定索引从0开始,用一步操作给一组变量赋值
list($var1, ,$var3) = $array_expr;
list($key,$value) = each($array_expr);
//while循环遍历数组
while(list($key,$value) = each($array_expr)){}
reset()函数,而foreach语句会自动重置数组指针的位置
3.使用数组的内部指针控制函数遍历指针
current()、key()、next()、prev()、end()、reset()
4.print_r()函数
预定义数组(自动全局变量或超全局变量)
预定义数组 说明
$_SERVER 变量由web服务器设定或者直接与当前脚本的执行环境相关联
$_ENV 执行环境提交至脚本的变量
$_GET 经由URL请求提交给脚本的变量
$_POST 经由HTTP POST方法提交至脚本的变量
$_REQUEST 经由GET、POST、COOKIE机制提交至脚本的变量,因此该数组并不值得信任
$_FILES 经由HTTP POST文件上传而提交至脚本的变量
$_COOKIE 经由HTTP Cookies方法提交至脚本的变量
$_SESSION 当前注册给脚本会话的变量
$GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量,该数组的键名为全局变量的名称。
register_globals off
可以将url加到a链接标记的href属性中使用,也可以是在form表单的method属性中通过指定
GET方法传递到服务器的参数,还可以是直接在浏览器中输入的地址
数组的相关处理函数
array_values() 将关联数组转化为索引数组
array_keys() 返回指定值的键名
in_array() 检查数组中是否存在某个值 array_search()
此外还可以使用array_key_exits()函数检查特定的键名或索引是否存在于数组中。也可以使用isset()函数完成对于数组中键名或者索引的检查,isset()对于数组中的NULL值不会返回TRUE,而array_key_exits()会
array_flip() 交换数组中的键和值,如果一个值出现了多次,则最后一个键名将作为它的值
array_reverse() 将原数组中的元素顺序翻转
count()、sizeof() 对数组元素个数进行统计
array_unique() 用于删除数组中重复的值
使用回调函数处理数组的函数
array_filter() 过滤数组中的元素
array_walk() 对数组中每个元素应用回调函数处理
array_map() 可作用于多个数组
数组的排序函数
sort() 元素由小到大升序进行排序 asort()保留键名和值的关系
function sortByfun($one,$two)
{
if(strlen($one) == strlen($two))
return 0;
else
return (strlen($one) > strlen($two)) ? 1 : -1;
}
拆分、合并、分解和接合数组
array_slice() 在数组中根据条件取出一段值并返回
array_combine() 通过合并两个数组来创建一个新数组
array_merge() 把一个或多个数组合并为一个数组
数组与数据结构
堆栈相关:array_push、array_pop
用array_push来给数组增加一个单元还不如用$array[] = $value来的快
队列相关:如果使用array_push在数组的最后添加数据,而将数组中第一个元素删除就可以实现一个队列。函数array_shift(array &array)可以删除数组中的第一个元素
数组运算符号
$a + $b 合并两个数组
可以使用unset()删除数组中任意位置的一个元素,但要注意数组将不会重建索引
PHP数组中的类型只有包含整型和字符串型的下标。应该始终在字符串表示的数组索引上加上引号,例如使用$foo[‘bar’]而不是$foo[bar],裸字符串效率会低8倍以上,而键名为常量或变量则不用加引号
PHP面向对象的程序设计
构造方法:function construct(){}
析构方法:function destruct(){}
PHP系统中给我们提供了很多预定义的方法,它们的作用、方法名称、使用的参数列表和返回值都是在PHP中规定好的并且都是以两个下划线开始的方法名称。
set()、get()、isset()、unset()以及前面的construct()、destruct()通常也称为魔术方法,还有call()、toString()、autoload()
private function set($propertyName,$propertyValue)直接为私有属性赋值时自动调用
PHP中只有单继承calss Teacher extends Student{}
在PHP中不能定义重名的函数
final,使用final标识的类不能被继承,在类中使用final标识的成员方法,在子类中不能被继承
static,static标识的成员是属于类的,类中的静态成员使用类名直接访问;在类中声明的成员方法中可以使用关键字self来访问静态成员self::$final_var,不能用$this来引用它,要区别于对象的引用。
单态涉及模式,一个类只能有一个实例对象存在
在PHP中定义常量是通过define()函数来完成的,但要将类中的成员属性定义为常量,则只能使用const关键字,其访问方式和静态成员一样,标识为常量的属性是只读的,不能重新赋值。使用const声明的常量名称前不要使用$,而且常量名通常都是大写的 const VAR_CONST = “const value”;
instanceof,使用这个关键字可以确定一个对象是类的实例、类的子类还是实现了某个特定接口
克隆对象$p1 = clone $p2;会自动调用魔术方法__clone()
toString()获取对象字符串,直接输出对象引用时自动调用的方法
call()若调用对象中不存在的方法就会自动调用该方法function call($funName,$args){}
__autoload()自动加载类,文件的命名使用classname.class.php
function __autoload($classname)
{
// 使用include包含类所在文件
include(strtolower($classname).".class.php");
}
对象串行化:对象需要在网络中传输时,将对象串行化成二进制串后在网络中传输;对象需要持久保存时,将对象串行化后写入文件或是数据库中
使用serialize()函数来串行化一个对象,把对象转化成二进制的字符串,unserialize()反串行化
抽象类和抽象方法abstract
接口interface,接口是一种特殊的抽象类,而抽象类又是一种特殊的类,所以接口也是一种特殊的类。接口中声明的方法必须都是抽象方法,另外不能在接口中声明变量,只能使用const关键字声明为常量的成员属性,而且接口中的所有成员都必须有public的访问权限,通过类去继承接口要使用implements关键字来实现,但要想实例化对象,要把所有的抽象方法都实现才行
设置错误报告的级别,除了无关紧要的注意,其他所有报告都输出error_reporting(E_ALL & ~E_NOTICE);
字符串处理
双引号中变量的解析
常用的字符串输出函数:echo()、print()、die()、printf()、sprintf()把格式化的字符串以返回值的形式写入到一个变量中
常用的字符串格式化函数:trim()、str_pad()、strtolower()、strtoupper()、str_replace()、explode()
正则表达式
使用preg_为前缀命名的正则表达式函数:/ /
preg_match() 进行正则表达式匹配
preg_match_all() 进行全局正则表达式匹配
preg_replace() 执行搜索和替换
preg_split() 分割字符串
preg_grep() 返回与模式匹配的数组单元
preg_replace_callback() 用回调函数执行搜索和替换
会话控制
Cookie是一种由服务器发送给客户端的片段信息,存储在客户端浏览器的内存或者硬盘上,在客户端对服务器的请求中发回它
Cookie是HTTP标头的一部分,因此setCookie()函数必须在其它信息被输出到浏览器前调用,即使是空格或空行也都不要在setCookie()函数之前输出,这和调用header()函数的限制类似
只指定cookie识别 名称第一个参数setcookie("username");
设置cookie在当前时间之前已经过期setcookie("username","",time()-1);
第一种方法将cookie的生存时间默认设置为空,则生存期限与浏览器一样,浏览器关闭时cookie就会被删除。而对于第二种删除cookie的方法,系统会自动删除客户端的cookie程序
Session则是将数据存放于服务器系统之下
转向网站首页header("Location:index.php");
模板引擎
界面模板+业务逻辑 => 组合脚本