(2013)PHP学习笔记

动态加载php扩展库 dl()


PHP四种风格: 
XML风格 <?php ?>
脚本风格 <script language="php"> </script>
简短风格 <? ?> 需要设置
asp风格 <%  %> 

php 数据类型:
标量类型: boolean integer float/double string
复合类型: array object
特殊类型: resource null

转义字符:
\n 换行 \r 回车 (这两个字windows下无区别,在Linux下\n 另起一行不回行首 \r回到行首部,不会换行)

界定符效果同""
$str = <<<abc
字符串
abc

整型 -2147483649~+2147483647


浮点型 1.7E-308~1.7E+308
要避免浮点数比较大小


定义常量: 
define("名称","值");
取常量值函数
mixed constant(string const_name)
bool defined(string constant_name)


常用常量值:
__LINE__ __FILE__
E_ERROR 指向最近的错误处
E_WARNING 指向最近的警告

引用赋值 $j=&$i;

可变变量
$abc = "def";
$def = "hello!";
echo $$abc;//输出hello!

PHP预定义变量:
$_SERVER $_COOKIE $_SESSION $_POST $_GET $GLOBALS

错误控制运算符 @
$a = @(5/0);

按引用传值 &$abc


在全局作用域中使用return 将终止脚本运行


变量函数 $func='come';
  $func();


对函数的引用
function &example($temp = 0)
{
return $tmp;
}
$str = &example('haha');
引用返回的是$tmp;的地址


取消引用用unset()


编码风格 if后加空格
if ($expr)


类属性用m前缀
类中方法命名前缀 Is Get Set


参数首字母小写,函数变量除前缀外首字母大写
变量命名 全部小写,y用下划线分隔
$msg_error;


引用变量/函数 用r前缀
$rTest


全局变量用g前缀
$gTest


常量全部大写字母用下划线分隔
DEFAULT_NUM_VALUE

静态变量前缀s
$sStatus


函数命名用小写字母,用下划线分隔
function this_good_idear()


rand(int mix,int max)


先用is_array()判断后再用foreach


Sql查询前,所有的字符串必须加单引号,避免sql注入和SQL错误

$test = '<::est3313::>';
echo trim($test,'<:: ::>');

addslashes() 添加转义,插入数据库前使用
stripslashes() 去除转义
$str = "test 'abc'";
$str = addslashes($str);//test /'abc/'
$str = stripslashes($str);//还原


strlen();
substr(str,start,length);
strcmp();
strcasecmp();//自然排序算法比较
strncmp();
strstr(str,need);//查找指定关键字
strchr(); //后序查找字符串
substr_count(str,need);//查找子串出现次数
str_ireplace(要替换的字符,替换的字符,目标字符串,替换次数);//不区分大小写字符串替换
str_replace();//区分大小写字符串替换
number_format();//格式化字符串
array explode(spea,str,limit);
str implode(glue,array);

--------------------------------------------------------------------------------
正则表达式:
行定位符 ^开始 $结尾
字符匹配(只能匹配1个字符)[] [Ab][Bc] 匹配AB,Ac,bB,bc
预定义 [0-9] [a-zA-Z0-9]
[[:upper:]] 所有大写字母
[[:lower:]] 所有小写字母
[[:space:]] 所有空格字符
选择字符 |
T|tM|m 等于 [Tt][Mm]
排除字符
[^a-zA-Z] 排除字母
限定符
? 0或1次
+ 1或多次
* 0或多次
{n} n次
{n,} 最少n次
{n,m} 最少n次,最多m次
点号字符 匹配除换行符外地任意字符
^r.s.*t$(匹配r开头,第三个是s,t结尾的单词)
转义字符 \
预定义字符集
\d 十进制字符
\D 非十进制字符
\s 空白字符
\S 非空白字符
\w 单词字符
\W 非单词字符
(小写和大写功能上是相反的)
括号字符 (确定限定范围)
(thir|four)th 匹配thirth或者fourth

ereg/eregi(正则式,字符串,储存的数组)
将匹配到的字符串储存到第三个参数的数组中
ereg_replace()/eregi_replace(正则式,要替换的字符串,目标字符串);
返回匹配后的结果
preg_grep(正则式,输入数组)
对数组中每一个匹配,返回匹配正则式后端数组
preg_match/preg_match_all(正则式,字符串对象)
返回匹配次数,_all 会返回所有的匹配次数
preg_quote(str,要转换的额外字符) 转义字符串str,并把第二个参数规定的额外字符串转义
preg_replace(正则式,替换对象,原字符串);
preg_replace_callback(正则式,回调函数,原字符串);
 
count()//可以统计二维数组的数量
count($arr,1);//递归的统计$arr及其子数组的数量

array_search(要搜索到值,指定搜索到数组)
array_pop()获取数组最后一个元素
array_push()向数组添加最后一个元素
array_unique()删除数组中重复元素

get方法提交表单数据大小限制为1Mb

$_SESSION 变量传参数很耗系统资源

urlencode(string)对字符串进行url编码
urldecode()对url进行解码

PHP 5.0对data()进行了重写,日期时间比系统时间少8小时
php.ini 设置 date.timezone=Asia/Hong_Kong

mktime()//时间戳
date("Y-m-d",mktime())
date("Y-m-d H:i:s",mktime());
getdate()
checkdate(month,dat,year);//检查日期有效性

strtotime();//时间到时间戳
microtime();//返回当前系统的微秒数,用于统计脚本运行时间

setcookie(name,value,失效时间,path,domain,是否通过https);//创建cookie
$_COOKIE["cookiename"]
删除cookie
set(name,'',time()-1);

Session 可以记录用户有关信息,再次提交时确认
session_start();//启动会话,在这个函数之前不能有任何输出
session_register();创建会话,会隐式调用session_start

$_SESSION保存会话变量
删除会话 unset($_SESSION['name'])
清空session
$_SESSION = array();
session_destory();//结束当前会话

PHP图像处理
GD库
extension=php_gd2.dll;
Jpgraph 绘图组件
可以生成验证码,柱形图,折线图等

fopen('路径',读取方式);
fclose('句柄')

读取整个文件 readfile();//读取整个文件
file();//按行储存到数组中
file_get_contents();//读取到字符串中
fgets();//一次读取一行数据
fgetss();//读取数据,但是会过滤掉html和php标记
fgetc();//对文件进行逐个读取
fread();//读取指定长度字符串
写入文件
fwrite();
file_put_contents();
操作文件
copy(path1,path2);
rename(name1,name2);
unlink(filename);//删除文件
fileatime(filename);//最后一次访问文件的时间
filemtime(filename);//最后一次修改文件的时间
filesize(filename);//取得文件的大小
realpath(filename);//取得绝对路径

打开目录
opendir(path);
closedir(handle);
is_dir(path);
scandir(path);//浏览目录
mkdir(pathname);
rmdir(dirname);
getcwd();取得当前目录
chdir(path);//改变工作目录
disk_free_space(path);//返回服务器的可用空间
disk_total_space(path);//返回服务器的总空间大小
readdir(handle);//返回目录中下一个文件的文件名
rewinddir(handle);//指定目录重新指定到目录头

远程文件访问
php.ini 设置 allow_url_fopen 设置为on
fopen('http://127.0.0.1/abc.php','rb'); //添加参数a,以追加模式打开
rewind(handle);//设置为文件流的开头
fseek(handle,offset,操作类型);//文件指针的定位
feof();//指针是否在文件结尾
ftell();//返回当前指针的位置
flock(handle,锁定类型);//LOCK_SH|EX|UN|NB 读取文件锁定|写入文件锁定|释放锁定

文件上传
php.ini 设置
file_uploads=on;//支持文件上传
upload_tmp_dir;//上传文件临时目录
upload_max_filesize
max_execution_time 最大执行时间
memory_limit 分配的内存空间

$_FILES 存储上传文件的信息
move_uploaded_file(filename,destination);

PHP面向对象
类常量
const PI='3.14159';
构造方法
__construct(构造数组)
__destruct()//析构方法
继承,多态(覆盖(同名同参)、重载(参数名))

$this->
parent:: //调用父类方法
parent::__construct();//调用父类构造方法
self:: //调用当前类静态成员和变量
类名:: //调用变量、常量、方法

public private protect//全部,自己,自己和子类

final关键字,这个类不能被继承
修饰方法时,这个方法不可以重写或者覆盖

abstract 只能作为父类使用,至少要包含一个抽象方法,要在子类中实现
abstract function abstractName(); //父类中声明抽象方法

接口
php中只有单继承,但是有多接口
interface InterfaceName{
function interfaceName1();
function interfaceName2();
}
class SubCalss implements InterfaceName1,InterfaceName2{
function interfaceName(){
...
}
}

克隆对象
$object1 = new CalssName();
$object2 = clone $object1;

__clone();//拷贝构造函数

对象比较 == 比较内容 ===比较引用地址

instanceof 检测对象类型
$cBook instanceof MyBook 检测是不是MyBook对象

__set()
__get()
__call();//调用不存在的方法会执行

__sleep();//关闭对象可能具有的类似数据库连接等善后工作
__wakeup();//重新还原被序列化的对象时,恢复序列化中可能丢失的数据库连接和相关工作

__toString(); 使用echo或者print输出对象时,转换成字符串,必须定义这个方法,否则不能直接输出对象

__autoload();//自动实例化需要的类(在文件中实现)
function __autoload($class_name)
{
include_once($class_path);
}
$myBook = new SportObject();
//自动包含SportObject头文件

截取中文字符串 使用substr会错误

PHP加密
单向加密:md5(); sha1(); crypt();
双向加密:Mcrypt库 (libmcrypt.dll和libmhash.dll)

mysql -uuser -hlocalhost -ppass

DROP DATABASES 数据库名;

每个表只能有一个 AUTO_INCREMENT 且必须被索引

SHOW COLUMNS | DESCRIBE //查看表结构

mysql 数据库备份 MYSQLDUMP//以文本文件的方式存储到指定文件夹下
mysqldump -uroot -proot databaseName>F:\bak_DatabaseName.txt
数据库恢复
mysql -uroot -ppass databaseName<F:\bak_DatabaseName.txt

php操作mysql数据库
mysql_connect()
mysql_select_db()
mysql_query()
mysql_fetch_array(mysql_query($sql));//从数组结果集中获取信息
mysql_fetch_object(mysql_query($sql)));//获取对象
mysql_fetch_row();//逐行获取结果集中的每一条记录
mysql_num_rows();//获取查询结果集中的记录数

PDO php data object
extension=php_pdo_myslq.dll
$pdo = new PDO($dsn,$user,$pwd);
int PDO::exec(statement);//返回受影响的行数
PDOStatement PDO::query(statement);//返回查询后的结果集

PDO 预处理
prepare()
execute()

fetch()

PHP 有一个非常简单的垃圾收集器,它实际上将对不再位于内存范围(scope)中的对象进行垃圾收集。垃圾收集的内部方式是使用一个引用计数器,因此当计数器达到 0 时(意味着对该对象的引用都不可用),对象将被当作垃圾收集并从内存中删除。
在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP 的GC垃圾处理机制,防止内存溢出。


当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件.


PHP 可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(reference counting)这种单纯的垃圾回收(garbage collection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为 NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

防止两个php进程并发导致的资源竞争 flock() 函数锁定或释放文件 可以通过 fclose() 来释放锁定操作,代码执行完毕时也会自动调用

启用safe_mode指令将对在共享环境中使用PHP时可能有危险的语言特性有所限制
只能用于与调用这些函数的脚本有相同拥有者的文件
链接MySQL服务器所用的用户名必须与调用mysql_connect()的文件拥有者用户名相同
会减慢执行效率

当访问量激增的时候,PHP架构的网站会出现的很多问题都因数据库而起。数据库的同步问题还不算什么。关键是数据库的响应速度会有指数级的降低
我们只需要保证数据的存储有效性就行了


memory_get_usage(),这个函数的作用是获取 目前PHP脚本所用的内存大小。
memory_get_peak_usage(),这个函数的作用返回 当前脚本到目前位置所占用的内存峰值,这样就可能获取到目前的脚本的内存需求情况。

如果一个脚本试图请求比系统中可用内存更多的内存,或大于它每次应该请求的最大量,那么,ZendMM将自动地发出一个E_ERROR消息并且启动相应的终止进程


脚本执行的开始都是以SAPI接口实现开始的,SAPI对接不同的执行对象,比如apahce、nginx

CLI/CGI模式的PHP属于单进程的SAPI模式。这类的请求在处理一次请求后就关闭


 




























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值