面向对象的三大特性

封装性

封装性是面向对象编程中的三大特性之一,封装性就是将对象的状态信息(属性)和行为(方法)捆绑为一个逻辑单元。只保留有限的对外接口使之与外部发生联系。

特性

对象意外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的”交叉感染”,使错误能够局部化,大大减少查错和拍错的难度.

例如:快递包裹里的东西、个人电脑的密码。这种密闭的东西、别人无法知道获得、除非你说(方法行为)出去。

封装的优势

隐藏一个类的实现细节;

防止对封装数据的未经授权的访问。使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;

有利于保证数据的完整性,增强代码的可维护性。

访问控制修饰符

public公开的 private私有的 protected受保护

<?php
class woman{
    public $name;
    private $age=36; //私有的 是保密的
    public function sayAge(){
        echo "我的年龄是".$this->age."<br/>";
    }

    public function setAge($age=null)
    {
        $this->age=$age;
    }
}

$mm=new woman();
$mm->name="范冰冰";
echo $mm->name;
echo "<br/>";
//echo $mm->age;  //这时候则会报错 Fatal error: Uncaught Error: Cannot access private property woman::$age in F:\Work\test.php on line 19
echo $mm->sayAge();

按照上面所说、你想知道范冰冰的年龄、你不知道,要她说出去,你才能知道。

继承

什么是继承。一般来说PHP有这样的一个类包含了基本属性和方法。其他的类可以基于这个类,扩展、增加属性方法或修改、实现类的复用,那就是继承,那么这个类也叫基类(父类、超类)、PHP是单继承的。

如山地自行车(属性:两个车轱辘。方法:骑行、刹车)和电动自行车(具有山地车的属性和方法:增加电车和电机)。电动自行车是普通自行车的扩展而来。普通自行车是佃电动自行车的基础。

继承的关键字 extends

<?php
class Animal{
    public $name=null;
    public function shout()
    {
        echo $this->name."这个动物在叫";
    }
}

/**
 * PHP继承的语法
 * 子类 extends 父类{......}
 */
class Dog extends  Animal{
    public $name='Dog';
    public  $owner ="李四";

    public function swin()
    {
        echo "狗会游泳";
    }
}

$Dog= new Dog();
$Dog->shout();
echo "<br/>";
$Dog->swin();

Dog继承了Animal的方法和属性,Dog重写了Animal的属性、扩展了siwn方法。但是私有private的属性和方法是不能在子类调用的。

PHP的访问控制修饰符

<?php
class Human {

    public $name;
    public $sex;
    protected $age;        //受保护属性
    private $addr;        //私有属性
    private $data = array();    //存储未定义属性的数组
    public function __construct($name, $sex, $age, $addr) {
        $this->name = $name;
        $this->sex = $sex;
        $this->age = $age;
        $this->addr = $addr;
    }

    public function walking() {

    }

    protected function html() {

    }


}
//实例化对象
$jack = new Human("Jack", "female", 130, "Boston,USA");
//外部访问受保护属性
//echo $jack->name."的年龄是:".$jack->age."<br />";    //Fatal error: Cannot access 【protected】 property Human::$age 禁止访问受保护属性
//外部访问受保护的方法
//$jack->html();    //请勿访问受保护方法
//外部检测一个受保护属性 总是返回false
echo $jack->addr;  // Fatal error: Uncaught Error: Cannot access private property Human::$addr

私有和受保护的属性可以通过公有的方法去访问、上上个代码示例已经说明。

<?php
class Human {

    public $name;
    public $sex;
    protected $age=24;        //受保护属性
    private $addr="USA";        //私有属性
    public function __construct($name, $sex) {
        $this->name = $name;
        $this->sex = $sex;

    }

    private function walking() {
        echo $this->name."正在散步";
    }

    protected function html() {
        echo "我是html";
    }


}

class Hu extends Human{

    public function sayAge(){
        echo $this->age;
    }

    public function  sayAddr()
    {
        echo $this->addr;
    }
}
//实例化对象
$jack = new Hu("Jack", "男人");
//print_r($jack); Hu Object ( [name] => Jack [sex] => 男人
// [age:protected] => 24
// [addr:Human:private] => USA    
echo $jack->sayAge(); //公有方法访问受保护属性
echo $jack->sayAddr(); //子类是访问不到父类的私有属性
// //Notice: Undefined property: Hu::$addr
echo $jack->age; //在子类的内部是可以访问受保护的属性的
///外部无法访问受保护属性//Uncaught Error: Cannot access protected property Hu::$ag

图表

Last modification:January 6, 2020
如果觉得我的文章对你有用,请随意赞赏