zoukankan      html  css  js  c++  java
  • php静态

    static 是定义一个静态对象或静态变量,关于static 定义的变量或类方法有什么特性我们看完本文章的相关实例后就见分晓了。

    1. 创建对象$object = new Class(),然后使用”->”调用:$object->attribute/function,前提是该变量/方法可访问
    2. 直接调用类方法/变量:class::attribute/function,无论是静态/非静态都可以。但是有前提条件:
    A. 如果是变量,需要该变量可访问。
    B. 如果是方法,除了该方法可访问外,还需要满足:
    b1) 如果是静态方法,没有特殊条件;
    b2) 如果是非静态方法,需要改方法中没有使用$this,即没有调用非静态的变量/方法,当然,调用静态的变量/方法没有问题。

    然后我们再看一下使用$object->… 和使用class::… 都有什么区别:
    1. 使用$object->… ,需要执行构造函数创建对象;
    2. 使用class::… 调用静态方法/变量,不需要执行构造函数创建对象;
    3. 使用class::… 调用非静态方法/变量,也不需要执行构造函数创建对象。

    然后奇怪的地方就出来了,既然2和3都一样,那静态方法/变量存在还有什么意义呢?
    静态 static
    声明类成员或方法为 static ,就可以不实例化类而直接访问,不能通过一个对象来访问其中的静态成员(静态方法除外)。

    静态成员属于类,不属于任何对象实例,但类的对象实例都能共享

    <?php
    Class Person{
        // 定义静态成员属性
        public static $country = "中国";
        // 定义静态成员方法
        public static function myCountry() {
            // 内部访问静态成员属性
            echo "我是".self::$country."人<br />";
        }
    }
    class Student extends Person {
        function study() {
            echo "我是". parent::$country."人<br />";
        }
    }
    // 输出成员属性值
    echo Person::$country."<br />";  // 输出:中国
    $p1 = new Person();
    //echo $p1->country;   // 错误写法
    // 访问静态成员方法
    Person::myCountry();   // 输出:我是中国人
    // 静态方法也可通过对象访问:
    $p1->myCountry();
    
    // 子类中输出成员属性值
    echo Student::$country."<br />"; // 输出:中国
    $t1 = new Student();
    $t1->study();    // 输出:我是中国人
    ?>
    

     小结
    1在类内部访问静态成员属性或者方法,使用 self::(注意不是 $slef)

    slef:: $country
    slef:: myCountry()

    2在子类访问父类静态成员属性或方法,使用 parent::(注意不是 $parent)

    parent:: $country
    parent:: myCountry()

    3外部访问静态成员属性和方法为 类名/子类名::

    Person::$country
    Person::myCountry()
    Student::$country

    4但静态方法也可以通过普通对象的方式访问。

    <?PHP
       function foo(){
       static $int = 0;// correct
       static $int = 1+2;   // wrong (as it is an expression)
       static $int = sqrt(121); // wrong (as it is an expression too)
       
       $int++;
       echo $int;
       }
       ?>
    
    <?PHP
       function Test()
       {
       static $w3sky = 0;
       echo $w3sky;
       $w3sky++;
       }
       ?>
    
  • 相关阅读:
    Android开发 listitem中采用倒计时
    fresco中设置占位/加载失败的图片 无效
    启动 angular-phonecat 项目时出现这玩意 。('The header content contains invalid characters');
    对于在Android Studio 的 build.gradle 中的默认applicationId 要不要写呢?
    Android-Cannot merge new index 66195 into a non-jumbo instruction的解决办法
    在eclipse 导入简单的Android studio 简单项目
    对于android浏览器的一些看法
    Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
    android 判断点击的位置是不是在指定的view上
    android studio(AS) Duplicate files copied in APK META-INF/NOTICE.txt
  • 原文地址:https://www.cnblogs.com/zoubizhici/p/5569515.html
Copyright © 2011-2022 走看看