PHP类的定义和使用(非常详细)
类是面向对象中最为重要的概念之一,是面向对象设计中最基本的组成模块。可以将类简单地看作一种数据结构,在类中的数据和函数称为类的成员。
public、private 和 protected 的区别如下:
例如,定义一个 Student(学生)为公共类,代码如下:
例如:
以下是定义成员方法的例子:
例如,学生就是一个抽象概念,即学生类,但是姓名叫张三的学生就是学生类中一个具体的学生,即对象。
类和对象的关系可以描述为:类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,但其中每个对象却具有各不相同的“值”。
类是具有相同或相仿结构、操作和约束规则的对象组成的集合,而对象是某一类的具体化实例,每一个类都是具有某些共同性的对象的抽象。
类的实例化格式如下:
如下面的例子所示:
下面通过实例介绍类的声明和实例的生成:
1) 用 class 关键字声明一个类,而这个类的名称是 guests。在大括号内写入类的属性和方法。其中 private $name、private $gender 为类 guests 的自有属性,用 private 关键字声明,也就是说只有在类内部的方法可以访问它们,类外部是不能访问的。
2) function setname($name)、function getname()、function setgender($gender) 和 function getgender() 就是类方法,可以对 private $name、private $gender 这两个属性进行操作。$this 是对类本身的引用。用“->”连接类属性,格式如 $this->name 和 $this->gender。
3) 之后用 new 关键字生成一个对象,格式为 $object = new Classname;,对象名是 $xiaoming。当程序通过 new 生成一个类 guests 的实例,也就是对象 $xiaoming 的时候,对象 $xiaoming 就拥有了类 guests 的所有属性和方法。然后就可以通过“接口”,也就是这个对象的方法(也就是类的方法的副本)来对对象的属性进行操作。
4) 通过接口 setname($name) 给实例 $xiaoming 的属性 $name 赋值为 XiaoMing,通过 setgender($gender) 给实例 $xiaoming 的属性 $gender 赋值为 male。同样的道理,通过接口操作了实例 $lili 的属性。最后通过接口 getname()、getgender() 返回不同的两个实例的属性 $name 和 $gender,并且打印出来。
PHP类的定义
在PHP中,定义类的关键字是 class,定义格式如下:<?php 权限修饰符 class类名{ 类的内容; } ?>其中,权限修饰符是可选项,常见的修饰符包括 public、private 和 protected。创建类时,可以省略权限修饰符,此时默认的修饰符为public。
public、private 和 protected 的区别如下:
- 一般情况下,属性和方法的默认项是 public,这意味着属性和方法的各个项从类的内部和外部都可以访问;
- 用关键字 private 声明的属性和方法则只能从类的内部访问,也就是只有类内部的方法才可以访问用此关键字声明的类的属性和方法;
- 用关键字 protected 声明的属性和方法也是只能从类的内部访问,但是通过“继承”而产生的“子类”也是可以访问这些属性和方法的。
例如,定义一个 Student(学生)为公共类,代码如下:
public class Student { //类的内容 }
1) 成员属性
成员属性是指在类中定义的变量。在类中可以定义多个变量,所以对象中可以存在多个成员属性,每个变量将存储不同的对象属性信息。例如:
public class Student { public $name;//类的成员属性 }其中,成员属性必须使用关键词进行修饰,常见的关键词包括 public、protected 和 private。如果没有特定的意义,仍然需要用 var 关键词修饰。另外,在声明成员属性时可以不进行赋值操作。
2) 成员方法
成员方法是指在类中定义的函数。在类中可以定义多个函数,所以对象中可以存在多个成员方法。类的成员方法可以通过关键字进行修饰,从而控制成员方法的使用权限。以下是定义成员方法的例子:
class Student { public $name; // 类的成员属性 function GetIp() { // 方法的内容 } }
PHP类的实例化
面向对象编程的思想是一切皆为对象。类是对一个事物抽象出来的结果,因此,类是抽象的。对象是某类事物中具体的那个,因此,对象就是具体的。例如,学生就是一个抽象概念,即学生类,但是姓名叫张三的学生就是学生类中一个具体的学生,即对象。
类和对象的关系可以描述为:类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,但其中每个对象却具有各不相同的“值”。
类是具有相同或相仿结构、操作和约束规则的对象组成的集合,而对象是某一类的具体化实例,每一个类都是具有某些共同性的对象的抽象。
类的实例化格式如下:
$变量名=new类名称([参数]); //类的实例化其中,new 为创建对象的关键字,$ 变量名返回对象的名称,用于引用类中的方法。参数是可选的,如果存在参数,就用于指定类的构造方法或用于初始化对象的值;如果没有定义构造函数参数,PHP 就会自动创建一个不带参数的默认构造函数。
如下面的例子所示:
class Student { public $name; // 类的成员属性 function GetIp() // 方法的内容 { // 方法实现内容 } } $lili = new 类名称(); // 类的实例化 $liufei = new 类名称(); // 类的实例化 $zhangming = new 类名称(); // 类的实例化 $wangyi = new 类名称(); // 类的实例化上面的例子实例化了 4 个对象,并且这 4 个对象之间没有任何联系,只能说明它们源于同一个类。可见,一个类可以实例化多个对象,每个对象都是独立存在的。
访问类中的成员属性和方法
通过对象的引用可以访问类中的成员属性和方法,这里需要使用特殊的运算符号:“->”。具体的语法格式如下:$变量名=new类名称(); //类的实例化 $变量名->成员属性=值; //为成员属性赋值 $变量名->成员属性; //直接获取成员的属性值 $变量名->成员方法; //访问对象中指定的方法另外,用户还可以使用一些特殊的访问方法。
1) $this
$this 存在于类的每一个成员方法中,是一个特殊的对象引用方法。成员方法属于哪个对象,$this 引用就代表哪个对象,专门用于完成对象内部成员之间的访问。2) 操作符“::”
操作符“::”可以在没有任何声明实例的情况下访问类中的成员。使用的语法格式如下:关键字:::变量名/常量名/方法名其中,关键字主要包括 parent、self 和类名 3 种:
- parent 关键字表示可以调用父类中的成员变量、常量和成员方法;
- self 关键字表示可以调用当前类中的常量和静态成员;
- 类名关键字表示可以调用本类中的常量变量和方法。
下面通过实例介绍类的声明和实例的生成:
<?php // 定义类 class guests{ private $name; private $gender; function setname($name) { $this->name = $name; } // 定义函数 function getname() { return $this->name; } function setgender($gender) { $this->gender = $gender; } function getgender() { return $this->gender; } }; $xiaoming = new guests; // 生成实例 $xiaoming->setname("王小明"); $xiaoming->setgender("男"); $lili = new guests; $lili->setname("李莉莉"); $lili->setgender("女"); echo $xiaoming->getname() . "\t" . $xiaoming->getgender() . "<br>"; echo $lili->getname() . "\t" . $lili->getgender(); ?>运行结果为:
王小明 男
李莉莉 女
1) 用 class 关键字声明一个类,而这个类的名称是 guests。在大括号内写入类的属性和方法。其中 private $name、private $gender 为类 guests 的自有属性,用 private 关键字声明,也就是说只有在类内部的方法可以访问它们,类外部是不能访问的。
2) function setname($name)、function getname()、function setgender($gender) 和 function getgender() 就是类方法,可以对 private $name、private $gender 这两个属性进行操作。$this 是对类本身的引用。用“->”连接类属性,格式如 $this->name 和 $this->gender。
3) 之后用 new 关键字生成一个对象,格式为 $object = new Classname;,对象名是 $xiaoming。当程序通过 new 生成一个类 guests 的实例,也就是对象 $xiaoming 的时候,对象 $xiaoming 就拥有了类 guests 的所有属性和方法。然后就可以通过“接口”,也就是这个对象的方法(也就是类的方法的副本)来对对象的属性进行操作。
4) 通过接口 setname($name) 给实例 $xiaoming 的属性 $name 赋值为 XiaoMing,通过 setgender($gender) 给实例 $xiaoming 的属性 $gender 赋值为 male。同样的道理,通过接口操作了实例 $lili 的属性。最后通过接口 getname()、getgender() 返回不同的两个实例的属性 $name 和 $gender,并且打印出来。