文章教程

7.2.1声明类

9/17/2020 9:38:49 PM 人评论 次浏览

7.2 定义和使用类

类是面向对象程序设计思想的基础,可以定义指定类的对象。类中可以定义对象的属性(特性)和方法(行为)。

7.2.1 声明类

在PHP中,可以使用class关键字来声明一个类,其基本语法如下:

class 类名

{

定义成员变量

定义成员函数

}

【例7-1】 定义一个字符串类MyString,代码如下:

<?PHP

class MyString {

var $str;

function output() {

echo($str);

}

}

?>

在类MyString中,定义了一个成员变量$str,用于保存字符串;定义了一个成员函数output(),用于输出变量的内容。

1.定义成员变量

在类定义中,使用关键字var定义一个成员变量。在定义成员变量时,可以同时对其赋初始值。

【例7-2】 定义一个字符串类MyString,定义成员变量$str,并同时对其赋初始值。

<?PHP

class MyString {

var $str = "MyString";

function output() {

echo($str);

}

}

?>

类的成员变量可以分为两种情况,一种是公有变量,使用关键字public标识;另一种是私有变量,使用关键字private标识。公有变量可以在类的外部访问,它是类与用户之间交流的接口。用户可以通过公有变量向类中传递数据,也可以通过公有变量获取类中的数据。在类的外部无法访问私有变量,从而保证类的设计思想和内部结构并不完全对外公开。

【例7-3】 下面是定义公有变量和私有变量的实例。

<?PHP

class UserInfo {

public $userName;

private $userPwd;

function output() {

echo($userName);

}

}

?>

在类UserInfo中,公有变量$userName用来保存用户名,私有变量$userPwd用来保存密码。

在每个PHP类中,都包含一个特殊的变量$this。它表示当前类自身,可以使用它来引用类中的成员变量和成员函数。

【例7-4】 修改类UserInfo,使用变量$this来引用类中的成员变量。

<?PHP

class UserInfo {

public $userName;

private $userPwd;

function output() {

echo($this->userName);

}

}

?>

figure_0122_0174

在类中必须使用$this->userName 访问成员变量$userName ,不能写成$this->$userName,也不能简单地使用$userName。

2.构造函数

构造函数是类的一个特殊函数,它拥有一个固定的名称,即__construct(注意,函数名是以两个下画线开头的),当创建类的对象实例时系统会自动调用构造函数,通过构造函数对类进行初始化操作。

【例7-5】 在UserInfo类中使用构造函数的实例。

<?PHP

class MyString {

public $userName;

private $userPwd;

function __construct() {

$this->userName = "Admin";

$this->userPwd = "AdminPwd";

}

function output() {

echo($this->userName);

}

}

?>

在构造函数中,程序对公有变量$userName和私有变量$userPwd设置了初始值。可以在构造函数中使用参数,通常使用参数来设置成员变量(特别是私有变量)的值。

【例7-6】 在UserInfo类中使用带参数的构造函数。

<?PHP

class MyString {

public $userName;

private $userPwd;

function __construct($name, $pwd) {

$this->userName = $name;

$this->userPwd = $pwd;

}

function output() {

echo($this->userName);

}

}

?>

3.析构函数

析构函数与构造函数正好相反,它是在类对象被释放时执行。析构函数同样有一个固定的名称,即__destruct()。通常在析构函数中释放类所占用的资源。

【例7-7】 析构函数的一个实例。

<?PHP

class MyString {

public $userName;

private $userPwd;

//构造函数

function __construct() {

$this->userName = "Admin";

$this->userPwd = "AdminPwd";

}

//析构函数

function __destruct() {

echo("Exit!");

}

function output() {

echo($this->userName);

}

}

?>

在例7-7中,析构函数只是简单地打印字符串Exit。

7.2.2 定义类的对象

对象是类的实例。如果人是一个类的话,那么某个具体的人就是一个对象。只有定义了具体的对象,才能使用类。

可以使用new关键字来创建对象。例如,下面的代码定义了一个类MyString的对象$mystr:

$mystr = new MyString();

对象$mystr实际相当于一个变量,可以使用它来访问类的公共变量和公共函数。如果类的构造函数中包含参数,则在创建对象时,也需要提供相应的参数值。

【例7-8】 在定义对象时使用带参数的构造函数。

$mystr = new MyString('admin', 'pwd');

可以使用下面的方式来访问类的公共变量。

$mystr->userName;

可以使用下面的方式来访问类的公共函数。

$mystr->output();

但不能使用$mystr访问私有变量,否则会在编译PHP文件时输出如下的错误信息:

PHP Fatal error: Cannot access private property MyString::$userPwd in class1.php on line 22

【例7-9】 下面是一个完整的定义和使用类的实例。

<?PHP

class MyString {

public $userName;

private $userPwd;

//构造函数

function __construct($name, $pwd) {

$this->userName = $name;

$this->userPwd = $pwd;

}

//析构函数

function __destruct() {

echo($this->userName);

echo("Exit!");

}

//成员函数

function output() {

echo($this->userName);

}

}

//声明对象

$mystr = new MyString('admin', 'pwd');

//访问公有变量

echo($mystr->userName);

//访问成员函数

$mystr->output();

?>

7.2.3 静态类成员

静态变量和静态函数是类的静态成员,它们与普通的成员变量和成员函数不同,静态类成员与具体的对象没有关系,而是只属于定义它们的类。

可以使用 static 关键字来声明静态变量和静态函数。例如,定义一个记录数量的静态变量$count,代码如下:

private static $count = 0;

因为静态变量不属于任何一个对象,因此在类中通常不使用$this->count 的方式访问静态变量,而是使用$self::$count对其进行访问。

【例7-10】 定义一个类Users,使用静态变量$online_count记录当前在线的用户数量,代码如下:

<?PHP

class Users {

public $userName;

static private $online_count;

function __construct($name="") {

$this->userName = $name;

$self::$online_count++;

}

function __destruct() {

$self::$online_count--;

}

}

?>

在构造函数中,使用$self::$online_count++语句将计数器加 1;在析构函数中,使用$self::$online_count--语句将计数器函数减1。因为静态变量$online_count并不属于任何对象,所以当对象被释放后,$online_count中的值仍然存在。

因为静态变量不属于任何一个对象,所以通常使用静态函数来访问静态变量。定义一个返回变量$online_count值的静态函数getCount(),代码如下:

static function getCount() {

Return self::$online_count;

}

【例7-11】 演示静态变量和静态函数的实例。

<?PHP

class Users {

public $userName;    // 用户名

static private $online_count; //静态变量, 记录当前在线的用户数量

function __construct($name="") {

$this->userName = $name;

self::$online_count++;

}

function __destruct() {

self::$online_count--;

}

static function getCount() {

Return self::$online_count;

}

}

$myUser_1 = new Users('admin');

$myUser_2 = new Users('lee');

$myUser_3 = new Users('zhang');

echo(Users::getCount());

?>

程序定义了一个类Users,其中包含了一个静态变量$online_count,用于记录当前在线的用户数量。静态函数 getCount()的功能是返回静态变量的值。类定义完成后,程序声明了 3 个 Users对象,每声明一个 Users 对象,静态变量$online_count 的值都增加 1。最后调用静态函数Users::getCount(),输出当前在线用户的数量。运行结果为3。

7.2.4 instanceof关键字

instanceof关键字用来检测一个给定的对象是否属于(继承于)某个类,如果是则返回True;否则返回False。其使用方法如下:

$对象名 instanceof 类名

【例7-12】 演示instanceof关键字的实例。

<?PHP

class Users {

public $userName;    // 用户名

static private $online_count; //静态变量, 记录当前在线的用户数量

function __construct($name="") {

$this->userName = $name;

self::$online_count++;

}

function __destruct() {

self::$online_count--;

}

static function getCount() {

Return self::$online_count;

}

}

$myUser_1 = new Users('admin');

if($myUser_1 instanceof Users)

echo("Yes");

?>

教程类别