zoukankan      html  css  js  c++  java
  • 10分钟学会php面相对象基础(Ⅱ)

    __set(),__get(),__isset(),__unset()四个方法的应用

    预定义了两个函数”__get()”和”__set()”来获取和赋值其属性,以及检查属性的”__isset()”和删除属性的方法”__unset()”;

    不过,get和set都需要想 construct、destruct一样,手动加入到方法中,才能使用;

    如 function __get($name){

    if(isset($this->name)){

    return $this->name;

    }else{

    return null;

    }

    }

    function __set($name,$value){

    $this->name = $value;

    }

    此后,就可以在对象以外,直接赋值和取值;

    如  echo $a->name; 这实际上就是在使用get;

     

    “unset()”这个函数的作用是删除指定的变量且传回true,参数为要删除的变量;

    "isset()"是测定变量是否设定用的函数,传入一个变量作为参数,如果传入的变量存在则传回true,否则传回false。

    一旦在类内部描述了
    private function __isset[__unset]($nm)
    {
        echo "当在类外部使用isset()函数测定私有成员$nm时,自动调用<br />";
     
        return isset($this->$nm);
    }
    就可以在类以外,判断属性有没有被定义 isset($run);
     
    前面讲了OOP三特性之一 封装
     
    现在说三大特效之二 继承
    集成简单来讲,就是预先定义了一个类,叫衬衫,可能包含了 布料、肩宽、大身长等几个属性,清洗、穿等几个方法;然后有一个新的类, 叫时装衬衫,可能会多几个类,如辅料、印花等。我们可以看到,在衬衫的基础上,扩展出了时装衬衫,通过继承机制,可以利用已有的数据类型来定义新的数据类型。
    C++中提供多继承,但java和php中提供单集成,即一个子类只能继承一个父类;
     

    $class student{

    var $school;

    var $age;

    private $grades;

    public function study(){...}

    } 

     这是一个学生类,现在根据小中高大等,我们派生出更多类;
    $class highSchool extend student{
      public function FallInLove($girl){
      ...
      }
    }

    在继承的基础上,添加了一些新的方法;

    重载:

    PHP里面没有方法重载 ,不能重载也就是在你的项目中不能定义相同方法名的方法。

    那么在php里的重载怎么进行,可以通过继承之后,重新定义方法。目的是,比如上没提到的衬衫,可能一个方法输出袖子的长度和几个纽扣。但是子类中,可能有新的属性需要通过类似的方式来输出。

     

    但这时候是简单的情景,如果父类中的方法你并不可见,或者可见,但是几百行代码,怎么办。

    这是有就可以使用 parent:: 用法如下

    例如父类中是这样的

    $class student{

      var $school;

      public function __construct($school){

        $this->school = $school;

      }

      private function study(){

        echo $school;

      }

    }

    子类,新增了谈恋爱方法、女朋友属性

    $class highSchoolStudent extend student(){

      var $girlFriend;

      public function __construct($school,$grilFriend){

        parent::__construct($school);

        $this->girlFriend = $girlFriend;

      }

      private function study(){

        parent::study();

        //add sth.

        echo $girlFriend;

      }

    }

    前面已经用到了很多次访问类型,具体为public (公有的、默认的),protected (受保护的)和private (私有的)三种。

      private protected public
    同一个类里 V V V
    子类里 X V V
    所有外部成员 X X V

    在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。

    例如,如果父类方法的访问权限是protected,那么子类中要覆盖的权限就要是protected和public,如果父类的方法是public那么子类中要覆盖的方法只能也是public,总之子类中的方法总是要高于或等于父类被覆盖方法的访问权限。

  • 相关阅读:
    理性即自由
    解决问题的思路是怎样的?
    联系的结构-深度思考
    思考力,才是真正的第一生产力-快思考、慢思考
    CentOS7在防火墙与端口上的操作
    linux如何查看nginx是否启动
    Git篇
    Git 常用命令总结
    siblings() 获得匹配集合中每个元素的同胞
    Mysql查看版本号的五种方式介绍
  • 原文地址:https://www.cnblogs.com/07byte/p/5823841.html
Copyright © 2011-2022 走看看