5.用正则表达式进行字符串分割
Array preg_split(string $正则表达式,string 字符串,[int limit],[int flags]) 以正则表达式搜出来的东西进行分割,返回数组。
Flags有三个选择:PREG_SPLIT_ON_EMPTY:只返回非空的成分
PREG_SPLIT_DELIM_CAPTURE:定界符模式中的括号表达式也会被捕捉并返回 PREG_SPLIT_OFFSET_CAPTURE:返回的同时加每个的偏移量
$str = 'PHP hypertext language programming ';
$arr1 = preg_split(\, $str,-1,PREG_SPLIT_NO_EMPTY);
$arr2 = preg_split(\, $str,-1,PREG_SPLIT_DELIM_CAPTURE); $arr3 = preg_split(\, $str,-1,PREG_SPLIT_OFFSET_CAPTURE); print_r($arr1); echo \; print_r($arr2); echo \; print_r($arr3); echo \; ?>
效果如下:
面向对象的PHP 1.类定义
class className {
//类成员列表
//类方法列表function }
定义类的属性,首先要定义它的访问权限public/private/protect
2.在执行对象时自动定义一个$this的特殊变量,该变量表示对对象本身的引用,可以通过 $this ->的方式来引用对象的所有属性和方法。 3.构造函数
function __construct() { }
析构函数时构造函数的相反,在对象引用结束时,自动会调用析构函数。
4.类的继承:
类的继承关键字为:extends
在PHP中,使用parent表示父类,使用self表示当前类
使用parent 和self进行属性和方法的调用时,需要使用范围解析操作符::: 5.子类和父类的属性和方法调用: 方法的调用:
$this->方法名();如果子类中有该方法则调用的是子类中的方法,若没有则是调用父类中的。 parent::则始终调用的是父类中的方法。 变量的调用:
$this->变量名;如果子类中有该变量则调用的是子类中的,若没有则调用的是父类中的 注意:子类无法访问父类的私有属性,那为什么访问却没有出错呢?其实是在子类中新建了一个变量而已,因为PHP是弱定义的语言。
class Animal { }
class cat extends Animal {
public $name;
public $color;
function __construct($selfname,$color,$parentname,$age) {
$this->name = $selfname;
$this->color =$color; $this->age=$age;
public $name = \; public $age =18;
public function cry() {
echo \; echo \; }
}
public function cry() {
echo \; echo \;
}
public function printout() {
self::cry();
parent::cry();
} }
$cat = new cat(\,\,\,19); $cat->printout();
echo \$cat->name\;
echo \;
echo \$cat->age\; echo \;
echo \$cat->color\; echo \; ?> 效果如下:
6.类的常量
const 常量名 = value;
可以在类中通过self::常量名来调用。
类的常量属于类本身,不能被继承和访问。 7.访问权限
public:可以被继承,也可以通过实例访问 protect:可以被继承,不能通过实例访问 private:不能被继承,也不能通过实例访问 8.静态属性和方法
静态属性和类的常量一样,只属于类本身,通过static来定义。 方法也是一样的。
9.字符串转换函数:__toString()函数
这个函数和构造函数一样,都是系统内置的函数。
如果我们直接用print 或echo 来打印对象实例名(注意是对象实例名),就会自动调用这个函数。
class Animal {
public $name = \; public $age =18;
function __toString() {
echo \; echo \;
return $this->name; } }
$animal = new Animal(); echo $animal; ?>
效果如下:
10.内置克隆方法__clone()
当我们进行对对象实例进行克隆,克隆出一个新的对象实例出来时,就会自动调用类中的这个克隆函数。
class Animal {
public $name = \; public $age =18;
function __clone() {
echo \; echo \; } }
$animal = new Animal();
$coloneNewAnimal = clone $animal;
echo \. $coloneNewAnimal->name; echo \;
echo \. $coloneNewAnimal->age; echo \; ?>
效果如下:
11.__get()和__set() 我们一般情况下,会把类中的属性设置为private,然后通过get和set函数来取得和设置属性的值,在Java中,需要对每一个属性写get和set的值,这很麻烦。 在PHP中,只要写一次,全部通用。
//__get()方法用来获取私有属性 function__get($property_name) {
if(isset($this->$property_name)) {
return($this->$property_name); }else {
return(NULL); } }
//__set()方法用来设置私有属性
function__set($property_name,$value) {
$this->$property_name=$value; }
用法如下:
class Person {
//下面是人的成员属性,都是封装的私有成员 private $name; //人的名子 private $sex; //人的性别 private $age; //人的年龄 //__get()方法用来获取私有属性 function __get($property_name) {
echo \在直接获取私有属性值的时候,自动调用了这个__get()方法
\; if(isset($this->$property_name)) {
return($this->$property_name); } else {
return(NULL); } }
//__set()方法用来设置私有属性
function __set($property_name, $value) {
echo \在直接设置私有属性值的时候,自动调用了这个__set()方法为私有属性赋值
\; $this->$property_name = $value; } }
$p1=new Person();
//直接为私有属性赋值的操作,会自动调用__set()方法进行赋值 $p1->name=\张三\; $p1->sex=\男\; $p1->age=20;
//直接获取私有属性的值,会自动调用__get()方法,返回成员属性的值 echo \姓名:\.$p1->name.\; echo \性别:\.$p1->sex.\; echo \年龄:\.$p1->age.\; ?>
效果如下: