类说具有属性和服务的一组对象的集合,类内部可以包含成员的属性和方法。
实验将就类的常用方法和重要特性进行实验
<?php
/*声名一个名为person的类,包含三个成员属性,两个成员方法*/
class person
{
var $name; //成员的属性
var $sex;
var $age;
function say() //成员的方法
{
echo "这个人在说话<br/>";
}
function run()
{
echo "这个人在走路<br/>";
}
}
$person1=new person();
$person2=new person();
$person3=new person();
$person1 -> name ="张三";
$person1 -> sex ="男";
$person1 -> age =20;
$person2 ->name="李四";
$person2 ->sex="女";
$person2 ->age=30;
$person3 ->name="王五";
$person3 ->sex="男";
$person3 ->age=45;
echo "person1 对象的名字是:" . $person1->name . "<br/>";
echo "person1 对象的性别是:" . $person1->sex . "<br/>";
echo "person1 对象的年龄是:" . $person1->age . "<br/>";
$person1->say();
$person1->run();
echo "<br/>";
echo "person2 对象的名字是:" . $person2->name . "<br/>";
echo "person2 对象的性别是:" . $person2->sex . "<br/>";
echo "person2 对象的年龄是:" . $person2->age . "<br/>";
$person2->say();
$person2->run();
echo "<br/>";
echo "person3 对象的名字是:" . $person3->name . "<br/>";
echo "person3 对象的性别是:" . $person3->sex . "<br/>";echo "person3 对象的年龄是:" . $person3->age . "<br/>";$person3->say();$person3->run();echo "<br/>";?>
通过上述最简单的实例可以看出类的示范结构:
class 类的名称{},在类的内部需要声明类成员的属性,可以根据需求声明需要的方法。
创建了类之后需要使用类中的功能就需要创建实例化对象引用,代码及实例
<?php
/*声名一个名为person的类,包含三个成员属性,两个成员方法*/
class person
{
var $name;
var $sex;
var $age;
function __construct($name, $sex, $age)
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function say()
{
echo "我的名字:" . $this->name . ",性别:" . $this->sex . ",年龄:" . $this->age . "。<br/>";
}
//声明结构的方法,在对象销毁前自动调用
function __destruct()
{
echo "再见" . $this->name . "<br>";
}
}
$person1=new person("张三","男","65");
$person1=null;
$person2=new person("李四","女","33");
$person3=new person("王五","男","99");
?>
通过上述代码,可以知道通过声明变量的方法读取类中的数据(变量=new 类名())。上述代码中还使用了析构方法及特殊对象引用$this。
关于私有成员的访问
<?php
/*克隆对象*/
class person
{
private $name;
private $sex;
private $age; //设置三个私有成员属性
function __clone()
{
$this->name="副本";
$this->age=30;
}
function __construct($name="",$sex="",$age="")
{
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
function say()
{
echo "我的名字:" .$this->name . ",性别:" . $this->sex . ",年龄:" .$this->age . "。<br/>";
}
function hello()
{
echo "Hello World!";
}
}
$sp1=new person("张三","男",20);
$sp2=clone $sp1; //克隆部分程序段
$sp1->say();
$sp2->say();
$sp1->hello();
?>
将类中的hello方法设置为private后显示的结果如图:
无法执行类中hello方法,是由于hello设置成了私有方法,所以无法在外部访问,类内部的public方法中的私有成员变量可以通过使用方法而显示。还有一种protected方法,在类中和子类(一会介绍)中可以使用,在外部无法使用
类可以通过extends来继承另一个类别,并根据需求对子类的内容进行修改:
<?php
class person
{
var $name;
var $sex;
var $age;
function __construct($name = "", $sex = "男", $age = "1")
{
$this->name=$name;
$this->sex=$sex;
$this->age=$age;
}
/*构造方法以及$this的使用*/
function say()
{
echo "我的名字:" . $this->name . ",性别" . $this->sex . ",年龄" . $this->age . "。<br/>";
}
function run()
{
echo $this->name . "正在走路。<br/>";
}
}
//声明一个学生类
class student extends person /*因为继承了person类所以加上自身有四个成员属性,三个成员方法*/
{
var $school; //声明一个所在学校的成员属性
//在学生类中声明一个学生可以学习的方法
function study()
{
echo $this->name . "正在" . $this->school . "学习。<br/>";
}
}
//再声明一个教师类,使用extends关键字拓展(继承)student类
class teacher extends student /*继承了student类,extends语句*/
{
var $wage;
//在教师类里声明一个教师可以教学的方法
function teaching()
{
echo $this->name . "正在" .$this->school ."教学,每月工资为" .$this->wage . "。<br/>";
}
}
$tcacher1=new teacher("张三","男",40);
$tcacher1->shhool="edu";
$tcacher1->wagw=3000;
$tcacher1->say();
$tcacher1->study();
$tcacher1->teaching();?>
从上述程序可以看出,继承将会把父类所有的成员和成员方法继承过来,但是可以添加新的成员和成员方法,甚至可以通过重载的方式将原本的方法修改替换,而通过final、static等关键字则可以设置方法不可更改,成员唯一等继承的特性。
除去继承外还有clone方法,能够创建类中对象的副本
<?php
class person
{
var $name;
var $sex;
var $age;
function __construct($name = "", $sex = "男", $age = "1")
{
$this->name = $name;
$this->sex = $sex;
$this->age = $age;
}
function __clone()
{
$this->name = "名字副本";
$this->sex = "女";
}
function say()
{
echo "我的名字:" . $this->name . ",性别:" .$this->sex. ",年龄:" . $this->age . "。<br/>";
}
}
$sp1=new person("牛二","男","28");
$sp2=clone $sp1;
$sp1->say();
$sp2->say();
?>

由程序知克隆还可以设置clone的方法重置成员的值。