zoukankan      html  css  js  c++  java
  • 抽象

                    静态关键字static和self                      

         static关键字是在类中描述成员属性成员方法是静态的;前面声明了“Person”的人类,在“Person”这个类里如果我们加上一个“人所属国家”的属性,这样用“Person”这个类实例化出几百个或者更多个实例对象,每个对象里面就都有“所属国家”的属性了,如果开发的项目就是为中国人而开发的,那么每个对象里面就都有一个国家的属性是 “中国“其它的属性是不同的,如果我们把“国家”的属性做成静态的成员,这样国家的属性在内存中就只有一个,而让这几百个或更多的对象共用这一个属性。

    作用:

    static成员能够限制外部的访问,因为static的成员是属于类的,是不属于任何对象实例,是在类第一次被加载的时候分配的空间,其他类是无法访问的,只对类的实例共享,能一定程度对类该成员形成保护;

    static方法是类中的一个成员方法,属于整个类,即使不用创建任何对象也可以直接调用!

    class Ren
    {
    	public $name="张三";
    	public static $zhongzu; //静态成员
    	
    	//普通方法
    	function Say()
    	{
    		echo self::$zhongzu."你好";
    	}
    	//静态方法
    	static function Run()
    	{
    		//echo  $this->name;  静态方法不能调用非静态属性
    	 echo self::$zhongzu;
    }
    }
    Ren::$zhongzu = "战斗民族";//静态属性赋值
    Ren::Run();               //调用静态方法
    
    $r = new Ren();
    $r->Say();
    

      

    结果:


    //普通成员
    //普通成员是属于对象的

    //静态成员
    //静态成员是属于类的

    //普通方法里面可以调用静态成员
    //静态方法里面不能调用普通成员
    //self关键字 在类里面代表该类

                                    抽象                                 

    抽象类
    不能被实例化
    做为父类使用

    abstract class Demo
    {
        var $test;
     
        abstract function fun1();
        abstract function fun2();
     
        function fun3()
        {
            ...
        }
    }
     
    $demo = new Demo(); // 抽象类不能产生实例对象,所以这样做是错的,实例化对象交给子类
     
    class Test extends Demo
    {
        function fun1()
        {
            ...
        }
     
        function fun2()
        {
            ...
        }
    }
     
    $test = new Test(); // 子类可以实例化对象,因为实现了父类中所有抽象方法
    

      

    实例:

    abstract class YunSuan
    {
    	public $a;
    	public $b;
    	
    	function Suan()
    	{
    	}
    }
    
    class Jia extends YunSuan
    {
    	function Suan()
    	{
    		return $this->a+$this->b;
    	}
    }
    
    class Jian extends YunSuan
    {
    	function Suan()
    	{
    		return $this->a-$this->b;
    	}
    }
    
    class Cheng extends YunSuan
    {
    	function Suan()
    	{
    		return $this->a*$this->b;
    	}	
    }
    
    $cheng = new Cheng();
    $cheng->a=10;
    $cheng->b=5;
    echo $cheng->Suan();
    

      

    结果:50

    接口
    //极度抽象的类
    //接口里面的方法主要是用来控制子类必须实现该方法

    interface IUSB
    {	
    	function Read(); //接口里面只声明函数名
    	function Write(); 
    }
    
    class ShuBiao implements IUSB    //子类中必须继承父类中所有函数
    {
    	function Read()
    	{
    		echo "鼠标插上了";
    	}
    	function Write()
    	{
    		echo "给鼠标传了数据";
    	}
    }
    
    $s = new ShuBiao();
    $s->Read();
    

      

    结果:

  • 相关阅读:
    vue 兼容IE报错解决方案
    JDK1.8 ArrayList 源码解析
    Mac nasm 汇编入门
    命令模式
    模板方法
    Mysql Limit 调优
    观察者模式
    外观模式
    Rest- Client
    MongoDB数据库 5分钟快速上手
  • 原文地址:https://www.cnblogs.com/cyrfr/p/6169278.html
Copyright © 2011-2022 走看看