PHP 类
在学习PHP类之前,我们首先需要了解面向对象编程(也称为OOPs)的概念。与其他编程语言如C++、JAVA等不同,PHP也支持面向对象编程的概念。
面向对象编程
它是一种编程概念,其中一切都被视为对象,然后我们使用这些不同的对象来实现软件。
例如,在学校中,所有学生、教职工、行政人员等都可以被视为一种称为学校的对象。
与OOPs和类相关的一些术语: –
编号 | 术语 | 定义 |
---|---|---|
1 | 类 | 用户定义的数据类型,结合了变量、局部数据和函数。 |
2 | 对象 | 开发人员创建的本地实例,用于访问类的内容。 |
3 | 成员变量 | 类中定义的变量,仅可由成员函数访问。 |
4 | 成员函数 | 类中定义的函数,通常用于访问数据对象。 |
5 | 继承 | 面向对象编程的主要特性之一,将上级类别的特征和属性给予子类。子类继承了父类中的成员函数和变量。 |
6 | 父类 | 主类通常将一部分特征和属性继承给其子类或其他类。这类别的类也称为超类或基类。 |
7 | 子类 | 子类从其父类或其他类中继承一些特性和属性,这类别的类也称为子类或派生类。 |
8 | 多态 | 面向对象编程的基本概念之一,指的是一个函数可以用于多个不同的目的。函数的名称保持不变,但参数可以不同。 |
9 | 重载 | 一种多态的类型,其中一个函数类别通过不同的实现形式来重载,具体取决于特定类型的参数,或者我们可以通过不同的实现重载相同类型的函数。 |
10 | 数据抽象 | 一种特定类型的数据,隐藏了数据的实现细节。 |
11 | 封装 | 将所有数据和成员函数封装在一起以创建一个新对象的过程。 |
12 | 构造函数 | 当形成同类的对象时,会自动调用的特殊函数。 |
13 | 析构函数 | 当对象超过作用域或被删除时,会自动调用的特殊函数。 |
在PHP中定义类
PHP类几乎与函数相似,但有一个主要区别,类中包含变量和函数,可以称为对象或类由一组对象构成的单一格式
语法:
<?php
class myFirstClass {
var var _ a ;
var var _ b = " constant string " ;
function classFunction ( parameter 1 , parameter 2 ) {
[ . . . . . . . . . . . . . . . ]
}
[ . . . . . . . . . . . . . . . ]
}
?>
参数:-
序号 | 参数 | 描述 |
---|---|---|
1 | 类 | 为了声明一个类,我们必须使用关键字”class”,然后是我们要声明的类的名称。 |
2 | 变量声明 | 为了声明一个变量,我们必须使用关键字”var”,然后是”$”约定,最后是被声明的变量的名称。这些也被称为成员变量。也被称为属性。 |
3 | 函数声明 | 为了声明一个函数,我们必须使用关键字”function”,后面跟随被声明函数的名称。这些也被称为成员函数,但这些函数只能类内部访问。也被称为方法。 |
4 | 大括号 | 我们必须用大括号”{}” 将我们的类括起来。 |
程序1: PHP程序展示使用 PHP类
<!DOCTYPE html>
<html lang = " en ">
<head>
<meta charse t= " UTF ? 8 ">
<meta http ? equiv = " X ? UA ? Compatible " content = " IE = edge ">
<meta name = " viewport " content = " width = device - width, initial ? scale = 1 .0">
<title> PHP </title>
</head>
<body>
<? Php
class cars {
// Properties
var name;
varcolor;
// Methods
function set_name(name) {this->name = name;
}
function get_name() {
returnthis->name;
}
function set_color(color) {this->color = color;
}
function get_color() {
returnthis->color;
}
}
BMW = new cars();audi = new cars();
volvo = new cars();BMW->set_name('BMW ');
BMW->set_color('red');audi->set_name('audi ');
audi->set_color('blue');volvo->set_name('volvo ');
volvo->set_color('black');
echoBMW->get_name();
echo " --> ";
echo BMW->get_color();
echo "<br>";
echoaudi->get_name();
echo " --> ";
echo audi->get_color();
echo "<br>";
echovolvo->get_name();
echo " --> ";
echo $volvo->get_color();
?>
</body>
</html>
输出
BMW --> red
audi --> blue
volvo --> black
在这个程序中,我们声明了一个名为car的类,它有成员变量$name
和$color
。我们声明了成员函数set_name用于向某个创建的对象添加名称,set_color用于添加颜色到该对象,get_name用于打印对象,get_color用于打印对象。为了访问声明的类,我们声明了3个对象$BMW
,$Audi
和$Volvo
,并使用这些对象调用类cars。为了访问类内部声明的成员函数,我们使用创建的对象和类内部的成员函数,将值作为参数,例如$BMW->set_name("BMW"),$Audi->set_color("blue"),$Volvo->set_name("Volvo")
,为了打印结果,我们使用类对象,例如$BMW->get_name(),$Audi->get_color()
。
$this关键字
$this
关键字指代当前对象,该关键字只能在类的成员函数中使用。我们可以通过两种方式使用this关键字:
1)要向声明的变量添加值,我们必须在set_name函数中使用this属性。
例如:
<!DOCTYPE html>
<html>
<body>
<?php
class employee {
public name;
varsalary;
function set_name(name) {this->name = name;
}
function set_salary(salary) {
this->salary =salary;
}
}
employee_1 = new employee();employee_1->set_name("JOHN");
employee_1->set_salary(" 2000000");
employee_2 = new employee();employee_2->set_name("ROCK");
employee_2->set_salary(" 1200000");
echo employee_1->name;
echoemployee_1->salary;
echo "<br>";
echo employee_2->name;
echoemployee_2->salary;
?>
输出
JOHN 2000000
ROCK 1200000
在上面的示例中,我们使用 $this
与 set_name和set_salary 一起使用来向已声明的变量name和salary添加新值,然后我们可以使用echo来获取输出。 2)为了向已声明的变量添加值,可以直接更改变量的属性。
例如:
<!DOCTYPE html>
<html>
<body>
<?php
class employee {
public name;
varsalary;
}
employee_1 = new employee();employee_1->name = " JOHN ";
employee_1->salary = " 2000000 ";
employee_2 = new employee();employee_2->name = " ROCK ";
employee_2->salary= " 1200000 ";
echo employee_1->name;
echoemployee_1->salary;
echo "<br>";
echo employee_2->name;
echoemployee_2->salary;
?>
</body>
</html>
输出
JOHN 2000000
ROCK 1200000
在上面的示例中,我们直接使用$ this来与姓名和薪水一起添加新值到已声明的变量姓名和薪水中,之后,我们可以使用echo来输出结果。
程序2: PHP程序展示了 PHP类 的使用。
<!DOCTYPE html>
<html lang = " en ">
<head>
<meta charse t= " UTF ? 8 ">
<meta http ? equiv = " X ? UA ? Compatible " content = " IE = edge ">
<meta name = " viewport " content = " width = device - width, initial ? scale = 1 .0">
<title> PHP </title>
</head>
<body>
<?php
class employees {
/* Member variables */
var name;
varsalary;
var profile;
/* Member functions */
function set_name(new){
this->name =new;
}
function get_name(){
echo this->name ."<br/>";
}
function set_salary(new){
this->salary =new;
}
function get_salary(){
echo this->salary ." <br/>";
}
function set_profile(new){
this->profile =new;
}
function get_profile(){
echo this->profile ." <br/>";
}
}employee_1 = new employees;
employee_2 = new employees;employee_3 = new employees;
employee_1->set_name( "JOHN" );employee_1->set_salary( "10000" );
employee_1->set_profile( "audit manager" );employee_1->get_name();
employee_1->get_salary();employee_1->get_profile();
echo "<br/>";
employee_2->set_name( "DOE" );employee_2->set_salary( "150000" );
employee_2->set_profile( "engineer" );employee_2->get_name();
employee_2->get_salary();employee_2->get_profile();
echo "<br/>";
employee_3->set_name( "NINA" );employee_3->set_salary( "70000" );
employee_3->set_profile( "accountant" );employee_3->get_name();
employee_3->get_salary();employee_3->get_profile();
?>
</body>
</html>
输出
JOHN
10000
audit manager
DOE
150000
engineer
NINA
70000
accountant
在这个程序中,我们声明了一个名为 employee 的类来维护公司内工作员工的记录,它有成员变量 $name
、 $profile
和 $salary
。我们声明了成员函数 set_name 来给特定创建的对象添加名称, set_salary 来给该对象添加薪水, set_profile 来添加员工的个人资料。我们使用 $this
函数在添加数据时指向当前对象。
为了获取输出,我们必须使用 get_name 函数打印对象的名称,使用 get_salary 打印对象的薪水,使用 get_profile 打印对象的个人资料。
在PHP中创建对象以访问类
$employee_1 = new employees;
$employee_2 = new employees;
$employee_3 = new employees;
为了访问类employee的成员变量和成员函数,我们创建了3个对象,并使用new关键字将它们分配给employees类。
使用对象调用成员函数
$employee_1->set_name("JOHN");$employee_1->set_salary("10000");<$employee_1->set_profile("audit manager");
$employee_2->set_name("DOE");$employee_2->set_salary("150000");$employee_2->set_profile("engineer");
$employee_3->set_name("NINA");$employee_3->set_salary("70000");$employee_3->set_profile("accountant");
创建对象后,我们可以使用这些对象调用类内的成员函数,并使用这些成员函数为成员变量赋值。
$employee_1->get_name();$employee_1->get_salary();$employee_1->get_profile();
$employee_2->get_name();$employee_2->get_salary();$employee_2->get_profile();
$employee_3->get_name();$employee_3->get_salary();$employee_3->get_profile();
我们使用声明的对象调用其他成员函数来打印输出。
构造函数
这些是一种特殊类型的函数,当一个对象被创建时,它们会自动调用。使用_construct( )关键字创建这些函数。
语法:
function __construct( parameter 1, parameter 2 ) {
this->name = parameter 1;
this->state = parameter 2;
}
示例:
<!DOCTYPE html>
<html lang = " en ">
<head>
<meta charse t= " UTF ? 8 ">
<meta http ? equiv = " X ? UA ? Compatible " content = " IE = edge ">
<meta name = " viewport " content = " width = device - width, initial ? scale = 1 .0">
<title> PHP </title>
</head>
<body>
<?php
class newconstructorclass
{
// Constructor
function __construct(new){
echo 'the constructor class has been initiated' ."<br/>" ;this->name = new;
}
function get_name(){
echothis->name ."<br/>";
}
}
// Create a new object
obj = new newconstructorclass( " john " );obj -> get_name();
obj2 = new newconstructorclass( " doe " );obj2 -> get_name();
obj3 = new newconstructorclass( " mat " );obj3 -> get_name();
?>
</body>
</html>
输出
the constructor class has been initiated
john
the constructor class has been initiated
doe
the constructor class has been initiated
mat
在这个程序中,我们声明了一个类 newconstructorclass ,在类的内部,我们使用 _construct() 函数声明了一个新的构造函数。拥有构造函数类的主要优势是现在我们不需要单独调用set函数来为所有成员变量添加值了。现在我们可以在创建对象的时候一同完成。
析构函数
这些是特殊的函数,当一个对象超出范围或被删除时自动调用。这些函数使用_destruct()关键字创建。
语法:
function __destruct() {
[ . . . . . . . . . . .]
[ . . . . . . . . . . .]
}
示例:
<!DOCTYPE html>
<html lang = " en ">
<head>
<meta charse t= " UTF ? 8 ">
<meta http ? equiv = " X ? UA ? Compatible " content = " IE = edge ">
<meta name = " viewport " content = " width = device - width, initial ? scale = 1 .0">
<title> PHP </title>
</head>
<body>
<?php
class newdestructorclass
{
// Destructor
public function __destruct(){
echo 'The class ' . __CLASS__ . '" was automatically destroyed when the created object does not have a scope to initiate';
}
}
// Create a new object
$obj = new newdestructorclass;
?>
</body>
</html>
输出
The class "newdestructorclass" was automatically destroyed when the created object did not have a scope to initiate
在这个程序中,我们声明了一个类 newdestructorclass 。我们在类中使用 _destruct() 函数声明了一个析构函数。它不包含任何参数。当对象没有范围可用时,它会自动调用。