NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
1、php嵌套模式 ~~~ <?php ... ?> <? ... ?> <% ... %> <script language="php"> ... </script> <?=$hello ?> ~~~ 2、php注释 ~~~ // 或 /* ... */ 或 # ~~~ 3、变量 ~~~ 1、命名规则:(1)不能以数字开头;(2)不能使用运算符+-*/;(3)可以使用关键字;(4)区分大小写;(5)变量名称一定要有意义。$aaaBbbCcc ~~~ ~~~ 2、$$four //可变变量,很少用 ~~~ ~~~ 3、变量的引用赋值:$two = &$one ~~~ ~~~ 4、变量的类型:int,bool,float(double,real),string;array,object;resource,null ~~~ ~~~ 5、var_dump()//检验变量类型 ~~~ ~~~ 6、变量的声明 ~~~ ~~~ $int = 10; //十进制声明 ~~~ ~~~ $int = 045; //0开头是8进制 ~~~ ~~~ $int = 0xff; //0x开头是16进制 ~~~ ~~~ $float = 3.14E2 //3.14乘以10的二次方 ~~~ ~~~ $str = <<<one ~~~ ~~~ …… ~~~ ~~~ one;//定界符声明字符串 ~~~ ~~~ $str = `abc`; //反引号声明的字符串 ~~~ ~~~ 7、数据类型的强制转换: ~~~ ~~~ setType($aa,int)//强制转换成整型 ~~~ ~~~ intval($aa);//强制转换成整型 ~~~ ~~~ floatval($aa);//强制转换成浮点型 ~~~ ~~~ stringval($aa);//强制转换成字符串 ~~~ ~~~ 8、声明类型的变量:$a = (int)”123abc”; ~~~ ~~~ 9、与变量有关的函数: ~~~ ~~~ isset() //判断变量是否存在 ~~~ ~~~ empty() //判断变量是否为空 ~~~ ~~~ unset() //删除变量 ~~~ ~~~ setType() //变量类型转换 ~~~ ~~~ getType() //获取变量类型 ~~~ ~~~ is_bool() ~~~ ~~~ is_int(),is_integer(),is_long() ~~~ ~~~ is_string() ~~~ ~~~ is_float(),is_double(),is_real() ~~~ ~~~ is_array() ~~~ ~~~ is_object() ~~~ ~~~ is_resource() ~~~ ~~~ is_null() ~~~ ~~~ is_scalar() //判断是否为标量(int,float,bool,string) ~~~ ~~~ is_numberic() //判断是否是数字 ~~~ ~~~ is_callable() //判断是否为有效的函数名 ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") 4、常量 [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ define("HOME","aaa");//其值只能是标量类型(int,string,bool,float) ~~~ ~~~ defined("HOME"); //判断常量是否存在,注意是defined,多个d ~~~ ~~~ M_PI //3.14…… ~~~ ~~~ __FILE__ //当前文件名 ~~~ ~~~ __LINE__ //当前行 ~~~ ~~~ __FUNCTION__//当前函数名 ~~~ ~~~ __PHP__VERSION //php ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") 5、php运算符与表达式 ~~~ 1、$a++,++$a,$a—,—$a 的区别 ~~~ ~~~ 2、逻辑运算符 &&和|| 的短路问题 ~~~ ~~~ 3、反引号:$str = `ipconfig /all`; //执行shell命令,并返回结果 ~~~ 6、php流程控制 ~~~ 1、如果判断范围用if……else……,如果单个值匹配用switch……case…… ~~~ ~~~ 2、for,while循环; ~~~ 7、php常用函数 [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ /*时间函数*/ echo '<h4 style="color:#f00">时间函数</h4>'; echo time().'<br />';//当前时间unix时间戳 echo date("Y:m:d H:i:s").'<br />';//当前格式化时间 /*字符串函数*/ echo '<h4 style="color:#f00">字符串函数</h4>'; $word = " abc d ef "; echo strlen($word).'<br />';//获取字符串长度 空格也算 echo implode("-",array(1,2,3,4)).'<br />';//数组转换成字符串,用“-”连接 print_r(explode("-","1-2-3-4"));//字符串转换成数组 以“-”分割 echo '<br />'; echo ltrim($word,'b').'<br />';//剔除左边空格 echo rtrim($word,'b').'<br />';//剔除右边空格 echo trim($word,'b').'<br />';//剔除两边空格 echo substr($word,0,3).'<br />';//ab 截取字符串 若第二个参数为负数,则从倒数第几个开始取,但是截取规则还是从左到右 echo str_replace("b","_",$word).'<br />';//查找与替换字符串 echo strtoupper($word).'<br />';//小写转大写 echo strtolower('ABCDEF').'<br />';//大写转小写 echo ucfirst('abc').'<br />';//首字母转大写,只操作首字母 echo htmlentities('<br /> &nbsp;').'<br />';//打印标签 echo substr_count('abcdagca','a').'<br />';//返回第二个字符串在第一个字符串中出现的次数 echo strpos('abcdagca','a').'<br />';//查找a在第一个字符串中第一次出现的位置,第一个位置为0 echo strrpos('abcdagca','a').'<br />';//查找a在第一个字符串中最后一次出现的位置,第一个位置为0 echo strstr('sddabdsabg','ab').'<br />';//截取ab以后的字符串(包括ab) echo strrchr('sdfabkjkabsdf','ab').'<br />';//截取最后一个ab以后的字符串(包括ab) echo addcslashes("abcdefghijklman","akd").'<br />';//查找字符串中akd,并且在前面加上\ echo str_pad('abc',10,'a',0).'<br />';//字符串填充函数: 把字符串abc左填充a到10位,0:左填充;1:右填充;2:两边填充 默认左填充 echo strcmp('b','c').'<br />';//字符串比较函数:阿克斯码值,返回1 0 -1 echo number_format(1235.3254,2,":",";").'<br />';//格式化数字函数: 2:保留两位小数,四舍五入 ::小数点用冒号表示,;:三位分隔符 ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") 8、php数组 ~~~ 1、数组的遍历 ~~~ ~~~ for($i=0; $i<count($arr); $i++){ echo "\$user[{$i}]=".$arr[$i]."<br>"; } ~~~ ~~~ foreach($arr as $key=>$val){ echo $key."=========>".$val."<br>"; } ~~~ ~~~ while($arr=each($user)){//$user是一个数组 echo $arr["key"]."---->".$arr["value"]."<br>"; } ~~~ ~~~ //list接收数组元素 list($name, $age, $sex)=array("zansan", 10, "nnnnn"); ~~~ ~~~ 2、数组的处理函数 ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ /*常用数组函数*/ 更多详情 http://www.shouce.ren/api/view/a/3635 count($arr);//返回数组元素的个数 或sizeof() ~~~ ~~~ array_count_values($arr);//所有元素出现的个数 返回数组 ~~~ ~~~ array_unique(array(0,1,2,1,2,3));//删除数组中重复元素,键值不重排,即键值不变 in_array('b',$arr);//判断b是否在数组中 返回1或0 array_keys($arr);//返回数组里面的key 组成新的索引数组 array_key_exists('k1',$arr);//判断k1这个键是否在数组里 返回1或0 array_values($arr);//把数组转换成索引数组,键值从0开始 key($arr);//返回当前指针所指向的键值 k0 current($arr);//返回当前指针所指向的元素值 a each($arr)//当前指针所指向的元素和键值组成新的数组,并且指针下移 next($arr);//指针下移,然后返回该指针元素值 prev($arr);//指针上移,然后返回该指针元素值 reset($arr);//指针重置,然后返回该指针的元素值 a end($arr);//指针移到最后,然后返回该指针的元素值 c array_push($arr,'d','e');//把d和e作为元素追加到$arr数组里,键值为索引最小数 返回值为数组长度 5 array_unshift($arr,'t1','t2');//把t1、t2...作为元素插入到数组的前面,键值从0开始,后面的索引键值依次增加,关联键值不便,元素顺序不变 返回值为数组长度 array_pop($arr);//删除数组中的最后一个元素,返回值为最后一个元素 array_shift($arr);//删除数组中的第一个元素,返回值为第一个元素 array_pad($arr,10,"t10");//数组用‘t10’作为元素添加到10个,键值自动累计 sort($arr);//数组重新排序成索引数组,与array_values的区别是按照元素的阿克斯码排序 rsort($arr);//数组重新排序成索引数组,与array_values的区别是按照元素的阿克斯码倒叙排序 array_combine(array('a','b','c','d','e'),$arr);//改变数组的键值,元素个数必须一致 array_merge($arr,array('a','b','c'));//合并数组 array_slice($arr,2,1);//截取数组,从第3个开始取1个 array_splice($arr,2,1);//截取出来的数组然后删除 原数组已经改变 json_encode($arr);//把数组转换成json格式 ~~~ ~~~ array_flip($arr);//数组元素顺序反过来显示 ~~~ ~~~ array_reverse($arr);//键值互换 ~~~ ~~~ func_get_args() //获取函数的参数组成一个数组 func_num_args() //统计函数参数的个数 array_filter(arrar(),fun) //用回调函数过滤数组中的元素… ~~~ ~~~ array_walk(arrar(),fun) //数组中每个成员应用用户函数 ~~~ ~~~ array_map(fun,arrar()) //将回调函数作用到给定数组的单元上 ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ 3、数组的排序(一维数组) ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ /**    * sort 按数组的value升序排序    * @ Tips key from 0,1... 键重新排,原有数组被改变    * @ return Boolean 1 or 0     **/ $cars = array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB"); sort($cars); print_r($cars);//Array ( [0] => BMW [1] => SAAB [2] => Volvo ) /** * rsort 按数组的value降序排序 * @ Tips key from 0,1... 键重新排,原有数组被改变 * @ return Boolean 1 or 0 **/ $cars = array('v'=>"Volvo",'b'=>"BMW",'s'=>"SAAB"); rsort($cars); print_r($cars);//Array ( [0] => Volvo [1] => SAAB [2] => BMW ) /** * asort 按数组的value升序排序 * @ Tips 键不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43"); asort($age); print_r($age);//Array ( [Bill] => 35 [Steve] => 37 [Peter] => 43 ) /** * arsort 按数组的value降序排序 * @ Tips 键不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $age=array("Steve"=>"37","Bill"=>"35","Peter"=>"43"); arsort($age); print_r($age);//Array ( [Peter] => 43 [Steve] => 37 [Bill] => 35 ) /** * ksort 按数组的key升序排序 * @ Tips 键值不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); ksort($age); print_r($age);//Array ( [Bill] => 35 [Peter] => 43 [Steve] => 37 ) /** * krsort 按数组的key降序排序 * @ Tips 键值不变,原有数组被改变 * @ return Boolean 1 or 0 **/ $age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); krsort($age); print_r($age);//Array ( [Steve] => 37 [Peter] => 43 [Bill] => 35 ) ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ 4、数组的排序(二维数组) ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ <?php $arr = array( 'd' => array('id' => 5, 'name' => 1, 'age' => 7), 'b' => array('id' => 2,'name' => 3,'age' => 4), 'a' => array('id' => 8,'name' => 10,'age' => 5), 'c' => array('id' => 1,'name' => 2,'age' => 2) ); //方法一:自定义排序方法 function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){ if(is_array($multi_array)){ foreach($multi_array as $row_array){ if(is_array($row_array)){ $key_array[]=$row_array[$sort_key]; }else{ return false; } } }else{ return false; } array_multisort($key_array,$sort,$multi_array); return $multi_array; } echo '<pre>'; print_r(multi_array_sort($arr,'id')); echo '</pre>'; //方法二:推荐方法(手册) foreach($arr as $k=>$v){ $name[$k]=$v['name']; } array_multisort($name,SORT_ASC,$arr); echo '<pre>'; print_r($arr); echo '</pre>'; /** * 多维数组根据value进行排序,value可能是number也可能是string */ $a = array( '001'=>array("name"=>"LHL","age"=>"25","count"=>array(2,3)), '002'=>array("name"=>"XYQ","age"=>"22","count"=>array(3,1)), '003'=>array("name"=>"aNN","age"=>"24","count"=>array(1,2)), ); // function my_sort($x,$y){//安装$value进行排序并且value is number // return $x['count'][1]<$y['count'][1]; // } function my_sort($x,$y){//安装$value进行排序并且value is string return strcasecmp($x['name'],$y['name']); } uasort($a,"my_sort");//usort():外层数组的键重排 echo '<pre>'; print_r($a); echo '</pre>'; ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") 8、php面向对象 [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ 1、魔术方法:在不同时刻为了完成某一功能自动调用的方法 function __construct(){//构造方法 第一个调用的方法,初始化成员属性 } function __destruct(){//析构方法 对象释放前最后调用的方法 } //和封装有关的方法 ~~~ ~~~ __get()//获取成员属性时自动调用的方法 ~~~ ~~~ /* ~~~ ~~~ * private $name ~~~ ~~~ * 通过__get()方法可以外部调用 $name ~~~ ~~~ */ private function __get($proName){ ~~~ > ~~~ > return $this->$proName; > ~~~ ~~~ } ~~~ ~~~ __set()//设置成员属性时自动调用的方法 ~~~ ~~~ /* ~~~ ~~~ * private $name ~~~ ~~~ * 通过__set()方法可以外部设置 $name ~~~ ~~~ */ ~~~ ~~~ private function __set($proName,$proValue){ ~~~ > ~~~ > return $this->$proName=$proValue; > ~~~ ~~~ } ~~~ ~~~ __isset()//在类外部使用isset($p->name)判断私有属性private $name是否存在时使用 ~~~ ~~~ private function __isset($proName){ ~~~ > ~~~ > return isset($this->$proName) > ~~~ ~~~ } __unset()//删除私有成员的时候自动调用的方法 private function __unset($proName){ ~~~ > ~~~ > unset($this->$proName); > ~~~ ~~~ } ~~~ ~~~ __call()//调用类中不存在的方法时调用该方法 ~~~ ~~~ function __call($nethoName,$args){ ~~~ > ~~~ > echo “你调用的方法{$methoName}参数”; > ~~~ > > ~~~ > print_r($args); > ~~~ > > ~~~ > echo “不存在”; > ~~~ ~~~ } ~~~ ~~~ __toString()//echo $p = new className 使之返回一个字符串 ~~~ ~~~ function __toString(){ ~~~ > ~~~ > return “string”; > ~~~ ~~~ } ~~~ ~~~ __clone()//克隆对象$p1 = clone $p 时调用的方法。为复本初始化 function __clone(){ ~~~ > ~~~ > $this->name = “复本张三”;//$this 代表复本 $that 代表原本 > ~~~ ~~~ } ~~~ ~~~ __autoload() //自动加载,在类外部使用(加载类的时候使用很方便) ~~~ ~~~ function __autoload($className){ ~~~ > ~~~ > include “./”.$className.”.class.php”; > ~~~ ~~~ } ~~~ ~~~ $o = new One();//自动加载当前目录下的One.class.php这个类 ~~~ ~~~ $t = new Two();//自动加载当前目录下的Two.class.php这个类 ~~~ ~~~ //serialize()和unserialize()把对象转串行化和反串行化 ~~~ ~~~ $str = serialize($p);//$p = new ClassName() 由此可以把$str(对象)写进文件或者数据库 ~~~ ~~~ $unstr = unserialize($str);//通过$unstr->可以访问该类里面的属性和方法 ~~~ ~~~ __sleep()//serialize()序列化时自动调用的方法,可以将一个对象部分串行化 function __sleep(){ ~~~ > ~~~ > return array("name","age"); > ~~~ ~~~ } ~~~ ~~~ __weakup()//unrialize()反序列化时自动调用的方法,即对象反序列号时初始化函数 function __wakeup(){ ~~~ > ~~~ > $this->name = "张三"; > ~~~ > > ~~~ > $this->age = 20; > ~~~ ~~~ } ~~~ ~~~ 2、常用关键字 ~~~ ~~~ final:修饰类和方法,final修饰类不能继承,final修饰方法不能重载覆盖 ~~~ ~~~ static:静态,修饰属性和方法。 ~~~ > ~~~ > 1、ClassName::$conunty 这样的方式访问静态属性 > ~~~ > > ~~~ > 2、self::$conunty 类内部访问 > ~~~ > > ~~~ > 3、static function funName(){//静态方法中不能访问非静态成员 > ~~~ > ~~~ > $this->$var//这种方法是错误的 > ~~~ > ~~~ > } > ~~~ ~~~ const:只能修饰成员属性,在类中声明常量,用const。访问方式和static静态访问方式一样 ~~~ ~~~ $this,selef,parent ~~~ ~~~ 3、三大特性:封装、继承、多态 ~~~ ~~~ //封装性 private public protected ~~~ ~~~ //继承性 ~~~ ~~~ extends ,private 子类不能继承使用 protected ~~~ ~~~ 子类重载父类的方法:定义与父类相同的成员方法 ~~~ ~~~ function say(){ ~~~ > ~~~ > parent::say($a,$b) > ~~~ > > ~~~ > …… > ~~~ ~~~ } ~~~ ~~~ function __construct(){ ~~~ > ~~~ > parent::__construct($a,$b) > ~~~ > > ~~~ > …… > ~~~ ~~~ } ~~~ ~~~ 4、抽象类、接口、多态 抽象类是一种特殊的类,接口是特殊的抽象类,多态会使用到抽象类或者接口 ~~~ ~~~ 抽象类:有abstract修饰的类;并且里面至少有一个抽象方法;抽象类不能实例化对象;要想使用抽象类,就必须用一个类去继承抽象类,而且必须重写抽象方法。 ~~~ ~~~ 抽象类和接口的作用是定义一些规范,让子类去继承 ~~~ ~~~ abstract class Demo {//这是一个完整的抽象类 ~~~ > ~~~ > var $name; > ~~~ > > ~~~ > abstract function test();//抽象方法,没有方法体 > ~~~ > > ~~~ > function say(){ > ~~~ > ~~~ > } > ~~~ ~~~ } ~~~ ~~~ class Hello extends Demo{//该类继承抽象类 ~~~ > ~~~ > function test(){ > ~~~ > ~~~ > …… > ~~~ > ~~~ > } > ~~~ ~~~ } ~~~ ~~~ 接口:接口中的方法必须都是抽象方法,方法不用abstract修饰;接口中的成员属性只能声明常量,不能声明变量;接口中的成员的访问权限必须都是public ~~~ ~~~ interface Demo{//接口的声明 ~~~ > ~~~ > const HOST=”localhost”; > ~~~ > > ~~~ > function fun1(); > ~~~ > > ~~~ > function fun2(); > ~~~ ~~~ } ~~~ ~~~ echo Demo::HOST; ~~~ ~~~ interface Demo2 extends Demo{//接口继承接口 ~~~ > ~~~ > function fun3(); > ~~~ > > ~~~ > function fun4(); > ~~~ ~~~ } ~~~ ~~~ interface Demo3{ ~~~ > ~~~ > function fun5(); > ~~~ > > ~~~ > function fun6(); > ~~~ ~~~ } ~~~ ~~~ class Hello{ ~~~ ~~~ } ~~~ ~~~ class extends Hello implements Demo2,Demo3{//接口的实现、使用 ~~~ > ~~~ > function fun1(){ > ~~~ > > ~~~ > } > ~~~ > ~~~ > function fun2(){ > ~~~ > > ~~~ > } > ~~~ > ~~~ > function fun3(){ > ~~~ > > ~~~ > } > ~~~ > ~~~ > function fun4(){ > ~~~ > > ~~~ > } > ~~~ > ~~~ > function fun5(){ > ~~~ > > ~~~ > } > ~~~ > ~~~ > function fun6(){ > ~~~ > > ~~~ > } > ~~~ ~~~ } ~~~ ~~~ 多态: ~~~ > interface Test{ >         function aaa(); >         function bbb();    >     } >     class One implements Test{ >         function aaa(){ >             echo "aaaaaaaaaaa";    >         } >         function bbb(){ >             echo "bbbbbbbbbbbb";    >         } >     } >     class Two implements Test{ >         function aaa(){ >             echo "111111";    >         } >         function bbb(){ >             echo "222222";    >         } >     } >     $a = new One;//Two >     $a->aaa(); > >     $a->bbb(); [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") 9、php正则表达式: [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") ~~~ //preg_match 单个匹配,如果有一个则匹配成功 if (preg_match ("/php/i", "PHP is the web scripting language of choice.")) { print "A match was found."; } else { print "A match was not found."; } //preg_match_all 匹配所有 int preg_match_all ( string $pattern , string $subject , array $matches [, int $flags ] ) //preg_replace mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit ] ) //在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。 //str_ireplace 忽略大小写替换 ~~~ [![复制代码](https://common.cnblogs.com/images/copycode.gif)](javascript:void(0); "复制代码") 10、文件处理:详解文件处理类 If the copyright belongs to the longfei, please indicate the source!!!