精华内容
下载资源
问答
  • 主要介绍了php继承中方法重载(覆盖)的应用场合,以实例形式较为详细的分析了重载的用法与对应的适用情况及使用技巧,需要的朋友可以参考下
  • 主要介绍了php继承的几种常见实现方法,结合实例形式分析了两种PHP实现多继承的操作方法,需要的朋友可以参考下
  • php继承父类,子类和父类中都有同名方法,实例化子类,在父类中使用$this->function() 调用子类和父类中都有的方法的时候,这个时候真正调用的是子类中的方法,我们容易看到$this 然后以为是调用父类中的方法,这点...

    php继承父类,子类和父类中都有同名方法,实例化子类,在父类中使用$this->function() 调用子类和父类中都有的方法的时候,这个时候真正调用的是子类中的方法,我们容易看到$this 然后以为是调用父类中的方法,这点是我们看代码的时候容易出错的地方,特别是代码多的时候,特别容易出错。需要我们看代码的时候仔细一点。

    实例如下:

    <?php
    	class a {
    		public function test() {
    			echo 'aaa<br />';
    			$this->tests();
    		}
    		
    		public function tests() {
    			echo 'bbb';
    		}
    	}
    	
    	class b extends a {
    		public function tests() {
    			echo 'ccc';
    		}
    	}
    	
    	$b = new b();
    	$b->test();
    程序最后输出的结果是:

    aaa
    ccc



    展开全文
  • 继承和实现接口的比较:  (1)可以认为 实现接口是对单一继承的补充.  (2)可以在不破坏类层级关系的前提下,对某个类功能扩展.  final关键字  1.如果我们希望某个类不被其它的类来继承(可能因为安全考虑...), ...

     继承和实现接口的比较:

     (1)可以认为 实现接口是对单一继承的补充.
     (2)可以在不破坏类层级关系的前提下,对某个类功能扩展.
     final关键字
     1.如果我们希望某个类不被其它的类来继承(可能因为安全考虑...), 可以使用final

    //  final class A{

    //  }

    //此时,B类不能继承A类

    //  class B extends A{

    //  }
    //  echo "ok";

     2.如果我们希望某个方法,比如计算个人所得税的方法,不能子类改写,(不希望该方法被子类中方法重载   )可以使用fianl 来修饰方法

    <?php
    class A{
        final public function getRate($salary){
            return $salary*0.08;
        }
    }
    class B extends A{
        //不能去覆盖父类的getRate方法.
        /*public function getRate($sal){
            return $sal*0.01;
        }*/
    }
          
    $b=new B();
    echo $b->getRate(100)."<br/>";
    ?>


    final关键字不能去修饰属性.

    const 关键字 的讲解
    //当你有一个属性,不希望被修改,则考虑使用const 做成常量
    // 基本用法是
    // class C{
    //        //常量在定义的同时必须赋初值
    //        const 常量名=赋初值;
    // }
    // interface 接口名{
    //        //常量在定义时就要赋储值
    //        const 常量名=赋初值;
    // }
    // 常量不能写修饰符,默认是public,但不能写出来
    // 常量名一般全部用大写字母表示
    // 使用 类名::常量名; 接口名::常量

    <?php
           class Z{
                  //常量在定义的时候,必须给初值.
                  //const 关键字前面不要带修饰符号,但默认为public.
                  const TAX_RATE=0.08;
                  public function payTax($val){
                         //常量不能修改.
                         //Z::TAX_RATE=0.01;
                         //return $val*self::TAX_RATE; 【ok】
                         return $val*Z::TAX_RATE; //【ok】
                  }
           }
           $a=new Z();
           echo $a->payTax(200);
    
    ?>


    注意:

     1.常量在定义的时候需要赋初值
     2.常量不能修改.
     3.常量名不能有 $, 一般是大写, 默认是public
     4.常量在类的内部使用 self::常量的名称  或   类名::常量的名称  表示
        在类的外部使用   类名::常量的名称   表示.
     5.常量可以被子类继承
     6.常量是属于 类 的,不是属于某个对象

    展开全文
  • 主要介绍了PHP 使用 Trait 解决 PHP继承问题,结合实例形式详细分析了PHP 使用 Trait 实现PHP继承的相关操作技巧与注意事项,需要的朋友可以参考下
  • <?php class Person{ private $name; private $age; public function __construct($name,$age){ $this->name = $name; $this->age = $age; } public function show(){ echo $this->name....
  • 主要介绍了php类的定义与继承用法,实例分析了php中类的基本定义与继承的使用技巧,需要的朋友可以参考下
  • PHP面向对象的继承

    千次阅读 2018-09-13 22:07:53
     1、PHP是单继承的,一个类只可以继承一个父类,但一个父类却可以被多个子类所继承。  2、子类不能继承父类的私有属性和私有方法  3、类的方法可以被继承,类的构造函数也能被继承  4、继承的方法:使用...

    一、简介

     1、继承是从一个基类得到一个或多个类的机制,可以实现对类的复用
     2、子类将继承父类的属性和方法,同时可以扩展父类


    二、如何继承一个类

     1、PHP是单继承的,一个类只可以继承一个父类,但一个父类却可以被多个子类所继承。
     2、子类不能继承父类的私有属性和私有方法
     3、类的方法可以被继承,类的构造函数也能被继承
     4、继承的方法:使用extends关键字

    //定义一个基类
    class Book{
    	public $name;
    	public $price;
    	private $page;
    	public function __construct($name){
    		$this->name = $name;
    	}
    	public function getName(){
    		return $this->name;
    	}
    }
    
    //定义一个子类,并继承基类
    class NoteBook extends Book{
    
    }
    
    //实例化子类,并继承基类构造方法
    $notebook = new NoteBook('book');
    
    //子类继承的属性
    echo $notebook->name;//结果为book
    
    //子类继承的属性
    echo $notebook->getName();//结果为book
    
    //子类不能访问基类的私有属性
    echo $notebook->page; //错误
    

    三、如何继承一个类

     1、可以在类的属性和方法前面加上一个修饰符,来对类进行一些访问上的控制
     2、private : 不能直接被外部调用,只能在当前类的内部调用
     3、protected : 修饰的属性和方法只能被当前类内部或子类调用,外界无法调用
     4、public : 修饰的属性和方法,可以被无限制地调用


    四、重写

     1、如果从父类继承的方法不能满足子类的需求时,可以对其进行改写,这个过程叫方法的重写。
     2、子类中覆盖的方法,不能使用比父类被覆盖方法更严格的访问权限。
     3、父类的构造方法,也可以重写。

    	//定义一个子类,并继承基类
    	class NoteBook extends Book{
    		//覆写基类的方法
    		public function getName(){
    			return 'The book name is'.$this->name;
    		}
    	}
    

    五、parent:: 关键字

     1、使用parent::来引用父类的方法,同时也可以用于调用父类中定义的成员方法。

    public function getName(){
    	//调用父类的方法
    	return 'The book name is '.parent::getName();
    }
    
    展开全文
  • 主要介绍了PHP接口多继承及tarits实现多继承效果的方法,结合实例形式分析了php基于接口的多继承PHP5.4中引入的tarits实现多继承功能简单操作技巧,需要的朋友可以参考下
  • php class之继承

    千次阅读 2018-05-23 11:44:59
    在使用的时候会发现,某个方法不太适用目前的某个要求了,但是由于这个方法在其他地方多次使用,我们又不能修改这个方法,如果再新建一个class的话,其余的方法又都重复了,这个时候我们就可以使用class间的继承了,...
    很多时候,我们定义了一些对象以后,在使用的时候会发现,某个方法不太适用目前的某个要求了,但是由于这个方法在其他地方多次使用,我们又不能修改这个方法,如果再新建一个class的话,其余的方法又都重复了,这个时候我们就可以使用class间的继承了,继承就像儿子继承父亲的财产一样,子对象可以直接使用父对象的方法,也可以重写父对象的方法,我们先看一个简单的例子:
    class man {
    public $height=180;
    public function getHeight(){
    echo "I'm father,my height is :".$this->height;
    echo "<br>";
    }
    public function la(){
    echo "啦啦啦<br>";
    }
    }

    class son extends man{
    public $height=120;
    public function getHeight(){
    echo "I'm son,my height is :".$this->height;
    echo "<br>";
    }
    }

    $man = new man();
    $son = new son();
    $man->getHeight();//调用父对象自己本身的方法
    $son->getHeight();//调用子对象自己本身的方法
    $son->la();//调用父对象方法
    我们定义了一个man对象。然后又定义了一个son对象,son 使用extends 关键字 继承了man,表示son是man的子对象。需要注意的是,一个父对象可以有多个子对象,我们可以写很多个对象来继承man。但是子对象只能有一个父对象,这个就不解释了。
    下面的执行的代码,前四行我们都不多解释了,最后一行$son->la();我们son对象里并没有定义la()这个方法,但是依然可以输出,这也就是继承特点,子对象可以直接调用父对象的方法。其实子对象也可以直接调用父对象的属性,比如我们删除了son里面height的定义,然后在执行,依然可以输出,只不过输出的身高变成了父对象设置的高度属性。简单点来说,就相当于,如果子对象自己有,就优先用自己的,自己没有就用父对象的,如果父对象也没有,就继续找父对象的父对象,依次类推。如果都找不到则报错。
    子对象也可以定义一些和父对象无关的方法去使用。就是子对象和父对象的方法不要求完全一致
    当子对象重写父对象方法的时候,参数列表也必须要一致,简单说就是个数要一致,除了构造函数以外,父方法有几个参数,对应的子方法也要有几个参数。
    需要特别说明的是,一个类的私有方法或者变量是private类型的时候,子类是不能直接使用的。比如:
    class man {
    private $height=180;
    public function getHeight(){
    echo "I'm father,my height is :".$this->height;
    echo "<br>";
    }
    }
    class son extends man{
    public function getHeight(){
    echo "I'm son,my height is :".$this->height;
    echo "<br>";
    }
    }
    $son = new son();
    $son->getHeight();
    我们给man定义了一个私有变量$height,在son里面并没有定义$height,然后我们试图使用$son->getHeight();的时候,就会报错。
    class还有一种变量类型。在前面我们并没有介绍,放到这里介绍比较合适,关键字: protected意思就是受保护的类型,这种类型只能本身和子对象才可以调用,其他地方则不能调用,比如:
    class man {
    protected $height=180;
    public function getHeight(){
    echo "I'm father,my height is :".$this->height;
    echo "<br>";
    }
    }
    class son extends man{
    public function getHeight(){
    echo "I'm son,my height is :".$this->height;
    echo "<br>";
    }
    }
    $man = new man();
    $son = new son();
    $man->getHeight();
    $son->getHeight();
    我们定义了一个protected 类型的变量,然后在子类里面使用,发现可以正常使用,而当我们试图在外部直接赋值的时候$son->height = 120;则会报错提示我们找不到height这个属性。而把height改成public以后,则可以正常赋值。
    静态方法和变量的继承,几乎和非静态的差不多,只需要注意一下保持都是静态的就行了,这里就不过多介绍了,喜欢动手的朋友可以自己试一下,也许会发现什么惊喜。下面我们再介绍几个关于class的知识点。
    parent:
    使用parent关键字,字对象可以访问父对象被字对象覆盖的方法,具体使用形式是parent::functionname();比如
    class man {
    protected $height=180;
    public function getHeight(){
    echo "I'm father,my height is :".$this->height;
    echo "<br>";
    }
    }
    class son extends man{
    protected $height=120;
    public function getHeight(){
    echo "I'm son,my height is :".$this->height;
    echo "<br>";
    parent::getHeight();
    }
    }
    $man = new man();
    $son = new son();
    $man->getHeight();
    $son->getHeight();
    在子方法里面使用parent::getHeight();调用已经被覆盖的getHeight方法。执行结果如下:
    I'm father,my height is :180
    I'm son,my height is :120
    I'm father,my height is :120
    看到这里,就会感觉很奇怪了,为什么最后输出的是120?这里就是class的一些处理机制问题了,我们知道子对象可以覆盖父对象的public和protected类型的属性和方法。在php处理的过程中 ,父对象的属性,是完全被覆盖的,相当于消失了,所以最后才会输出120, 而私有的属性则不会被覆盖,使用parent的时候,则会继续使用父对象的属性,我们再简单的看一个例子:
    class man {
    public $height=180;
    protected $weight = 65;
    private $sex = "男";
    public function getData(){
    echo "I'm father,height:$this->height,weight:$this->weight,sex:$this->sex<br/>";
    }
    }

    class daughter extends man{
    public $height=120;
    protected $weight = 45;
    public $sex = "女";
    public function getData(){
    echo "I'm daughter,height:$this->height,weight:$this->weight,sex:$this->sex<br/>";
    parent::getData();
    }
    }

    $daughter = new daughter();
    $daughter->getData();
    输出结果为:
    I'm daughter,height:120,weight:45,sex:女
    I'm father,height:120,weight:45,sex:男
    我们很明显的可以看到,身高和体重,父对象里面调用的时候,都被子对象覆盖了,而性别是私有属性,子对象无法覆盖,所以性别输出还是男。class允许继承的时候修改属性的类型,但是只能范围变得更大,而不能变小,比如private可以修改为public,反之则不行。
    final:
    父对象声明的final类型的方法,不允许子对象覆盖,否则会报错

          转载请注明出处:https://blog.csdn.net/shuchuan0409/article/details/80417864

    展开全文
  • PHP - 多继承实现 - 学习/实践

    千次阅读 2019-11-15 14:58:38
    记得有一道面试题问php是否支持多继承? //不支持的原因跟其他语言的原因相同: 如java 都是多继承带来的菱形继承问题(又叫钻石问题) 详细解释: 假设类 B 和类 C 继承自类 A,且都重写了...
  • 本文实例讲述了php构造函数的继承方法。分享给大家供大家参考。具体如下: 第一种情况:子类没有定义构造函数时,默认继承。例子: <?php class A{ public $name; function __construct(){ echo $this->name...
  • PHP extends关键字继承父类与parent关键字调用父类中的成员方法
  • PHP中的继承

    千次阅读 2018-03-12 14:41:24
    php中的继承语法:extends注意:继承并不改变类的结构。而是表名了两个类之间存在着某种关系,使得其中的成员看起来像是在别的类中存在。主要的语法流程是:但我们new一个对象时,会在数据区先开辟一个存储空间,...
  • 类是面向对象中的重要概念,而封装和继承是面向对象的重要特点。这篇文章我们就重点讨论一下封装、继承这两个特点,给出一些列子,供大家学习参考。
  • PHP实现接口多继承

    千次阅读 2017-06-13 16:53:47
    PHP类只能继承一个父类(单继承),但是接口可以实现多继承,可以继承一个或者多个接口。当然接口的继承也是和类的继承一样使用extends关键字,要多个继承的话只要用逗号把继承的接口隔开即可。 需要注意的是当你...
  • PHP类的继承、重写、重写...

    千次阅读 2018-01-01 21:43:37
    PHP中,一个类只能继承自一个其他的类,不同同时继承多个类,单继承也是大多数面向对象语言的特性 强调 : 属性和方法都可以被继承 继承的本质,不是把父类中的代码复制到子类的内部,而是通过继承链条...
  • 访问控制(可见性)PHP 中,对类中的成员(属性和方法)的访问控制,是通过以下三个访问修饰符来实现的。public(公有的)protected(受保护的)private(私有的)public、protected 和 private 可以控制类成员的...
  • 主要介绍了php使用类继承解决代码重复的问题,实例分析了继承的原理与使用技巧,非常具有实用价值,需要的朋友可以参考下
  • php中,类型的继承使用extends关键字,而且最多只能继承一个父类,php不支持多继承。 class MyClass { public $dat = 0; public function __construct($dat) { $this->dat = $dat; } public function getDat...
  • 特点:单继承:一个子类可以有多个父类,一个父类可以派生出多个子类 override:方法重写 overload:重载,编辑多态 三.多态(运行多态) 概念:父类引用子类实例,由于子类里面对父类的方法进行重写,父类引用在...
  • 主要介绍了php类的定义与继承用法,实例分析了php中类的基本定义与继承的使用技巧,需要的朋友可以参考下,希望本文所述对大家的php程序设计有所帮助。
  • php子类与父类间的属性继承

    千次阅读 2017-09-29 01:27:53
    <?php /** * ShopProduct类,父类 */ class ShopProduct{ private $mShopName; public $mTitle; public $mPrice; public function __construct ($shopName="shopName",
  • PHP继承: 1、PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承 比如: class frist{ public function __construct(){ echo "我是第一个类。"," "; } public function printer(){ ...
  • 继承特性: 子类可以访问父类的成员,继承关键字extends,可以代码的重用性,子类中写了一个与父类同名的方法,这个方法会覆盖父类中的方法. 1)重用性 2)扩展性 3)灵活性 类继承 <?php // Person.class....
  • 2、PHP继承的规则 CLASS1——>CLASS2——>CLASS3 依次被继承,class3拥有class1、class2所以功能和属性,避免方法和属性重名。 class Son{} 继承class root{}; class Son extends Root{}; 3、基类方法重载和...
  • php继承的几种方法

    千次阅读 2018-05-02 20:23:17
    echo "接口继承,要实现所有相关抽象方法!"; echo " "; } function dancing($name){ echo $name."正在跳舞!"; } } $demo=new testC(); $demo->echostr(); $demo->dancing("模特");
  • 主要介绍了php类的扩展和继承用法,以实例形式较为详细的分析了php类的继承及扩展操作技巧,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,622
精华内容 38,248
关键字:

php继承