在网站建设中,PHP 5开始引入了新的对象模型。完全重写了PHP处理对象的方式,允许更佳性能和更多特性。本节将重点介绍PHP类和对象的定义和应用,以帮助用户掌握强大的对象化编程开发的方法和技巧。
定义和调用类
使用class关键字可以定义类,在类中可以声明类成员和方法。例如,在下面示例中定义了类A,该类中包含一个方法f()。
<?phpclass A{ function f(){ echo "类方法"; }}?>
在类中,伪变量$this是一个对调用对象的引用,即引用类的实例。再看一个示例,在这个示例中分别声明了类成员和方法。
<?phpclass A{ public $var = '默认值'; //声明成员 public function f(){ //声明方法 echo $this->var; }}?>
使用new关键字可以调用类,即使用new关键字创建一个对象的实例,然后就可以引用类成员和方法了。如:
<?php$a = new A(); //实例化类echo $a->var; //引用对象的成员,显示'默认值'$a->f(); //引用对象的方法,显示'默认值'?>
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。在一个类中可以使用extends关键字继承另一个类的方法和成员。但不能扩展多个类,只能继承一个基类。例如,在下面示例中,分别定义A和B类,其中A是基类,B是子类,然后就可以在B类中调用基类的成员或者方法。
<?phpclas A{ //定义A类 public $var = '默认值'; //声明成员public function f(){ //声明方法 echo $this->var; }}clas B extends A{ //定义B类 function e() { //声明方法 parent::f(); //调用A类的方法f() }}$b = new B(); //实例化B类$b->e(); //调用对象$b的e()方法,显示'默认值'
类属性
类的变量成员被称为属性,或者字段、特征,本书统一称为属性。属性声明是由关键字public、protected或者private开头,然后跟一个变量来组成。属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。
类成员都必须使用关键字public、protected或private进行定义。由public关键字定义的类成员可以在任何地方被访问。由protected定义的类成员可以被其所在类的子类和父类访问,当然该成员所在的类也可以访问。由private定义的类成员则只能被其所在类访问。
为了兼容PHP 4,PHP 5声明属性依然可以直接使用关键字var,或者放在public、protected、private之前。但是var并不是必需的。如果直接使用var声明属性,而没有public、protected或pri-vate,PHP 5会认为这个属性为public。
在类的成员方法里面,可以通过$this->property(property是属性名字)这种方式来访问类的属性、方法,但是要访问类的静态属性或者在静态方法里面却不能使用,而是使用self::$property。在类的非静态方法里面可以使用伪变量$this,这个伪变量是调用该方法的实例化对象引用。
<?phpclass MyClass{ public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; }}$obj = new MyClass();echo $obj->public; //正常执行,显示:publicecho $obj->protected; //会产生一个致命错误echo $obj->private; //会产生一个致命错误$obj->printHello(); //输出:public、protected和private?>
类常量
在类中还可以定义常量,常量的值将始终保持不变,常量的值必须是一个定值,不能是变量、类属性或其他操作(如函数调用)的结果。在定义和使用常量时不需要使用$符号,常量的值不能为关键字self、parent或static。例如,在下面示例中定义并使用一个类常量。
<?phpclass MyClass{ const constant = '常量值'; //声明类常量 function showConstant() { echo self:constant ."\n"; //在类方法中引用常量 }}echo MyClass::constant . "\n"; //直接读取类常量$class = new MyClass();$class->showConstant(); //调用类的方法显示常量值?>
当前文章标题:PHP类和对象(1)
当前URL:http://www.lyjtt.cn/news/wzzz/3249.html
上一篇:PHP函数(2)
下一篇:PHP类和对象(2)