您的位置:首页 > 编程语言 > PHP开发

php中oop中的三个重要特性

2016-06-18 20:45 537 查看
oop的三个重要特性

封装,继承,多态

封装性:封装性就是把对象的属性和行为结合成一个独立的单位。

封装一个类需要两步 第一步是私有化一个类 第二步是用set和get 做出读取赋值的操作

他的好处是:隐藏类的实现细节,可以方便加入逻辑控制性,限制对属性的不合理操作,便于修改增强代码的可维护性。

__get与__set

一般说把类私有话更符合现实的逻辑。

预定义两种函数来进行获取与敷值操作。

__get 获取值通常是域的值

__set 设置值通常是域的值

__call 调用一个对象中不存在的方法时,就会产生错误call()这个方法来处理这种情况。

静态属性和方法

static关键字 来声明静态方法

static静态变量 在类的内部生成一个静态变量 就是能够被所有类的实力化共想 也就是说静态成员则放到了“初始化静态段”,在类第一次被加载的时候放入的,可以让堆内存里面的每个对象所共享

使用方法:self::$静态属性、self::静态方法

static function p(){

echo self::$country;

echo self::PI;//访问常量

//echo $this->name;在静态方法中只能操作静态属性

//self::p();

}

外部调用:类::$静态属性、类::静态方法

const关键字:用来生成常量 常量是唯一的不能改变的 惯例常量为大写

const CONSTANT = 'constant value'; 生成一个常量

echo self::CONSTANT;//类内部访问

echo ClassName::CONSTANT;//类外部访问

继承性

B类的对象拥有A类的全部属性与行为,称作B对A类的继承。

假如一个类从多个类中继承了属性与服务,这称为多继承,通常我们成为继承类为子类被继承类为父类,在PHP中只有单继承,但一个父类可以被多个类继承,但是一个子类只能有一个父类,但是允许关联继承,通过继承可以减化类的定义。

extende声明继承关系

语法格式:class B extends A 此范例指明 B继承了A

类的外部访问对子类是有效的

子类与父类的属性与方法

子类继承父类的所有内容,但父类中的private部分不能直接访问

子类中新增加的属性和方法是对父类的扩展

子类中定义的与父类同名的属性是对父类属性的覆盖,同名的方法也是对父类方法的覆盖

重写的方法

在子类中,使用parent访问父类中的被覆盖的属性和方法

parent::__construce();

parent::$name;

parent::fun();

覆盖父类原有属性

clone克窿对象 语法格式$c=clone $p; $c克窿的对象$p 输出echo $c->name;

对象比较

===两个比较运算符。

==是比较两个对象的内容。

===是比较对象的句柄,即引用地址。

instanceof操作符用于检测对象实力是否属于某一个类的类型 属于返回true 不属于返回false

__clone()如果想在克隆后改变原对象的内容,需要在__clone()中重写原本的属性和方法

function __clone(){

$this->name="我是一个克隆人";

}

final表示一个类是最终版本 也就是说它不能在被子类调用

多态性

多态性是指在父类中定义的属性或行为被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在父类及其各个子类中具有不同的语义。

就是说同一种方法在子类与父类中执行的结果不同。

class A {

function info(){

echo “A INFO”;

}

}

class B extends A {

function info(){

echo “B INFO”;

}

}

class C extends A {

function info(){

echo “C INFO”;

}

}

function printinfo($obj){

function printinfo(A $obj){

if($obj instanceof A)

$obj->info();

$obj->info();

}

}

$a=new A(); $b=new B(); $c=new C();

printinfo($a); //输出A INFO

printinfo($b); //输出B INFO

printinfo($c); //输出C INFO

抽象方法和抽象类

抽象方法是作为子类摸版使用的。

abstract class Person{

public $name;

abstract function getInfo();

}

抽象类不能被实力话,一个抽象类中,必须有一个抽象方法。但是抽象类中可以定义动态函数。

接口

当一个类继承了一个接口之后,它要覆盖接口的所有方法,接口只能声明常量,接口的方法必须定义为共有否则无法继承,接口可以与多个接口间继承

语法:

interface PCI{

const TYPE="PCI";

//public $name; error

function start();

function stop();

}

接口中的方法可以声明为static

interface A{ function a();}

interface B{ function b();}

interface C extends A{ function c();}

class D implements B,C{

function a(){}

function b(){}

function c(){}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: