zoukankan      html  css  js  c++  java
  • 面向对象的静态属性、静态方法

    静态属性:

    基本概念:

      静态属性是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。

    定义静态属性 

      (1)   访问修饰符 static 静态属性名;

      (2)   static 访问修饰符 静态属性名;

    :: 叫 范围解析符

    在类的内部访问可以使用两种方式  self::$静态属性名  ,  类名::$静态属性名

    在类的外部访问静态属性,静态属性需要是public ,否则也不能直接访问, 访问的形式是 类名::$属性名

    快速入门案例:

    /*
        创建一个类:唐僧队伍 类中包含了姓名、年龄、个人每天消耗的食物数量
        队伍不断的有成员加入 唐僧、孙悟空、猪八戒、沙僧
        $num表示队伍的人数 $food_sum表示队伍每天消耗的蛋糕数量
    */
    class Person{
        public $name;
        public $age;
        public $food_num;
        //创建静态属性
        public static $num = 0;
        public static $food_sum = 0;
        public function __construct($name,$age,$food_num){
            $this -> name = $name;
            $this -> age = $age;
            $this -> food_num = $food_num;
        }
        public function num(){
            //内部访问静态属性
            self :: $num++; 
            self :: $food_sum += $this -> food_num; 
        }
    }
    $p1 = new Person('唐僧',24,3);
    $p1 -> num();
    $p2 = new Person('孙悟空',720,5);
    $p2 -> num();
    $p3 = new Person('猪八戒',360,9);
    $p3 -> num();
    $p4 = new Person('沙僧',180,30);
    $p4 -> num();
    //外部访问静态属性
    echo '师徒一共' . Person::$num . '人' . '每天吃' .  Person::$food_sum . '块蛋糕';
    //创建一个类来计算一共有1000块蛋糕每过一天蛋糕还剩多少
    class Day{ public $day; public static $sum = 1000; public function sum(){ self::$sum -= Person:: $food_sum; } } $day1 = new Day(); $day1 -> day = '第一天'; $day1 -> sum(); echo '<br>' . $day1 -> day . "蛋糕还剩下" . Day::$sum; $day2 = new Day(); $day2 -> day = '第二天'; $day2 -> sum(); echo '<br>' . $day2 -> day . "蛋糕还剩下" . Day::$sum; 输出结果: 师徒一共4人每天吃47块蛋糕 第一天蛋糕还剩下953 第二天蛋糕还剩下906

     静态方法:

    基本概念:  

      当程序员需要对静态属性进行操作时,可以定义静态方法来处理, 静态方法是专门用于操作静态属性.

    说明:

      (1)   静态方法是在类中定义的

      (2)   static 是关键字,不能修改.

      (3)   静态方法专门用于操作静态属性

      (4)   静态方法可以通过类名直接调用. 形式是 类名::静态方法名(参数 )

    快速入门案例:

    class Person{
        public $name;
        private static $address = '北京';
        public function __construct($name){
            $this -> name = $name; 
        }
        //静态方法操作静态属性
        public static function showAddress(){
            echo '<br>地址是' . self::$address;
        }
    }
    //外部调用静态方法
    Person::showAddress();

    细节:

      在类外部调用静态方法:  类名::静态方法名 或者 对象名->静态方法名 或者 对象名::静态方法(语法支持,但是不推荐)

      举例说明:

    class Person{
        public $name;
        private static $address = '北京';
        public function __construct($name){
            $this -> name = $name; 
        }
        //静态方法操作静态属性
        public static function showAddress(){
            echo '<br>地址是' . self::$address;
        }
    }
    //外部调用静态方法
    //第一种调用方法:推荐使用
    Person::showAddress();
    //后面两种调用方法不推荐使用但是需要了解
    $p1 = new Person('小明');
    $p1 -> showAddress();
    $p1::showAddress();

      在类内部调用静态方法:    self::静态方法名 或者 类名::静态方法名 , 通过 $this也可以

      举例说明:

    class Person{
        public $name;
        private static $address = '北京';
        public function __construct($name){
            $this -> name = $name; 
        }
        //静态方法操作静态属性
        private static function showAddress(){
            echo '<br>地址是' . self::$address;
        }
        //通过内部调用
        public function test(){
            //方式一:推荐使用
            self::showAddress();
            //其余两种方式不推荐使用但是需要了解
            //方式二:
            Person::showAddress();
            //方式三:
            $this -> showAddress();
        }
    }
    $p1 = new Person('小明');
    $p1 -> test();

      ③静态方法中只能访静态属性,不能访问非静态属性(普通属性, 没有static)

      ④普通的成员方法,可以访问静态属性和非静态属性

  • 相关阅读:
    Sqlserver中的触发器
    Memcache在.Net中的使用
    Sqlserver中的储存过程
    Ado.NET基础必备
    MVC项目报错 ”基础提供程序在 Open 上失败”
    【Darwin学习笔记】之获取系统处理器数量的方法
    Wireshark抓包工具--TCP数据包seq ack等解读
    TCP:WireShark分析,序列号Seq和确认号Ack
    【Darwin学习笔记】之TaskThread
    boost::asio::io_context类
  • 原文地址:https://www.cnblogs.com/rickyctbur/p/11067844.html
Copyright © 2011-2022 走看看