目录:
——数组
——函数
——字符串操作
——面向对象特征
——正则表达式
——cookies
一.数组
PHP 中的数组分为索引数组和关联数组
索引数组初始化和输出
$a=array("abc","def","ghi"); print_r($a); 赋值方式: $a=array("a","b","c"); $a[0]=a; $a=array('0'=>'a','1'=>'b','2'=>'c'); 取值方式: $a0=$a['0']; for循环取值: for($i=0;$i<3;$i++){ echo 'a'.$i.'='.$a[$i]; } foreach循环取值: foreach($a as $k=>$v){ each 'a'.$key.'='.$v; }关联数组的初始化和输出
<?PHP $fruit=array('apple'=>"APPLE",'banana'=>"BANANA",'pineapple'=>"APINEAPPLE"); print_r($fruit); 输出结果:Array ( [apple] => APPLE [banana] => BANANA [pineapple] => APINEAPPLE ) 赋值方式: $furit=array('apple'=>'APPLE'); $furit['apple']='APPLE'; 取值方式: $furit0=$furit['apple'] foreach循环访问关联数组: foreach($furit as $k=>$v){ echo 'key['.$key.']='.$v; }
二.函数
自定义函数 <?php function say() { echo 'hello world'; } 有返回值的函数 function add($a) { return $a+1; } 返回多值的函数: function numbers() { return array(1, 2, 3); } list ($one, $two, $three) = numbers(); 调用可变函数,规则:变量名+(); <?php function func() { echo 'my function called.'; } $name = 'func'; $name();//调用可变函数 class book { function getName() { return 'bookname'; } } $func = 'getName'; $book = new book(); $book->$func(); 字符串替换函数str_replace <?php $str = 'I am jobs'; $str=str_replace('jobs','steven jobs',$str); echo $str; 判断函数是否存在: <?php function func() { echo 'exists'; } $name = 'func'; if (function_exists('func')) { //判断函数是否存在 $name(); } 判断类是否存在: class MyClass{ } // 使用前检查类是否存在 if (class_exists('MyClass')) { $myclass = new MyClass(); } 判断文件是否存在: $filename = 'test.txt'; if (!file_exists($filename)) { echo $filename . ' not exists.'; }
三.字符串操作
<?php //使用双/单引号/定义一个字符串 $hello="hello world1"; $hello='hello world2'; //heredoc语法结构 $hello=<<<TAG hello world3 TAG; echo $hello; 单/双引号的区别:双引号允许包含 字符串变量 <?php $str='hello'; echo "str is $str"; //运行结果: str is hello echo 'str is $str'; //运行结果: str is $str 字符串链接:用“.”链接字符串 $hello='hello'; $world=' world'; $hi = $hello.$world; 除去首位空格: trim去除一个字符串两端空格。 rtrim是去除一个字符串右部空格,其中的r是right的缩写。 ltrim是去除一个字符串左部空格,其中的l是left的缩写。 echo trim(" 空格 ")."<br>"; echo rtrim(" 空格 ")."<br>"; echo ltrim(" 空格 ")."<br>"; 字符串长度: $str = 'hello'; $len = strlen($str); echo $len;//输出结果是5 中文字符串长度: $str = "我爱你"; echo mb_strlen($str,"UTF8");//结果:3 字符串截取: 函数说明:substr(字符串变量,开始截取的位置,截取个数) $str='i love you'; //截取love这几个字母 echo substr($str, 2, 4); 中文字符串截取: $str='我爱你,中国'; //截取中国两个字 echo mb_substr($str, 4, 2, 'utf8'); 字符串查找: 函数说明:strpos(要处理的字符串, 要定位的字符串, 定位的起始位置[可选]) $str = 'I want to study at imooc'; $pos = strpos($str, 'imooc'); echo $pos;//结果显示19,表示从位置0开始,imooc在第19个位置开始出现 字符串替换: 函数说明:str_replace(要查找的字符串, 要替换的字符串, 被搜索的字符串, 替换进行计数[可选]) $str = 'I want to learn js'; $replace = str_replace('js', 'php', $str); echo $replace;//结果显示I want to learn php 格式化字符串: 函数说明:sprintf(格式, 要转化的字符串) $str = '99.9'; $result = sprintf('%01.2f', $str); echo $result;//结果显示99.90 说明:1、这个 % 符号是开始的意思,写在最前面表示指定格式开始了。 也就是 "起始字符", 直到出现 "转换字符" 为止,就算格式终止。 2、跟在 % 符号后面的是 0, 是 "填空字元" ,表示如果位置空着就用0来填满。 3、在 0 后面的是1,这个 1 是规定整个所有的字符串占位要有1位以上(小数点也算一个占位)。 如果把 1 改成 6,则 $result的值将为 099.90 因为,在小数点后面必须是两位,99.90一共5个占位,现在需要6个占位,所以用0来填满。 4、在 %01 后面的 .2 (点2) 就很好理解了,它的意思是,小数点后的数字必须占2位。 如果这时候,$str 的值为9.234,则 $result的值将为9.23. 为什么4 不见了呢? 因为在小数点后面,按照上面的规定,必须且仅能占2位。 可是 $str 的值中,小数点后面占了3位,所以,尾数4被去掉了,只剩下 23。 5、最后,以 f "转换字符" 结尾。 字符串合并和分割: 合并函数说明:implode(分隔符[可选], 数组) $arr = array('Hello', 'World!'); $result = implode('', $arr); print_r($result);//结果显示Hello World! 分割函数说明:explode(分隔符[可选], 字符串) $str = 'apple,banana'; $result = explode(',', $str); print_r($result);//结果显示array('apple','banana') 字符串转义: 函数说明:用于对特殊字符加上转义字符,返回一个字符串 $str = "what's your name?"; echo addslashes($str);//输出:what\'s your name?
类、类属性、类方法 class Car { public $name='Car01'; public function getName() { return '汽车'; } public static function getType(){ return 'Car'; } } $car = new Car(); echo $car->getName(); echo Car::getType(); 说明: 使用关键字static修饰的,称之为静态方法,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号::。 构造器的使用: class Car{ public $name='Car01'; public $color='Red'; private $price='12800'; //构造方法 function __construct(){ echo 'new Car'; } public function getName(){ return $this->name; } public static function getTypeName(){ return 'Car'; } } $car=new Car(); $car01=$car->getName(); $carType=Car::getTypeName(); echo $car01,$carType; 打印结果: new Car Car01 Car 可以给构造方法添加参数: function __construct($name,$color){ echo 'new Car'; } 调用: $car=new Car('Car02','Black'); 析构函数:释放不用的对象 function __destruct(){ echo 'destory object'; } $car=NULL;时自动调用。 php单例模式: class Car { private function __construct() { echo 'object create'; } private static $_object = null; public static function getInstance() { if (empty(self::$_object)) { self::$_object = new Car(); //内部方法可以调用私有方法,因此这里可以创建对象 } return self::$_object; } } //$car = new Car(); //这里不允许直接实例化对象 $car = Car::getInstance(); //通过静态方法来获得一个实例 static 关键字: class Car { private static $speed = 10; public static function getSpeed() { return self::$speed; } } echo Car::getSpeed(); //调用静态方法 $func = 'getSpeed'; $className = 'Car'; echo $className::$func(); //动态调用静态方法 class BigCar extends Car { public static function start() { parent::speedUp();//调用父类的方法 } } BigCar::start(); echo BigCar::getSpeed(); 继承: class Car { public $speed = 0; //汽车的起始速度是0 function __construct(){ echo 'parent_construct'; } public function speedUp() { $this->speed += 10; return $this->speed; } } //定义继承于Car的Truck类 class Truck extends Car{ public function speedUp(){ $this->speed = parent::speedUp() + 50; } function __construct(){ parent::__construct();//调用父类的构造器 echo 'child_construct____'; } } $car = new Truck(); $car->speedUp(); echo $car->speed; 重载: class Car { private $ary = array(); public function __set($key, $val) { $this->ary[$key] = $val; } public function __get($key) { if (isset($this->ary[$key])) { return $this->ary[$key]; } return null; } public function __isset($key) { if (isset($this->ary[$key])) { return true; } return false; } public function __unset($key) { unset($this->ary[$key]); } } $car = new Car(); $car->name = '汽车'; //name属性动态创建并赋值 echo $car->name; __call();调用不存在的方法时调用 __callStatic();调用不存在的静态方法时调用 class Car { public $speed = 0; public function __call($name, $args) { if ($name == 'speedUp') { $this->speed += 10; } } } $car = new Car(); $car->speedUp(); //调用不存在的方法会使用重载 echo $car->speed; 高级特性: class Car { } $a = new Car(); $b = new Car(); if ($a == $b) echo '=='; //true 两个实例是否完全相同 if ($a === $b) echo '==='; //false 两个变量是否来自同一个引用 class Car { public $name = 'car'; public function __clone() { $obj = new Car(); $obj->name = $this->name; } } $a = new Car(); $a->name = 'new car'; $b = clone $a;//复制一个对象 var_dump($b); 序列化和反序列化: class Car { public $name = 'car'; } $a = new Car(); $str = serialize($a); //对象序列化成字符串 echo $str.'<br>'; $b = unserialize($str); //反序列化为对象 var_dump($b);
五.正则表达式
$p='/苹果/';//PCRE库函数preg_match用于执行一个正则匹配 $str = "我喜欢吃苹果"; if (preg_match($p, $str)) { echo '匹配成功'; } PCRE库函数中,正则匹配模式使用分隔符与元字符组成,分隔符可以是非数字、非反斜线、非空格的任意字符。经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~): 转义: /http:\/\// 函数批量转义: $p = 'http://'; $p = '/'.preg_quote($p, '/').'/'; echo $p; /http\:\/\// 元字符: 正则表达式中具有特殊含义的字符称之为元字符,常用的元字符有: \ 一般用于转义字符 ^ 断言目标的开始位置(或在多行模式下是行首) $ 断言目标的结束位置(或在多行模式下是行尾) . 匹配除换行符外的任何字符(默认) [ 开始字符类定义 ] 结束字符类定义 | 开始一个可选分支 ( 子组的开始标记 ) 子组的结束标记 ? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词) * 量词,0 次或多次匹配 + 量词,1 次或多次匹配 { 自定义量词开始标记 } 自定义量词结束标记 例1:匹配邮箱 //下面的\w匹配字母或数字或下划线。 $p = '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/'; $str = "我的邮箱是Spark.eric@imooc.com"; preg_match($p, $str, $match); echo $match[0]; 例2:匹配电话 $p = '/\w+\-\d+/'; // \d匹配数字 $str = "我的电话是010-12345678哈哈11-22"; preg_match($p, $str, $match); echo $match[0]; 贪婪模式(匹配字符+):在可匹配与可不匹配的时 候,优先匹配 $p = '/\d+\-\d+/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678 懒惰模式(匹配字符?):在可匹配与可不匹配的时候,优先不匹配 $p = '/\d?\-\d?/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:0-1 当我们确切的知道所匹配的字符长度的时候,可以使用{}指定匹配字符数 $p = '/\d{3}\-\d{8}/'; $str = "我的电话是010-12345678"; preg_match($p, $str, $match); echo $match[0]; //结果为:010-12345678 preg_match_all匹配所有: <?php $p = "/<tr><td>(.*?)<\/td>\s*<td>(.*?)<\/td>\s*<\/tr>/i"; $str = "<table> <tr><td>Eric</td><td>25</td></tr> <tr><td>John</td><td>26</td></tr> </table>"; preg_match_all($p, $str, $matches); print_r($matches); 搜索和替换: $string = 'April 15, 2014'; $pattern = '/(\w+) (\d+), (\d+)/i'; $replacement = '$3, ${1} $2'; echo preg_replace($pattern, $replacement, $string); //结果为:2014, April 15 替换多余的空格: $str = 'one two'; $str = preg_replace('/\s+/', ' ', $str); echo $str; // 结果改变为'one two'
六.Cookies
设置Cookie: <?php setcookie('test', time()); ob_start(); print_r($_COOKIE); $content = ob_get_contents(); $content = str_replace(" ", ' ', $content); ob_clean(); header("content-type:text/html; charset=utf-8"); echo 'current Cookie ='; echo nl2br($content); 删除Cookie: setcookie('test', '', time()-1); Cookie路径: cookie中的路径用来控制设置的cookie在哪个路径下有效,默认为'/',在所有路径下都有,当设定了其他路径之后,则只在设定的路径以及子路径下有效,例如:setcookie('test', time(), 0, '/path'); 上面的设置会使test在/path以及子路径/path/abc下都有效,但是在根目录下就读取不到test的cookie值。 Session: <?php //开始使用session session_start(); //设置一个session $_SESSION['test'] = time(); //显示当前的session_id echo "session_id:".session_id(); echo "<br>"; //读取session值 echo $_SESSION['test']; //销毁一个session unset($_SESSION['test']); echo "<br>"; var_dump($_SESSION); 打印结果: session_id:s1uhfu4egnef47gc0jennpuhr2 1423131115 array empty 设置Session: <?php //在这里设置name的session值为jobs session_start(); $_SESSION['name'] = 'jobs'; echo $_SESSION['name']; 删除Session: 删除当前: session_start(); $_SESSION['name'] = 'jobs'; unset($_SESSION['name']); echo $_SESSION['name']; //提示name不存在 删除所有: session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); session_destroy(); 值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。 session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); unset($_SESSION); session_destroy(); var_dump($_SESSION); //此时已为空
来源:https://www.cnblogs.com/gmm283029/p/4498936.html