php学习笔记

偶尔翻出以前学习php基础做的一些笔记,大体是当时觉得有必要留心的一些东西,怕一不留心删了又错过了,就贴在这里,做个纪念。

1、echo "连锁酒店了"."<br/>"; 与<br/>连接要用" "。echo两个变量可以echo"$a$b";或用连接符.--echo $a.$b;
1、表单checkbox的value最好写成name
2、echo里面多个空格只会看做一个空格,没有空格echo之间不会自动空格。
3、在双引号中,直接放变量($a)是可以的,但是如果要放入数组,要加大括号{$a['user']},主要在操作数据库时使用。
3、echo之间可以嵌入html代码,且会读出来---<?php echo "<div style='color:red';>连锁酒店了</div>"; ?>
3、一旦define设定了一个字符串常量,以后引用的时候都不要加上引号,直接使用,否则会被当做字符串看待。
3、如果代码比较复杂,可以通过file_put_contents输出信息到文件来查看信息。
3、return 在类方法里面使用表示该方法执行到此处结束,下面语句不执行。
4、双引号中间要用单引号,若是想输出双引号,双引号前面要加
5、只有.php文件里面的php语句才会被编译出来,若是html文件里面加入php语句不会编译。
6、八进制表示数字前必须加上 0(零),十六进制表示数字前必须加上 0x。
7、设定布尔值,$a=true,输出值为1,$a=false,输出值为空。==、>、<判断后的布尔值是0(输出为空,但判断可以是当做0)和1,不是true和false
8、值超过2147483647(32)自动转化成浮点型
9、定义数组里面key可以是整数和字符串,value可以是任意类型,浮点型数据会自动转化成整数。如$a=array(4.7=>"来说"); var_dump--$a["4"]="来说"; 但若是加引号 如$a=array("4.7"=>"来说");表示是字符串,var_dump输出用$f["4.7"]。当key的值是true和false时,输出会自动变成1和0
10、$a["xx"]="yy";若数组$a中有xx的key值则值替换为yy,若没有则将xx添加到数组中,删除数组中一个值用unset($a["xx"])实现。
11、array若为空,则会在目前最大的整数key值基础上加1作为key值,$array = array(1, 2); $array[]=6; var_dump($array)--[0]=>1 [1]=>1 [2]=>6
12、变量区分大小写。$a不等于$A,变量=$+变量名,变量名:必须以字母或下划线开头,后面接任意数字字母下划线(中文字符也可以,但不能使特殊字符,如《》/<>*)。$this为特殊变量不能赋值。
13、变量使用范围,在接下面的include/require文件里面适用,但在外面定义的变量在函数里面不适用,函数里面要调用外面的变量,要先使用global申明或适用$global[]超全局变量。
14、函数里面的变量只在函数里面生效,函数外无效,要保留之前操作的值,可以用static定义函数里面的变量。
15、常量区分大小写,可以用define、const定义--define("a", "Hello world.");--const a = 'Hello World';可以用defined检测是否定义该常量,defined('a')返回布尔值
16、@放在变量、函数、include()、常量等前可以忽略错误,即不会报错
17、逻辑运算符,false&&fun(),fun()不会调用,因为&&前面false已经确认该表达式结果是false
18、instanceof检查某变量是否某个类的实例或该实例的继承子类。
19、count()和sizeof(),可以计算某数组里面的元素个数。
20、list()将list里面的值当依次赋给变量 如:$a=array(3,5); list($b,$c)=$a; echo "$b和$c";
21、break;跳出循环,break后面可以加数字,表示跳出该循环算起几重循环。
22、continue如果符合条件,表示跳过下面的语句继续循环,
23、switch如果没加break,语句会从匹配到switch()里面值得地方开始依次执行下面的语句,不依据判断了。
24、switch里面case后面:可以用;代替,语句语义不变
25、流程控制if里面{相当于:,}相当于endif;switch里面{相当于:,}相当于endswitch;
26、引用文件可以用include和ruquire,区别是没有找到文件require会报错且停止,include报错之后语句任然会执行。
27、函数必须有定义才能调用,申明可以在文中任何位置,可以在调用后面。两种情况除外:1、要判断后才定义的函数,判断后才能调用;2、函数中的函数,上一级函数执行后里面函数才能调用。
28、函数中引用参数&,返回的值会覆盖外面的参数的值$a="123"; function bian(&$x){$x="456";}; bian($a);echo $a;---456
29、如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,例子:function the(){ echo "11";} $a="the"; $a();会执行the()函数

39、php双引号可以将里面的变量和转义字符解析出来。echo "his name is $a";--可以将$a弄出来,但若变量后面与中文字符紧接在一起也是解析不出来(转义字符无此状况)。单引号都不可以解析。
40、php变量区分大小写,但是自定义函数名不区分大小写。$GLOBALS['X']超级全局变量,变量区分大小写,所有小写$globals并不起超全局变量作用。
41、include和ruquire区别是,include若有错,报错后后面语句任然会执行,requrie报错后后面语句不会执行。
42、 是源代码的换行,<br/>是网页的换行
43、mt_rand替代了rand取随机数,速度快。

//类和对象
30、继承---class xinlei extends jiulei{} ,子类中的方法和参数会覆盖父类的,要调用父类的参数方法可以parent::fun()
31、类内调用参数和方法,数组,用$this->a(不要加$符号),$this->fun(),$this->arr;
类内静态参数和方法调用,用self::$a(要加上$符号)
类内常量的调用,用self::changliang(类里面常量没有$符号,调用自然不用)
类外常量调用,不用实例化,类名::changliang,实例化后也可以调用,$shili::changliang;
类外调用静态参数,不用实例化,类名::$参数,类名::方法()
类外调用里面的参数和方法,先实例化$new=new jiulei(); (调用方法)$new->fun();(调用参数)$new->var;
32、autoload。。。实例化类之前,要先(include/require)加载该类文件,autoload会自动根据实例化对象加载该类,要求:类名和文件名一样
33、构造函数一实例化就调用运行,__construct
析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
34、使用范围、类的成员(包括属性、方法)
public 任何地方
protected 该类及子类、父类
private 只在该类
35、self 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。
36、abstract 类只能被继承,不能实例,且子类必须实现所有抽象方法,且范围更宽泛。
37、重载,__set(),__get(),__isset(),__unset(),在类里面变量未定义时会调用这些方法。
38、在类内foreach类内元素,可以得到所有类属性(public、protect、private),类外遍历类只能得到(public)属性

//数组

所有数组操作以之为例子:
$a = array("long","guang","feng");
$b = array('a'=>'apple','b'=>'banana','c'=>'orange');
$c = range(1,10); $d = range('a','z');创建一个从1到10的数组,从a到z的数组。

1.php数组也可以print_r($arr)打印出来。
4、计算数组长度用count或sizeof()--count别名。count($arr);
5、遍历数组可以两种方法,一种从0开始,一种key不是数字
一:for($i=0;$i<count($arr);$i++)
二:foreach($arr as $key=>$value)
6、$a = each();第一次指向数组第一个元素,可以print_r(each($arr))打印第一个元素(0对应key,1对应value值),使用一次指针自动往后跳一次,都变成一个新数组,----each打印数组while(!!($a=each($jrr))){echo $a[0]."---".$a[1]."<br/>";} 若已经使用几次each要指针回到数组最初位置,使用reset($arr);函数即可。
7、两个感叹号表示真实存在的数据转化为布尔值。$a =5; !!$a=1;
8、list--将数组里的值分别赋给变量 例如:$arr = array('aa','bb');list($a,$b)=$arr; echo $a;==aa---list不适用于自定义key值得数组,即key为数字的才有效
9、list 和 each 组合可以遍历数组,while(!!list($a,$b)=each($arr)){ echo $a."--".$b."<br/>";}
9、二维数组打印:1、for()
2、for($i=0;$i<count($arr);$i++){
  foreach($arr[$i] as $value){         //或while(!!list($a,$b)=each($arr[$i]))
  echo $value;
  }
}
9、is_array()判断是否是数组
10、array_unique();除去数组中重复的值(key值不同值相同也会去除,去除后面出现的数组元素),要赋给新数组,原数组并没变化。
11、array_flip(),交换数组中的键和值,要赋给新数组,原数组并没变化。$arr=array('a'=>'long');$brr =array_flip($arr); print_r($brr);===array('long'=>'a');
12、sort();按数字大小、字母先后给数组里面的元素排序,值键对都改变了,中文亦有效,改变原数组,返回布尔值,第二参数可选(SORT_NUMBER/SORT_STRING),按照数组看整体,按字符串只看第一位大小。如2和12若按字符串排序12在前。
asort()相比sort保留了原数组的键值对。
ksort()相比sort区别是按照键排序而不是按照值来排序。
加(r)arsort/krsort在已得数组基础上反转排序,键值对不变。
shuffle();数组元素随机排序,打乱,原数组已经改变。
array_reverse()反向排序,要赋给新变量,原数组不变(之前几个函数数组已改变)。
13、array_unshift(),在数组开头插入数据,array_unshift($arr,"插入的元素");
array_push()数组尾部插入元素。
array_shift(),删除数组开头的元素。
array_pop(),删除数组结尾元素。
array_rand($arr,$i),从数组随机取$i个元素。若是只有一个可以echo $arr[array_rand($arr,1)]打印,
14、current($arr),取得数组当前元素值。并不会和each一样指针向后移一位。
next($arr),指针向后移动一位,并返回新元素,和each不同,each是返回当前元素之后指针再向后移动一位。
prev($arr)和next()使用相反。
15、array_count_values($arr),统计数组中值出现次数,返回也是数组,之前的值变成key,次数变成value。
16、extract($b);将数组key值变成变量名称了,即可以直接echo $a;值为apple;

 //php文件目录操作

文件目录操作 例子:$path = 'C:/document/www/xiangmu/xx.php'; $a ='xx.php';
17、basename($path)=获取文件部分===xx.php
dirname($path)=获取目录部分 ===C:/document/www/xiangmu 注意没有后面的反斜杠(/)
pathinfo($path)=获取$path的信息并赋给一个数组。里面有key:dirname、basename、filename、extension。
realpath($a)=获取相对文件的绝对路径====C:/document/www/xiangmu/xx.php
filesize($path)=获取xx.php文件的大小===555要转化成kb除1024;
disk_free_space('C:');=获取磁盘可用空间===555555555
disk_total_space('C:');=获取磁盘总空间===666666666
fileatime($paht);=获取文件最后查看日期====返回的事时间戳(ms),要要用date()函数转化。
filectime()=最后权限/所有者等--改变时间==
filemtime()=最后文件里面内容修改时间==
18、$a = fopen('file.txt','w');打开一个文件,没有自动创建
fwrite($a,'word',strlen($a));往文件里面写入word,
fclose($a);关闭文件


//字符串
19、php输出字符串若连续含有多个空格,浏览器也只显示一个空格,但strlen()计算字符串长度是计算多个空格的。这些字符串存入数据库还是有空格占用空间,所以一般存入数据库前会做处理。
trim($str),a去除字符串两端空格。
ltrim、rtrim去除字符串左、右侧空格。
nl2br($a),将字符串中的 转化成<br/>。
htmlentities($a),将所有字符串转化成html,包括中文字符也转化成乱格式。即echo “<b>niuxx</b>”;转化后也是直接输出<b>niuxx</b>,而不是加粗的niuxx。
htmlspecialchars($s);将字符串所有特殊字符转化成html。
strip_tags(),去掉所有html特殊字符。
addslashes(),在' " null 前加上反斜杠()
stripslashes(),删除' " null 前的反斜杠()
strtoupper(),字符串转化成大写
strtolower(),字符串转化成小写


//函数
20、$a=6,$b=4;function xx($a,$b){},调用函数xx($a,$b);操作并不会改变外面$a的值,
若引用(function变量名称前加&符号)function(&$a,$b),则函数$a会改变,相当重新赋值了。
21、全局变量--函数里面变量前加global表示全局,$a = 4;function xx(){ global $a; $a =9;} xx()运行后输出echo $a;值为9,即函数外面$a的值也变了。

22、魔法常量
__FILE__取得当前文件目录文件名--c:wampwww1.php


//时间:
23、date('Y-m-d H:i:s');得到的时间少8个小时,要通过date_default_timezone_set('Asia/shanghai');
24、setcookie()改变原来cookie()值,要两次刷新才能生效,第一次刷新值覆盖了之前的,两次刷新才能获取到最新的值。


//session和cookie
25、删除cookie两种方法:一、把值设为空setcookie('name','');二、设置时间过期setcookie('name','lee',time()-1)
26、session();使用前要运行session_start()函数,赋值直接$_SESSION['a'] = 'xx';删除session,可以用unset($_SESSION['a']);全部session用session_destory();

//文件上传
27、$_FILES[]上传文件生成$_FILES[]二维数组。$_FILES['ming']['xx']xx有多个属性。
is_uploaded_file();判断是否上传。is_uploaded_file['ming']['tmp_name']
move_uploaded_file(),移动文件,move_uploaded_file($_FILES['ming']['tem_name'],'uploads/'.$_FILES['ming']['name']);

28、mysql_fetch_array()返回的是一条结果集数组,要是mysql查询有多条结果,可以用while(!!$r = mysql_fetch_array($result))循环输出结果。

疑问:
1、为毛前面foreach了数组,后面用each无效???
$drr = array("niuca"=>"龙辰","niubi"=>"人热","niuren"=>"玛丽");
print_r($drr);
echo "<br/>";
foreach($drr as $k=>$v){
echo $k."--".$v."<br/>";
}

$aa = each($drr);
echo $aa;
print_r($aa);

each没有效果????

2、为毛if(!preg_match('/^[1-9]{1}[0-9]{4,10}$/',$qq)){
alert_back('qq格式有误');
}
要是不加/^ $/就不能识别出长度超过11位的???

3、弄清正则表达式要转义的字符和php语句里面要转义的字符的区别。正则里面({}、()、/、$)
php语句里面{}、()都不用转义

4、dreamweaver里面使用复杂式变量,不能放<?xml ?>,因为php里面的启示标签会先和<?xml ?>后面?>匹配而出错???

5、xmlHttp.open("post","check.php",true);里面true异步传输的意义???

6、 public function index(){
echo '<pre>';
print_r($_SERVER);
}
为什么print_r打印出的还是无规则数组,加了pre之后就规则排序了

7、怎么打印所有define定义的常量。

递归函数
<?php

function tree($directory){

   $mydir = dir($directory);

   echo "<ul> ";

   while($file = $mydir->read()){

     if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!="..")){

       echo "<li><font color="#ff00cc"><b>$file</b></font></li> ";

       tree("$directory/$file");  //递归

     }else{

     echo "<li>$file</li> ";

    }

  }

   echo "</ul> ";

   $mydir->close();

 }

我们来手动设置 session 的生存期: session_start();  

// 保存一天   $lifeTime = 24 * 3600;   setcookie(session_name(),session_id(),time() + $lifeTime,"/");   >   

其实 Session 还提供了一个函数 session_set_cookie_params(); 来设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用:   

// 保存一天   <?php   $lifeTime = 24 * 3600;   session_set_cookie_params($lifeTime);   session_start();   $_session["admin"] = true; >

原文地址:https://www.cnblogs.com/lola/p/8030321.html