zoukankan      html  css  js  c++  java
  • [学习] php 类

    php 类

    PHP面向对象中new self( )和 new static( ) 的区别

    • 被定义为公有(public)的类成员可以在任何地方被访问(类的内部,包过父类,子类,自己;还可以通过类的实例对象访问)。
    • 被定义为受保护(protected)的类成员则可以被其自身以及其子类和父类访问,不能通过类的实例对象访问。
    • 被定义为私有(private)的类成员则只能被其定义所在的类访问,不能通过类的实例对象访问。

    默认都是public。

    子类默认继承父类所有的 public 和 protected 方法,但不继承 private 方法和属性。

    双冒号(::)是范围解析操作符,用于访问类的静态成员类常量

    双冒号只能访问静态属性,不能访问非静态的其他属性(public、private、protected)。但是双冒号可以调用非静态方法(包括public、protected、private)。

    // php 版本5.6.9
    class B {
        static $name = "b";
        public $er = "er";
        function testFnc() {
            echo self::aa()."
    ";
            echo self::bb()."
    ";
            echo self::c()."
    ";
        }
        function aa() {
            echo "public aa function 
    ";
        }
        protected function bb() {
            echo "protected bb function 
    ";
        }
        private function c() {
            echo "private c function 
    ";
        }
    }
    
    $b = new B();
    $b->testFnc();
    

    static 关键字

    static关键字声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

    $this在静态方法中不可用。

    // php 版本5.6.9
    class Test {
        static $name = "ghj";
        public static function tt() {
            echo "static function tt 
    ";
        }
    }
    
    $t = new Test();
    $t->tt(); // static function tt
    $t->name; // 报错
    echo Test::$name; // ghj
    

    函数里的静态变量

    在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内。

    静态变量只在局部的作用域中存在,离开这个作用域也不会丢失,当然也不能再次初始化。

    // php 版本5.6.9
    function test() {
       static $a = 1; // 只在第一次调用test()函数时执行这一句,之后每次调用都会以上次调用后$a的值作为初始值
       echo $a;
       $a++; 
    }
    
    test(); // 第一次调用 打印 1
    test(); // 第二次调用 打印 2
    

    后期静态绑定 static::

    static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于静态方法的调用以及静态属性的访问。

    // php 版本5.6.9
    class Test {
        static $name = "ppp";
        static function getName() {
            return static::$name;
        }
    
        function tt() {
            echo '$name -- '.static::getName()."
    ";
            echo 'static::$name -- '.static::$name."
    ";
        }
    }
    
    class Fast extends Test {
        static $name = "Fast";
    }
    
    $t = new Test();
    $t->tt(); // static解析为Test  ppp
    
    $f = new Fast();
    $f->tt(); // static解析为Fast  Fast
    

    self与static的区别

    比如在函数中:

    • self是静态函数(静态属性)声明所在的类
    • static是调用静态函数(访问静态属性)的那个类

    例子:

    // php 版本5.6.9
    class A {
        static $name = 'a';
        function test() {
            echo self::$name."
    ";
            echo static::$name."
    ";
        }
    }
    
    class B extends A {
        static $name = "b";
    }
    
    $a = new A();
    $b = new B();
    $a->test(); // a a
    
    $b->test();// a b
    
  • 相关阅读:
    第一次项目总结
    动画animation
    动画基本
    JQ属性和CSS
    JQ选择器
    关于JS的循环和函数,由入门到放弃
    Js知识点
    课程总结
    移动端开发--项目总总结
    项目总结
  • 原文地址:https://www.cnblogs.com/fogwind/p/15194449.html
Copyright © 2011-2022 走看看