set() 当在类外使用类的private 属性时,或不存在的属性时会报错,如果设置了__set()方法,那么就会调用这个方法
* __set(成员属性名名称,要设置的成员属性的值)
* __get() 当在类外获取类的private 属性时,属性时,或不存在的属性时会报错, 如果设置了__get()方法,那么就会调用这个方法
* __get(成员属性的名称)
* __call() 当调用类的不存在的方法时,会报错,若定义了改方法,那么就调用此方法
* __call(被调用的方法名,该方法的参数)
* __callStatic(被调用的方法名,该方法的参数)
* __clone() 当对象克隆时调用该方法
* __clone(),默认参数为$this,$that, $this 为要克隆出的对象,$that为原对象
* __construct 构造函数
* __destruct 析构函数
* __sleep(); 当对象序列化之前被调用
* __wakeup()当反序列化之前调用
* __autoload(被包含的类名) 当调用一个类名的方法时,如果没有将该类包含进来, 则会报错,当定义了此函数时,就会调用此函数动态加载类文件
__toString() 当直接
输出类的
对象时会报错,如果定义的该方法,则调用此方法
* */
class A {
private
$name;
private
$age;
public function __construct(
$name,
$age){
$this->name =
$name;
$this->age =
$age;
}
public function __
set(
$name,
$value){
$this->
$name =
$value;
}
public function __get(
$name){
if(
$name==
'fuck')
return"fuck!";
if(isset(
$this->
$name)){
return$this->name;
}
else{
return NULL;
}
}
public function __call(
$name,
$args){
echo$name ,
"Mothod不存在";
var_dump(
$args);
}
public static function __callStatic(
$name,
$value){
echo"静态方法$name不存在";
}
public function
__clone() {
$this->name =
"我是被克隆的";
}
public function
__sleep() {
//
echo"正在被序列化";
return array(name);
}
//重新生成
对象时,调用
public function
__wakeup() {
$this->name =
"张三";
$this->age =
234;
}
public function
__toString() {
return"A";
}
}
//
$a = new A(
"张三",
22);
//
echo$a->name;
//
$a->name =
"张三";
//
echo$a->name;
//
$a->get(
"xue",
3,
"sf") ;
//
$a1 = clone
$a;
//
echo$a->name,
"
",
$a1->name;
//
$p_str = serialize(
$a);
//
echo$p_str;
//
$a2 = unserialize(
$p_str);
//var_dump(
$a2);
//function __autoload(
$classname){
//
include $classname.
".php";
//}
//
echo$a2->fuck;
//A::ha();
/*
*
1.
echo 和print 的区别
*
echo 是语句,不是函数, 不用括号,可以输出多个值,没有返回值,不能输出数组和
对象 只能输出简单的类型,如 int,string
* print 是语句,不是函数,不用括号,只能输出一个值,有返回值
1,不能输出数组和
对象,只能输出简单的类型,如int,string
*
2.print_r() 和 var_dump()
* print_r() 是函数,可以输出复合类型和简单类型,如int float ,string ,array object,当输出
对象时以机构表示如 Object{},当输出
* 数组时表示为Array()
* var_dump() 是函数,输出变量的内容,类型,长度,可以输出简单类型,复合类型,常用来调试
*
3.printf 是函数,类似C语言,格式化字符串输出
*
4.sprintf 函数,类似C语言,格式化字符串后返回一个格式化后的字符串不输出
*
*/
//print_r(
3.55);
//
$arr = array(
"xue",
3);
// print_r(
$arr);
// var_dump(
$arr);
//
$nb = sprintf(
"%s 是个%d吊",
"haha",
3);
//
echo$nb;
/*
* 获取文件内容方式
*
1.file_get_contents();
*
*/
//
$txt = file_get_contents(
'data.txt');
//
echo$txt;
//
$file = fopen(
"data.txt",
"r");
//
while(!feof(
$file)){
//
$line = fgets(
$file);
// //
echo$line;
//
//}
//
while(!feof(
$file)){
//
$char = fgetc(
$file);
//
echo$char;
//}
/*
* strlen() he mb_strlen的区别
* 两者都是求字符串长度的函数
* 在strlen只是获得字符串所占的字节数,无法正确处理中文字符
* 当为GB2313编码时,一个汉字占
2位,当为UTF-
8编码时,一个汉字占
3位
* mb_strlen()能够正确处理汉字,第二个参数为编码的类型,默认为UTF-
8,默认为PHP内部的编码,可以用mb_internal_encoding()来查看
* mb_strlen()并不是php核心函数, 需要加载扩展库来使用,在php.in中 extension =
"php_mb_string.dll"
*/
//
$str =
"黛玉123f";
//
echo strlen(
$str); // 输出
10
//
echo mb_strlen(
$str,
'UTF-8'); //输出
6
//
echo mb_internal_encoding();//输出 ISO-
8859-
1
//
/*
* php数组函数
* 数组的键名和值
*
1.is_array()判断是否是数组,是返回TRUE,不是返回
false,类似 is_int(); is_float();
*
2.array explode ( string
$delimiter , string
$string [, int
$limit ] )此函数将字符串分割为数组
*
3.string implode ( string
$glue , array
$pieces )将数组分割为字符串
*
4.array_values()返回数组所有的值,请给其建立数字
索引
*
5.array array_keys ( array
$input [, mixed
$search_value = NULL [, bool
$strict =
false ]] )
*
6.array_key_exists() 检索指定的键名或
索引是否在数组中,存在返回
true,否则返回
false
*
7.array_flip()交换数组的键名和值,若存在相同值,则以最后一个键值为准
*
8.array_search() 在数组中搜索给定的值,若存在返回对应的键名,否则返回FALSE
*
9.检索数组中是否存在某个值,存在返回
true,不存在返回FALSE
*
10.isset(
$arr[
'apple'] 检测指定的键名知否存在给定的数组中,存在返回
true,否则返回
false
* 数组的内部指针
* current(
$arr); 返回数组中的当前单元
pos(
$arr); 返回数组中的当前单元
key(
$arr); 返回数组中当前单元的键名
prev(
$arr); 将数组中的内部指针倒回一位
next(
$arr); 将数组中的内部指针向前移动一位
end(
$arr); 将数组中的内部指针指向最后一个单元
reset(
$arr; 将数组中的内部指针指向第一个单元
* each(
$arr); 返回数组当前指针单元的键名和值,以新数组的形式,且当前数组的指针向前移动一步,若到达数组最后一个单元, 则停留为最后一个单元
* 键值对被返回为四个单元的数组,键名为>,key 和 value。单元
0 和 key 包含有数组单元的键名,
1 和 value 包含有数据。
* list(
$key,
$value); 不是真正的函数,是一种语言结构,获得数组当前元素的键名和值,并赋值给变量,list只能用于没有键名和
索引的数组
*
* 数组和变量之间的转换
* extract() 从数组中将变量导入到当前的符号表
* 检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。
* compact() 将变量变为数组
* 数组的分段和填充
* array_slice 在数组中取出一段
* array_slice(
$array,int offset,[int length,
false|
true]);
* 若偏移量为负数,则从数组末端开始数
* 若长度为负数,则序列将终止在距离数组末端这么远的地方
* array array_splice ( array &
$input , int
$offset [, int
$length =
0 [, mixed
$replacement ]] )
* 删除数组的某段,根据offset和length,可以用replacement替换被被删除的单元,替换个数和被替换的单元的个数一致,如果为数组,则键名
* 不保留,只替换值,也可以为字符串,如果没有删除的单元,那么替换的变量将会被插入到offset的位置
*
* 分割多个数组
* array_chunk(array,size,[
true|
false])
* 将一个数组分割成多个数组,每个数组的元素量为size,size小于
1将报错,可能最后一个数组的元素小于size,默认为
false,将丢掉原数组的
索引或键名
* 重新建立从
0开始的数字
索引,为
true时,保留原来的键名或
索引
*
* 数组的填充
* array_pad(array,length,value);
* 将数组用value填充到length长度,
* 若length小于等于数组的长度,则不填充
* 如果length为负数, 则向左填充
*
* 数组与栈
* array_push(array,value,,,);
* 将一个或多个值压入数组栈,返回此数组的元素个数
* array_pop(array);
* 返回一个数组的栈顶元素,如果数组为空或者不是数组,则返回NULL
*
* 数组与列队
* array_shift(array);
* 将返回数组的第一个元素,数组的元素个数减一,后面的元素向前移动,数字键名从
0开始重新技术,关联键名不变
* 若数组为空,或不为数组,则返回NULL
* array_unshift(array,value,,,);
* 将值插入数组的开头,所有的数字
索引将重新从
0开始技术,关联键名不变
*
* 数组排序
* 键值排序
* sort(array,[]); 将数组的值从小到大排序,操作成功返回
true,否则返回
false
* 忽略键名的数组排序
* rsort(array[],,),将数组的值从大到小排序,操作成功返回
true,否则返回
false
* 忽略键名的数组排序
* usort(array,funcname);调用用户定义的函数对数组排序
* 忽略键名的数值排序
*
* asort() 保留键名的数值排序
* arsort() 保留键名的数值排序
* uasort()
* =========
* 键名排序
* ksort() 用键名排序,主要用于关联数组
* krsort() 按照键名逆序排序
* uksort() 自定义函数排序
* =========
* 自然排序法排序
* natsort();自然排序
* natcasesort()自然排序,忽略大小写
*
* 数组的计算
* array_sum()计算数组元素的和
* 数组的合并
* array_merge(array1,array2);则键名会以连续方式重新
索引
* array1+array2 对于相同的键名只保留第一个
* 如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符
* array_merge_recursive() 递归合并数组
* 如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。
*
* 数组的差集
* array_diff(array1,array2,array3,,,);返回在array1中但不在其他数组中的元素
* array_diff_assoc(array1,array2,array3...);返回在array1中但不在其他数组中的元素,键名也做比较,只有键名和键值都相同时才算
*
* 数组的交集
* array_intersect(array1,array2,,,);返回数组的交集
* array_intersect_assoc(array1,array2,,,);返回数组的交集,键名也做比较
*
* 其他的数组函数
* range(start,max,step);创建一个start到max范围的一个数组,step为步长,默认为
1
* array_unique()除去数组中重复的值
* array_reverse();反转数组,若第二个参数为
true时则保留键名
* array_rand(array,size);随机返回数组中的一个或多个单元的键名,若为多个则返回包含多个键名的数组
* shuffle(array); 将数组的元素打乱,返回FALSE或TRUE
*
*
*
*/
//var_dump (is_array(
3));
$arr = explode(
",",
"I,am,hello,3");
print_r(
$arr);
echo implode(
$arr);
//array_values()
$arr = array_values(array(
'name'=>
'daiyutage',
"age"=>
20));
print_r(
$arr);
$arr = array_keys(array(
'name'=>
"daiyutage",
"age"=>
20));
print_r(
$arr);
var_dump(array_key_exists(
'name',array(
"name"=>
"daiyu")));
var_dump (array_flip((array(
"a"=>
1,
"b"=>
1,
"ddd"=>
33))));
echoin_array(
"daiyutage",array(
"name"=>
"daiyutage"));
$arr = array(
"name"=>
1);
echo isset(
$arr[
'name']);
$foo = array(
"Robert" =>
"Bob",
"Seppo" =>
"Sepi",
"name"=>
3324);
$bar = each(
$foo);
print_r(
$bar);
$bar = each(
$foo);
print_r(
$bar);
$info = array(
"name",
"haha");
unset(
$a);
list(
$a[
0],
$a[
1]) =
$info;
//print_r(
$a);
//
//
$name =
"diayutage";
//extract(array(
//
"name"=>
"xue",
//
"age"=>
22,
//
"school"=>
"lut"
//),EXTR_PREFIX_SAME,
'WX');
//
echo$name,
" ",
"$age",
" ",
"$school",
" ",
$Wx_name;
//课本,
1,
2,
3,《书读百遍,其义自现》
//compact
$firstname =
"Peter";
$lastname =
"Griffin";
$age =
38;
$color=
"red";
$rs = array(
"color",
"fx");
//
$result = compact(
"firstname",
"lastname",
"age",
$rs);
//print_r(
$result);
$arr = array(
"a",
"xx"=>
"b",
6=>
"c",
"d",
"e");
//print_r(array_slice(
$arr,
2,-
1,
true));
// array_splice(
$arr,
1,-
4,
"xxxxx");
// print_r(
$arr);
//print_r(array_chunk(
$arr,
2,
false));
//print_r(array_pad(
$arr,-
10,
33));
//print_r(array_push(
$arr,
"daiyutage",
"fff"));
//
echo array_pop(
$arrs);
//
echo array_shift(
$arr);
array_unshift(
$arr,array(
"hasdf",
"sf"));
$fruits = array(
"lemon",
"sdfsf"=>
"orange",
"banana",
"apple");
rsort(
$fruits);
function cmp(
$a,
$b){
return$a==
$b?
0:
$a<
$b?-
1:
1;
}
//
$brr = array(
"fsf",
"fs"=>
3,
10=>
2,
4=>
244,
3244);
//ksort(
$brr);
//print_r(
$brr);
//print_r(array_merge(
$fruits,
$brr));//则键名会以连续方式重新
索引
//
$a = array(
3=>
"red",
"hello",
"hello");
//
$b = array(
"red",
"fe");
//print_r(array_intersect_assoc(
$a,
$b));
//var_dump(range(
0,
12,
9));
//print_r(array_reverse(
$fruits));
//print_r(array_rand(
$fruits));
//(shuffle(
$fruits));
// print_r(
$fruits);
//
/*
* 时区设置
* date_default_timezone_
set()设置时区,时区不正确会报错抛出 E_WARNING 而不是 E_STRICT。不区分大小写
* date_defalut_timezone_get()获取时区
* 中国时区为Asia/Shanghai 或 PRC
*
*/
//
echo date_default_timezone_get();
//error_reporting(E_ALL);
//date_default_timezone_
set(
"PRC");
//
echo date_default_timezone_get();
//
/* CGI,PHP_mod,FastCGI的区别
* CGI 通用网关协议
* 当客户端请求服务器时,服务器fork一个进程,执行php.cgi程序对php页面进行解析,解析完进程销毁,返回服务器,
* 每次的请求过程,fork->执行->销毁,效率很低,耗费较多的系统资源
* php_mod
* php解释器以模块的形式同apache服务器一起启动,使用同一个进程
* FastCGI
* CGI的增强版,相当于一个中间层,使用一个进程,客户端->服务器->FastCGI->php解释实例,FastCGI用一个进程常驻内存,并创建多个CGI实例
* apache与FastCGI的通信为tcp通信,即FastCGI可以为本机,也可以为远程主机
* apache与CGI的通信为
进程间通信,必须为同一主机
* 小总结:
cgi : 需要开启若干个进程;
fastcgi : 需要额外开启一个进程;
php_mod :无需开启额外进程,因为PHP解析器已集成到web服务器中,跟web服务器在同一个进程。
*
* php_mod配置方式
* 在apache中,httpd.conf中
*
1 LoadModule php5_module
"C:/php5/php5apache2_2.dll"//大约line
1272 PHPinidir
"C:/php5/php.ini"3 //修改配置
4 DirectoryIndex index.html index.php//追加index.php
5 AddType application/x-httpd-php .php //line
408左右添加
* CGI配置方式
*
*
*/
//error_reporting(E_ALL);
//setcookie(
"haha");
/*
* cookie 与 session
* cookie[
'login'] =
true;
* A访问
* session盒子开
* session[
'login'] =
true;
* B访问
* session盒子开
* session[
'login'] =
true;
* session 在内存中,如果不区分每一个客户端的session,那么session将无法使用
* 所以需要将每一个请求的session与其客户端关联
* 方法:
* 当第一次请求服务器时,服务器生成一个session_id,
* 通过http头将session_id发送给浏览器,浏览器保存在将此session_id保存在本地的cookie中
* 当再次请求服务器时,浏览器发送此cookie,服务器收到后用本地cookie中的session_id来访问此客户端的session
*
* 当cookie被禁用时,如何使用session
* php默认有两种session传递方式
*
1.cookie
*
2.url 如.php?sid=xxx,或者post提交方式,手动通过url添加sid
* url 通过设置php.ini参数,自动添加到url
* session.use_cookie=
1
* session.use_>0
* session.use.trans_id=
1
* 然后php会自动在url加PHPSESSION=XXXX
*
*
3.文件保存sid,第一个页面把sessionid保存在文件中,第二个页面先从这个文件中取sessionid在判断是否登录
*
4.数据库保存sid,和文件原理相同
*
* 当cookie被禁用时,浏览请求时不会再发送cookie到服务器,那么服务器就会收不到cookie=PHPSESSION的,不能使用session
* 使用url
* 在前一个页面开启session后,用session_id()获得session_id,然后以get/post方式传递到后一个页面
* 第二个页面在用此sessio_id来设置 session_id(),然后开启session_start(),就可以使用前面穿过来的session
* 注意:session_id()必须在session_start()之前调用
*
*
*
*/
session_start();
$_SESSION[
'login'] =
"daiyutage";
//
$sid = session_id();
echo"另一个页面";').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('
').text(i));
};
$numbering.fadeIn(1700);
});
});
以上就介绍了php学习01,包括了include,进程间通信,对象,索引,静态方法方面的内容,希望对PHP教程有兴趣的朋友有所帮助。