面向对象是一种软件开发方法,可以围绕诸如雇员,汽车,银行帐户等真实世界对象建模应用程序。类定义了真实世界对象的属性和方法。一个对象是一个类的出现。
面向对象的三个基本组成部分是:
OOP的三大原则是:
PHP是一种面向对象的脚本语言。它支持上述所有原则。以上原则是通过以下方式实现的:
现在,我们已经具备了OOP的基本知识以及如何在PHP中对其进行支持,下面让我们看一下实现上述原理的示例。
统一建模语言UML是一种用于设计和记录面向对象系统的技术。
UML产生了许多文档,但是我们将看一看类图,这对于面向对象的php编程非常重要。
类图示例
类图键
class关键字用于在PHP中定义一个类。 以下是在PHP中创建类的规则。
假设我们要创建一个代表动物的类。
我们将从识别所有动物共有的特征开始。
下图显示了该动物的图
现在让我们编写动物类的代码
<?php
class Animal
{
private $family;
private $food;
public function __construct($family, $food)
{
$this->family = $family;
$this->food = $food;
}
public function get_family()
{
return $this->family;
}
public function set_family($family)
{
$this->family = $family;
}
public function get_food()
{
return $this->food;
}
public function set_food($food)
{
$this->food = $food;
}
}
?>
这里,
我们将与一头母牛和狮子一起工作。 母牛和狮子都继承自Animal类。
下面的类图显示了这些关系。
请注意,母牛是从动物类继承的,并且也定义了自己的变量和方法。
现在为Cow类编写代码
<?php
class Cow extends Animal
{
private $owner;
public function __construct($family, $food)
{
parent::__construct($family, $food);
}
public function set_owner($owner)
{
$this->owner = $owner;
}
public function get_owner()
{
return $this->owner;
}
}
?>
现在为Lion类编写代码
<?php
class Lion extends Animal
{
public function __construct($family, $food)
{
parent::__construct($family, $food);
}
}
?>
这里,
“class … extends Animal”使母牛和狮子使用动物类(继承)中的方法。
为了简单起见,Animal,Cow和Lion类应该都位于同一目录中。
现在,创建使用我们的类的应用程序。
PHP类示例
<?php
require 'Animal.php';
require 'Cow.php';
require 'Lion.php';
$cow = new Cow('Herbivore', 'Grass');
$lion = new Lion('Canirval', 'Meat');
echo '<b>Cow Object</b> <br>';
echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>';
echo '<b>Lion Object</b> <br>';
echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food();
?>
测试我们的应用
现在,我们在网络浏览器中查看我们的应用程序
太棒了! 现在让我们看一下OOP的第三个原理,即多态性。
假设我们要开发一个应用程序,该应用程序可以连接到不同的数据库引擎(例如MySQL和SQL Server),但使用相同的统一接口。
我们可以创建定义标准方法的接口和实现通用方法的抽象类。
下面的类图说明了抽象类,接口和实现类之间的关系。
现在创建我们的抽象类
<?php
abstract class DBCommonMethods
{
private $host;
private $db;
private $uid;
private $password;
public function __construct($host, $db, $uid, $password)
{
$this->host = $host;
$this->db = $db;
$this->uid = $uid;
$this->password = $password;
}
}
?>
这里,
“abstract class” 意味着该类不能直接用于php创建对象
“ $ host,$ db…”是所有实现通用的类变量
“ function __construct(…)”是php类的构造方法,用于在初始化时设置公共变量的值
现在,我们创建一个包含标准方法的接口,根据数据库引擎的不同,这些方法的实现方式也有所不同。
<?php
interface DBInterface
{
public function db_connect();
public function insert($data);
public function read($where);
public function update($where);
public function delete($where);
}
?>
这里,
“ interface”是用于创建接口的关键字
“public function…(…)”是应实施的标准方法
现在,让我们创建将扩展DBCommonMethods类和DBInterface接口的具体类。 MySQLDriver.php
<?php class MySQLDriver extends
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password)
{
parent::__construct($host, $db, $uid, $password); }
public function db_connect() { //connect code goes here }
public function delete($where) { //delete code goes here }
public function insert($data) { //insert code goes here }
public function read($where) { //read code goes here }
public function update($where) { //update code goes here }
} ?>
MSSQLServerDriver.php
<?php
class MSSQLServerDriver extends
DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password)
{
parent::__construct($host, $db, $uid, $password); }
public function db_connect() { //connect code goes here }
public function delete($where) { //delete code goes here }
public function insert($data) { //insert code goes here }
public function read($where) { //read code goes here }
public function update($where) { //update code goes here }
} ?>
这里,
“class … extends DBCommonMethods”使用DBCommonMethods中的方法
“… implements DBInterface”确保无论使用什么数据库驱动程序,该类都提供标准方法。
上面代码的用法上面类的代码看起来像这样
<?php $db = new MySQLDriver($host,$db,$uid,$password); ?>
Or
<?php $db = new MSSQLServerDriver ($host,$db,$uid,$password); ?>
这两个驱动程序的其余代码将相同,例如;
<?php
$db->db_connect();
$db->insert($data);
?>